]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Nest: Fix crash in route reload when some channels are not up.
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Tue, 13 Aug 2019 16:57:40 +0000 (18:57 +0200)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Wed, 14 Aug 2019 04:02:33 +0000 (06:02 +0200)
Only channels that are up can be reloaded.

nest/proto.c

index 54955bdd9b0c8f3618fcac006580a91b79f23a47..6beca56d87eaefb85a037eac6d5aca34c8133f5a 100644 (file)
@@ -1952,7 +1952,7 @@ proto_cmd_reload(struct proto *p, uintptr_t dir, int cnt UNUSED)
   /* All channels must support reload */
   if (dir != CMD_RELOAD_OUT)
     WALK_LIST(c, p->channels)
-      if (!channel_reloadable(c))
+      if ((c->channel_state == CS_UP) && !channel_reloadable(c))
       {
        cli_msg(-8006, "%s: reload failed", p->name);
        return;
@@ -1963,12 +1963,14 @@ proto_cmd_reload(struct proto *p, uintptr_t dir, int cnt UNUSED)
   /* re-importing routes */
   if (dir != CMD_RELOAD_OUT)
     WALK_LIST(c, p->channels)
-      channel_request_reload(c);
+      if (c->channel_state == CS_UP)
+       channel_request_reload(c);
 
   /* re-exporting routes */
   if (dir != CMD_RELOAD_IN)
     WALK_LIST(c, p->channels)
-      channel_request_feeding(c);
+      if (c->channel_state == CS_UP)
+       channel_request_feeding(c);
 
   cli_msg(-15, "%s: reloading", p->name);
 }