Skip to content

Commit

Permalink
isisd: fix crash when entering "no ip[v6] router isis" twice
Browse files Browse the repository at this point in the history
isisd CLI has some housekeeping code that removes the
"frr-isisd:isis" container from the interface configuration when
IS-IS is disabled for both IPv4 and IPv6 in the corresponding
interface.

The problem is that the code was checking the values of the
"ipv4-routing" and "ipv6-routing" leafs without checking if the
parent "frr-isisd:isis" container was present. So, entering "no
ip[v6] router isis" twice would cause isisd to crash since the
"frr-isisd:isis" container wouldn't be present the second time the
command is processed. Fix this.

isisd aborted: vtysh -c "configure terminal" -c "interface eth99" -c "no ip router isis WORD"
isisd aborted: vtysh -c "configure terminal" -c "interface eth99" -c "no ipv6 router isis"

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
  • Loading branch information
rwestphal committed Feb 21, 2019
1 parent 8ad0d0e commit 2b4905c
Showing 1 changed file with 12 additions and 11 deletions.
23 changes: 12 additions & 11 deletions isisd/isis_cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -279,25 +279,26 @@ DEFPY(no_ip_router_isis, no_ip_router_isis_cmd,
"IS-IS routing protocol\n"
"Routing process tag\n")
{
const struct lyd_node *dnode =
yang_dnode_get(running_config->dnode, VTY_CURR_XPATH);
const struct lyd_node *dnode;

/* if both ipv4 and ipv6 are off delete the interface isis container too
dnode = yang_dnode_get(vty->candidate_config->dnode,
"%s/frr-isisd:isis", VTY_CURR_XPATH);
if (!dnode)
return CMD_SUCCESS;

/*
* If both ipv4 and ipv6 are off delete the interface isis container.
*/
if (!strncmp(ip, "ipv6", strlen("ipv6"))) {
if (dnode
&& !yang_dnode_get_bool(dnode,
"./frr-isisd:isis/ipv4-routing"))
if (strmatch(ip, "ipv6")) {
if (!yang_dnode_get_bool(dnode, "./ipv4-routing"))
nb_cli_enqueue_change(vty, "./frr-isisd:isis",
NB_OP_DELETE, NULL);
else
nb_cli_enqueue_change(vty,
"./frr-isisd:isis/ipv6-routing",
NB_OP_MODIFY, "false");
} else { /* no ipv4 */
if (dnode
&& !yang_dnode_get_bool(dnode,
"./frr-isisd:isis/ipv6-routing"))
} else {
if (!yang_dnode_get_bool(dnode, "./ipv6-routing"))
nb_cli_enqueue_change(vty, "./frr-isisd:isis",
NB_OP_DELETE, NULL);
else
Expand Down

0 comments on commit 2b4905c

Please sign in to comment.