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>
This commit is contained in:
Denys Vlasenko 2016-08-16 20:39:52 +02:00
parent 110c6bb413
commit b11be131b7

View File

@ -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 */