From: Kaarle Ritvanen Date: Tue, 27 Mar 2018 22:00:03 +0000 (+0200) Subject: ifupdown: do not fail if interface disappears during ifdown X-Git-Tag: 1_29_0~186 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=123fdda0a4a838e61c6a7d15c69d3b438136aee0;p=oweals%2Fbusybox.git ifupdown: do not fail if interface disappears during ifdown Interface may not exist because it got deleted by an ifdown hook script earlier. This may happen when a virtual interface, such as VLAN, has multiple iface blocks defined. function old new delta static_down6 14 40 +26 static_down 54 70 +16 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 42/0) Total: 42 bytes Signed-off-by: Kaarle Ritvanen Signed-off-by: Denys Vlasenko --- diff --git a/networking/ifupdown.c b/networking/ifupdown.c index 534c9f0c7..5481134e5 100644 --- a/networking/ifupdown.c +++ b/networking/ifupdown.c @@ -138,6 +138,7 @@ //usage: "\n -v Print out what would happen before doing it" //usage: "\n -f Force deconfiguration" +#include #include "libbb.h" #include "common_bufsiz.h" /* After libbb.h, since it needs sys/types.h on some systems */ @@ -503,6 +504,8 @@ static int FAST_FUNC static_up6(struct interface_defn_t *ifd, execfn *exec) static int FAST_FUNC static_down6(struct interface_defn_t *ifd, execfn *exec) { + if (!if_nametoindex(ifd->iface)) + return 1; /* already gone */ # if ENABLE_FEATURE_IFUPDOWN_IP return execute("ip link set %iface% down", ifd, exec); # else @@ -598,6 +601,9 @@ static int FAST_FUNC static_up(struct interface_defn_t *ifd, execfn *exec) static int FAST_FUNC static_down(struct interface_defn_t *ifd, execfn *exec) { int result; + + if (!if_nametoindex(ifd->iface)) + return 2; /* already gone */ # if ENABLE_FEATURE_IFUPDOWN_IP /* Optional "label LBL" is necessary if interface is an alias (eth0:0), * otherwise "ip addr flush dev eth0:0" flushes all addresses on eth0.