From: Denys Vlasenko Date: Tue, 16 Aug 2016 18:39:52 +0000 (+0200) Subject: ifplugd: if SIOCSIFFLAGS fails with ENODEV, don't die X-Git-Tag: 1_26_0~299 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=b11be131b73fd47e12b1a9f1c52ac0a1ed222aee;p=oweals%2Fbusybox.git 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 --- 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 */