[git commit] ifplugd: if SIOCSIFFLAGS fails with ENODEV, don't die

Denys Vlasenko vda.linux at googlemail.com
Tue Aug 16 18:39:52 UTC 2016


commit: https://git.busybox.net/busybox/commit/?id=b11be131b73fd47e12b1a9f1c52ac0a1ed222aee
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Some user managed to hit a race where iface is gone between SIOCGIFFLAGS
and SIOCSIFFLAGS (!). If SIOCSIFFLAGS fails, treat it the same as failed
SIOCGIFFLAGS

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 networking/ifplugd.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/networking/ifplugd.c b/networking/ifplugd.c
index 28c49e2..029cba1 100644
--- a/networking/ifplugd.c
+++ b/networking/ifplugd.c
@@ -358,8 +358,12 @@ static void up_iface(void)
 		ifrequest.ifr_flags |= IFF_UP;
 		/* Let user know we mess up with interface */
 		bb_error_msg("upping interface");
-		if (network_ioctl(SIOCSIFFLAGS, &ifrequest, "setting interface flags") < 0)
-			xfunc_die();
+		if (network_ioctl(SIOCSIFFLAGS, &ifrequest, "setting interface flags") < 0) {
+			if (errno != ENODEV)
+				xfunc_die();
+			G.iface_exists = 0;
+			return;
+		}
 	}
 
 #if 0 /* why do we mess with IP addr? It's not our business */


More information about the busybox-cvs mailing list