lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230313132834.946360-3-razor@blackwall.org>
Date:   Mon, 13 Mar 2023 15:28:34 +0200
From:   Nikolay Aleksandrov <razor@...ckwall.org>
To:     netdev@...r.kernel.org
Cc:     syoshida@...hat.com, j.vosburgh@...il.com, andy@...yhouse.net,
        kuba@...nel.org, davem@...emloft.net, pabeni@...hat.com,
        edumazet@...gle.com,
        syzbot+9dfc3f3348729cc82277@...kaller.appspotmail.com,
        Nikolay Aleksandrov <razor@...ckwall.org>
Subject: [PATCH net 2/2] selftests: rtnetlink: add a bond test trying to enslave non-eth dev

Add a new selftest for the recent bonding bug hit by syzbot[1] which
causes a warning and results in wrong device flags (IFF_SLAVE missing).
The test adds two bond devices and a nlmon device, enslaves one of the
bond devices to the other and then tries to enslave the nlmon device to
the enslaved bond testing the bond_enslave() error path when trying to
enslave a non-eth device. It checks that both MASTER and SLAVE flags are
properly restored.

If the flags are properly restored we get:
PASS: enslaved bond device has flags restored properly

[1] https://syzkaller.appspot.com/bug?id=391c7b1f6522182899efba27d891f1743e8eb3ef

Cc: Shigeru Yoshida <syoshida@...hat.com>
Signed-off-by: Nikolay Aleksandrov <razor@...ckwall.org>
---
 tools/testing/selftests/net/rtnetlink.sh | 36 ++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/tools/testing/selftests/net/rtnetlink.sh b/tools/testing/selftests/net/rtnetlink.sh
index 275491be3da2..02964b2afd8d 100755
--- a/tools/testing/selftests/net/rtnetlink.sh
+++ b/tools/testing/selftests/net/rtnetlink.sh
@@ -1225,6 +1225,40 @@ kci_test_bridge_parent_id()
 	echo "PASS: bridge_parent_id"
 }
 
+kci_test_enslaved_bond_non_eth()
+{
+	local ret=0
+
+	ip link add name test-nlmon0 type nlmon
+	ip link add name test-bond0 type bond
+	ip link add name test-bond1 type bond
+	ip link set dev test-bond0 master test-bond1
+	ip link set dev test-nlmon0 master test-bond0 1>/dev/null 2>/dev/null
+
+	ip -d l sh dev test-bond0 | grep -q "SLAVE"
+	if [ $? -ne 0 ]; then
+		echo "FAIL: IFF_SLAVE flag is missing from the bond device"
+		check_err 1
+	fi
+	ip -d l sh dev test-bond0 | grep -q "MASTER"
+	if [ $? -ne 0 ]; then
+		echo "FAIL: IFF_MASTER flag is missing from the bond device"
+		check_err 1
+	fi
+
+	# on error we return before cleaning up as that may hang the system
+	if [ $ret -ne 0 ]; then
+		return 1
+	fi
+
+	# clean up any leftovers
+	ip link del dev test-bond0
+	ip link del dev test-bond1
+	ip link del dev test-nlmon0
+
+	echo "PASS: enslaved bond device has flags restored properly"
+}
+
 kci_test_rtnl()
 {
 	local ret=0
@@ -1276,6 +1310,8 @@ kci_test_rtnl()
 	check_err $?
 	kci_test_bridge_parent_id
 	check_err $?
+	kci_test_enslaved_bond_non_eth
+	check_err $?
 
 	kci_del_dummy
 	return $ret
-- 
2.39.2

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ