Merge pull request #263 from AFOliveira/codex/harden-yt6801-private-ioctl
Remove YT6801 private ioctl interface
This commit is contained in:
4 files changed
+134
-14
No files matched your search
@@ -13,5 +13,6 @@
|
|||||||
"origin": {
|
"origin": {
|
||||||
"aur": "yt6801-dkms",
|
"aur": "yt6801-dkms",
|
||||||
"commit": "020a0f11079cc974794e49856a1a98ab677570a9"
|
"commit": "020a0f11079cc974794e49856a1a98ab677570a9"
|
||||||
}
|
},
|
||||||
|
"sync": false
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
_pkgbase=yt6801
|
_pkgbase=yt6801
|
||||||
pkgname=yt6801-dkms
|
pkgname=yt6801-dkms
|
||||||
pkgver=1.0.34
|
pkgver=1.0.34
|
||||||
pkgrel=1
|
pkgrel=2
|
||||||
pkgdesc="Kernel module for Motorcomm YT6801 ethernet controller (DKMS)"
|
pkgdesc="Kernel module for Motorcomm YT6801 ethernet controller (DKMS)"
|
||||||
arch=('x86_64')
|
arch=('x86_64')
|
||||||
url="https://www.motor-comm.com/product/ethernet-control-chip"
|
url="https://www.motor-comm.com/product/ethernet-control-chip"
|
||||||
@@ -11,21 +11,44 @@ license=('GPL-2.0-or-later')
|
|||||||
depends=('dkms')
|
depends=('dkms')
|
||||||
source=(${_pkgbase}-${pkgver}.zip::'https://www.motor-comm.com/Cn/Skippower/downloadFile.html?id=1817'
|
source=(${_pkgbase}-${pkgver}.zip::'https://www.motor-comm.com/Cn/Skippower/downloadFile.html?id=1817'
|
||||||
'patch.diff')
|
'patch.diff')
|
||||||
sha256sums=('877e6953fc6eb47232a74e47b0daf33de0e7f9e9a395d3bc10d500d3c4150af8' '597cbcefe2c3f426a20b089b1a24f7bfcaffe81bdfe1bd2c789c9228b3b5708e')
|
sha256sums=('877e6953fc6eb47232a74e47b0daf33de0e7f9e9a395d3bc10d500d3c4150af8'
|
||||||
|
'3bad74e58b248d28212f9af468c0522440b9b96a335930f97595cd9f1a5c7b25')
|
||||||
|
|
||||||
prepare() {
|
prepare() {
|
||||||
cd ${srcdir}
|
cd "$srcdir"
|
||||||
mkdir src
|
mkdir -p src
|
||||||
tar -zxf ${_pkgbase}-${pkgver}.tar.gz -C src
|
tar -zxf "${_pkgbase}-${pkgver}.tar.gz" -C src
|
||||||
patch -p1 < patch.diff
|
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() {
|
package() {
|
||||||
mkdir -p ${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/*.c "$pkgdir/usr/src/${_pkgbase}-${pkgver}/"
|
||||||
install -Dm644 ${srcdir}/src/*.h ${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/Makefile "$pkgdir/usr/src/${_pkgbase}-${pkgver}/"
|
||||||
install -Dm644 ${srcdir}/src/dkms.conf ${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}/
|
install -Dm644 "$srcdir"/src/motorcomm "$pkgdir/usr/src/${_pkgbase}-${pkgver}/"
|
||||||
}
|
}
|
||||||
@@ -37,3 +37,59 @@ index 539b507..2435f0c 100644
|
|||||||
#define FXGMAX_ASPM_WAR_EN
|
#define FXGMAX_ASPM_WAR_EN
|
||||||
/* Descriptor related parameters */
|
/* Descriptor related parameters */
|
||||||
#if FXGMAC_TX_HANG_TIMER_ENABLED
|
#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
|
||||||
Executable
+40
@@ -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'
|
||||||
Reference in new issue
Block a user