From: Donald Sharp Date: Fri, 29 Jun 2018 11:33:39 +0000 (-0400) Subject: zebra: Listen to error codes from netlink_socket X-Git-Tag: frr-6.1-dev~171^2~1 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=19d5a4fead0a0b9b9aa30b7e1476edd9808f0613;p=mirror%2Ffrr.git zebra: Listen to error codes from netlink_socket When creating a netlink_socket, listen to error codes and abandon ship if it crashes and burns. Signed-off-by: Donald Sharp --- diff --git a/zebra/kernel_netlink.c b/zebra/kernel_netlink.c index 062fa9299c..73f64de7f3 100644 --- a/zebra/kernel_netlink.c +++ b/zebra/kernel_netlink.c @@ -942,12 +942,20 @@ void kernel_init(struct zebra_ns *zns) snprintf(zns->netlink.name, sizeof(zns->netlink.name), "netlink-listen (NS %u)", zns->ns_id); zns->netlink.sock = -1; - netlink_socket(&zns->netlink, groups, zns->ns_id); + if (netlink_socket(&zns->netlink, groups, zns->ns_id) < 0) { + zlog_err("Failure to create %s socket", + zns->netlink.name); + exit(-1); + } snprintf(zns->netlink_cmd.name, sizeof(zns->netlink_cmd.name), "netlink-cmd (NS %u)", zns->ns_id); zns->netlink_cmd.sock = -1; - netlink_socket(&zns->netlink_cmd, 0, zns->ns_id); + if (netlink_socket(&zns->netlink_cmd, 0, zns->ns_id) < 0) { + zlog_err("Failure to create %s socket", + zns->netlink_cmd.name); + exit(-1); + } /* * SOL_NETLINK is not available on all platforms yet @@ -969,23 +977,20 @@ void kernel_init(struct zebra_ns *zns) #endif /* Register kernel socket. */ - if (zns->netlink.sock > 0) { - /* Only want non-blocking on the netlink event socket */ - if (fcntl(zns->netlink.sock, F_SETFL, O_NONBLOCK) < 0) - zlog_err("Can't set %s socket flags: %s", - zns->netlink.name, safe_strerror(errno)); - - /* Set receive buffer size if it's set from command line */ - if (nl_rcvbufsize) - netlink_recvbuf(&zns->netlink, nl_rcvbufsize); - - netlink_install_filter(zns->netlink.sock, - zns->netlink_cmd.snl.nl_pid); - zns->t_netlink = NULL; - - thread_add_read(zebrad.master, kernel_read, zns, - zns->netlink.sock, &zns->t_netlink); - } + if (fcntl(zns->netlink.sock, F_SETFL, O_NONBLOCK) < 0) + zlog_err("Can't set %s socket flags: %s", + zns->netlink.name, safe_strerror(errno)); + + /* Set receive buffer size if it's set from command line */ + if (nl_rcvbufsize) + netlink_recvbuf(&zns->netlink, nl_rcvbufsize); + + netlink_install_filter(zns->netlink.sock, + zns->netlink_cmd.snl.nl_pid); + zns->t_netlink = NULL; + + thread_add_read(zebrad.master, kernel_read, zns, + zns->netlink.sock, &zns->t_netlink); rt_netlink_init(); }