From 6ca03f2dd82ee2a09f257fad7c2bf6898310c438 Mon Sep 17 00:00:00 2001 From: Frank Bergmann Date: Fri, 13 Mar 2015 10:05:08 +0100 Subject: [PATCH] ifupdown: correct ifstate update during 'ifup -a'. Closes 6212 When 'if -a' runs into an failure on an interface all further interfaces won't be correctly updated in ifstate. This patch inserts a new variable that only tracks the current interfaces failure so that the write to ifstate can rely on this and not the one for the functions return value. Fixes https://bugs.busybox.net/show_bug.cgi?id=6212 Signed-off-by: Frank Bergmann Signed-off-by: Denys Vlasenko --- networking/ifupdown.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/networking/ifupdown.c b/networking/ifupdown.c index daabeec0c..9f2500331 100644 --- a/networking/ifupdown.c +++ b/networking/ifupdown.c @@ -1239,6 +1239,7 @@ int ifupdown_main(int argc UNUSED_PARAM, char **argv) char *pch; bool okay = 0; int cmds_ret; + bool curr_failure = 0; iface = xstrdup(target_list->data); target_list = target_list->link; @@ -1306,9 +1307,9 @@ int ifupdown_main(int argc UNUSED_PARAM, char **argv) if (cmds_ret == -1) { bb_error_msg("don't seem to have all the variables for %s/%s", liface, currif->address_family->name); - any_failures = 1; + any_failures = curr_failure = 1; } else if (cmds_ret == 0) { - any_failures = 1; + any_failures = curr_failure = 1; } currif->iface = oldiface; @@ -1329,7 +1330,7 @@ int ifupdown_main(int argc UNUSED_PARAM, char **argv) llist_t *state_list = read_iface_state(); llist_t *iface_state = find_iface_state(state_list, iface); - if (cmds == iface_up && !any_failures) { + if (cmds == iface_up && !curr_failure) { char *newiface = xasprintf("%s=%s", iface, liface); if (!iface_state) { llist_add_to_end(&state_list, newiface);