diff --git a/pkgbuilds/yt6801-dkms/.omarchy/package.json b/pkgbuilds/yt6801-dkms/.omarchy/package.json index fa2b446..45f07e4 100644 --- a/pkgbuilds/yt6801-dkms/.omarchy/package.json +++ b/pkgbuilds/yt6801-dkms/.omarchy/package.json @@ -13,5 +13,6 @@ "origin": { "aur": "yt6801-dkms", "commit": "020a0f11079cc974794e49856a1a98ab677570a9" - } + }, + "sync": false } diff --git a/pkgbuilds/yt6801-dkms/PKGBUILD b/pkgbuilds/yt6801-dkms/PKGBUILD index e46a73e..8f21e73 100644 --- a/pkgbuilds/yt6801-dkms/PKGBUILD +++ b/pkgbuilds/yt6801-dkms/PKGBUILD @@ -3,7 +3,7 @@ _pkgbase=yt6801 pkgname=yt6801-dkms pkgver=1.0.34 -pkgrel=1 +pkgrel=2 pkgdesc="Kernel module for Motorcomm YT6801 ethernet controller (DKMS)" arch=('x86_64') url="https://www.motor-comm.com/product/ethernet-control-chip" @@ -11,21 +11,44 @@ license=('GPL-2.0-or-later') depends=('dkms') source=(${_pkgbase}-${pkgver}.zip::'https://www.motor-comm.com/Cn/Skippower/downloadFile.html?id=1817' 'patch.diff') -sha256sums=('877e6953fc6eb47232a74e47b0daf33de0e7f9e9a395d3bc10d500d3c4150af8' '597cbcefe2c3f426a20b089b1a24f7bfcaffe81bdfe1bd2c789c9228b3b5708e') +sha256sums=('877e6953fc6eb47232a74e47b0daf33de0e7f9e9a395d3bc10d500d3c4150af8' + '3bad74e58b248d28212f9af468c0522440b9b96a335930f97595cd9f1a5c7b25') prepare() { - cd ${srcdir} - mkdir src - tar -zxf ${_pkgbase}-${pkgver}.tar.gz -C src - patch -p1 < patch.diff + cd "$srcdir" + mkdir -p src + tar -zxf "${_pkgbase}-${pkgver}.tar.gz" -C src + patch --fuzz=0 -p1 < patch.diff + rm -- src/fuxi-gmac-ioctl.c +} + +check() { + local result file pattern + [[ ! -e $srcdir/src/fuxi-gmac-ioctl.c ]] || return 1 + # A missing or unreadable input is a failed verification, not proof that the + # private interface is absent. grep returns 1 only for a successful no-match. + for file in fuxi-gmac-net.c Makefile; do + [[ -f $srcdir/src/$file && -r $srcdir/src/$file ]] || return 1 + if [[ $file == "Makefile" ]]; then + pattern='fuxi-gmac-ioctl\.o' + else + pattern='\.ndo_(do_ioctl|siocdevprivate)' + fi + if grep -E "$pattern" "$srcdir/src/$file" >/dev/null; then + return 1 + else + result=$? + (( result == 1 )) || return 1 + fi + done } package() { - mkdir -p ${pkgdir}/usr/src/${_pkgbase}-${pkgver} - - install -Dm644 ${srcdir}/src/*.c ${pkgdir}/usr/src/${_pkgbase}-${pkgver}/ - install -Dm644 ${srcdir}/src/*.h ${pkgdir}/usr/src/${_pkgbase}-${pkgver}/ - install -Dm644 ${srcdir}/src/Makefile ${pkgdir}/usr/src/${_pkgbase}-${pkgver}/ - install -Dm644 ${srcdir}/src/dkms.conf ${pkgdir}/usr/src/${_pkgbase}-${pkgver}/ - install -Dm644 ${srcdir}/src/motorcomm ${pkgdir}/usr/src/${_pkgbase}-${pkgver}/ + mkdir -p "$pkgdir/usr/src/${_pkgbase}-${pkgver}" + + install -Dm644 "$srcdir"/src/*.c "$pkgdir/usr/src/${_pkgbase}-${pkgver}/" + install -Dm644 "$srcdir"/src/*.h "$pkgdir/usr/src/${_pkgbase}-${pkgver}/" + install -Dm644 "$srcdir"/src/Makefile "$pkgdir/usr/src/${_pkgbase}-${pkgver}/" + install -Dm644 "$srcdir"/src/dkms.conf "$pkgdir/usr/src/${_pkgbase}-${pkgver}/" + install -Dm644 "$srcdir"/src/motorcomm "$pkgdir/usr/src/${_pkgbase}-${pkgver}/" } diff --git a/pkgbuilds/yt6801-dkms/patch.diff b/pkgbuilds/yt6801-dkms/patch.diff index 3e2ad95..538263c 100644 --- a/pkgbuilds/yt6801-dkms/patch.diff +++ b/pkgbuilds/yt6801-dkms/patch.diff @@ -37,3 +37,59 @@ index 539b507..2435f0c 100644 #define FXGMAX_ASPM_WAR_EN /* Descriptor related parameters */ #if FXGMAC_TX_HANG_TIMER_ENABLED +diff --git a/src/fuxi-gmac-net.c b/src/fuxi-gmac-net.c +--- a/src/fuxi-gmac-net.c ++++ b/src/fuxi-gmac-net.c +@@ -2133,41 +2133,0 @@ +-/* +- * cmd = [0x89F0, 0x89FF] +- * When using it, we must pay attention to the thread synchronization +- * of this interface. Because it's an external call that isn't +- * initiated by the OS. +- */ +-static int fxgmac_ioctl(struct net_device *netdev, +- struct ifreq *ifr, int cmd) +-{ +- struct file f; +- int ret = FXGMAC_SUCCESS; +- struct fxgmac_pdata *pdata = netdev_priv(netdev); +- +- if (!netif_running(netdev) || +- pdata->expansion.dev_state != FXGMAC_DEV_START) +- return -ENODEV; +- +- f.private_data = pdata; +- +- switch (cmd) { +- case FXGMAC_DEV_CMD: +- ret = fxgmac_netdev_ops_ioctl(&f, FXGMAC_IOCTL_DFS_COMMAND, (unsigned long)(ifr->ifr_data)); +- break; +- default: +- ret = -EINVAL; +- break; +- } +- +- return ret; +-} +- +-#if ( LINUX_VERSION_CODE >= KERNEL_VERSION(5,15,0) ) +-static int fxgmac_siocdevprivate(struct net_device *dev, +- struct ifreq *ifr, +- void __user *data, +- int cmd) +-{ +- return fxgmac_ioctl(dev, ifr, cmd); +-} +-#endif +- +@@ -2369,4 +2328,0 @@ +- .ndo_do_ioctl = fxgmac_ioctl, +-#if ( LINUX_VERSION_CODE >= KERNEL_VERSION(5,15,0) ) +- .ndo_siocdevprivate = fxgmac_siocdevprivate, +-#endif +diff --git a/src/Makefile b/src/Makefile +--- a/src/Makefile ++++ b/src/Makefile +@@ -70 +70 @@ +-yt6801-objs := fuxi-gmac-common.o fuxi-gmac-desc.o fuxi-gmac-ethtool.o fuxi-gmac-hw.o fuxi-gmac-net.o fuxi-gmac-pci.o fuxi-gmac-phy.o fuxi-efuse.o fuxi-gmac-ioctl.o ++yt6801-objs := fuxi-gmac-common.o fuxi-gmac-desc.o fuxi-gmac-ethtool.o fuxi-gmac-hw.o fuxi-gmac-net.o fuxi-gmac-pci.o fuxi-gmac-phy.o fuxi-efuse.o diff --git a/pkgbuilds/yt6801-dkms/test-check.sh b/pkgbuilds/yt6801-dkms/test-check.sh new file mode 100755 index 0000000..b8f4ef3 --- /dev/null +++ b/pkgbuilds/yt6801-dkms/test-check.sh @@ -0,0 +1,40 @@ +#!/bin/bash +set -euo pipefail +source "${BASH_SOURCE[0]%/*}/PKGBUILD" +test_root=$(mktemp -d) +trap 'chmod -R u+rwX "$test_root"; rm -rf "$test_root"' EXIT +srcdir="$test_root/source with spaces" +mkdir -p "$srcdir/src" "$test_root/bin" +reset_inputs() { + chmod -R u+rwX "$srcdir" + rm -f "$srcdir/src/fuxi-gmac-ioctl.c" + printf 'static const struct net_device_ops operations = { };\n' >"$srcdir/src/fuxi-gmac-net.c" + printf 'yt6801-objs := fuxi-gmac-net.o\n' >"$srcdir/src/Makefile" +} +reject() { + if check; then + echo "FAIL $1" >&2 + exit 1 + fi +} +reset_inputs +check +: >"$srcdir/src/fuxi-gmac-ioctl.c" +reject 'dormant private implementation' +reset_inputs +printf '.ndo_do_ioctl = handler,\n' >>"$srcdir/src/fuxi-gmac-net.c" +reject 'private netdev callback' +reset_inputs +printf 'yt6801-objs += fuxi-gmac-ioctl.o\n' >>"$srcdir/src/Makefile" +reject 'private object' +reset_inputs +rm "$srcdir/src/Makefile" +reject 'missing input' +reset_inputs +chmod 000 "$srcdir/src/Makefile" +if (( EUID != 0 )); then reject 'unreadable input'; fi +reset_inputs +printf '#!/bin/bash\nexit 2\n' >"$test_root/bin/grep" +chmod +x "$test_root/bin/grep" +PATH="$test_root/bin:$PATH" reject 'grep I/O error' +printf 'PASS private interface check accepts clean input and rejects callbacks, objects, missing/unreadable input and grep errors\n'