aboutsummaryrefslogtreecommitdiff
path: root/networking/ifplugd.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2016-08-16 20:39:52 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2016-08-16 20:39:52 +0200
commitb11be131b73fd47e12b1a9f1c52ac0a1ed222aee (patch)
tree54f66073eba3ce1bd4e9d20d3e4fbc1fe1bc7248 /networking/ifplugd.c
parent110c6bb413ff7363e9b453edef8ae11cf7b64404 (diff)
downloadbusybox-b11be131b73fd47e12b1a9f1c52ac0a1ed222aee.tar.gz
ifplugd: if SIOCSIFFLAGS fails with ENODEV, don't die
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@googlemail.com>
Diffstat (limited to 'networking/ifplugd.c')
-rw-r--r--networking/ifplugd.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/networking/ifplugd.c b/networking/ifplugd.c
index 28c49e218..029cba147 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 */