]> git.proxmox.com Git - mirror_frr.git/commitdiff
Merge pull request #1841 from qlyoung/fix-ospf-shutdown-thread-heap-uaf
authorOlivier Dugeon <olivier.dugeon@orange.com>
Wed, 7 Mar 2018 09:41:53 +0000 (10:41 +0100)
committerGitHub <noreply@github.com>
Wed, 7 Mar 2018 09:41:53 +0000 (10:41 +0100)
ospfd: cancel SR thread at shutdown

bgpd/bgpd.c
lib/netns_linux.c

index c06339aad9e4616ee477607e07f8902db553f83c..e8ea2b717f4978171f22c296efb3396b76c283a0 100644 (file)
@@ -108,7 +108,8 @@ static int bgp_check_main_socket(bool create, struct bgp *bgp)
        struct listnode *bgpnode, *nbgpnode;
        struct bgp *bgp_temp;
 
-       if (bgp->inst_type == BGP_INSTANCE_TYPE_VRF)
+       if (bgp->inst_type == BGP_INSTANCE_TYPE_VRF &&
+           vrf_is_mapped_on_netns(bgp->vrf_id))
                return 0;
        if (create == true) {
                if (bgp_server_main_created)
index 0e955bade927137edafbfda3ee2c31e3b9d178d6..a92431d1ae2c2e54551148ac96d00ae7cc192882 100644 (file)
@@ -43,6 +43,9 @@
 DEFINE_MTYPE_STATIC(LIB, NS, "NetNS Context")
 DEFINE_MTYPE_STATIC(LIB, NS_NAME, "NetNS Name")
 
+/* default NS ID value used when VRF backend is not NETNS */
+#define NS_DEFAULT_INTERNAL 0
+
 static inline int ns_compare(const struct ns *ns, const struct ns *ns2);
 static struct ns *ns_lookup_name_internal(const char *name);
 
@@ -414,8 +417,10 @@ void ns_init(void)
 #ifdef HAVE_NETNS
        if (have_netns_enabled < 0)
                ns_default_ns_fd = open(NS_DEFAULT_NAME, O_RDONLY);
-       else
+       else {
                ns_default_ns_fd = -1;
+               default_ns = NULL;
+       }
 #else
        ns_default_ns_fd = -1;
        default_ns = NULL;
@@ -534,6 +539,6 @@ ns_id_t ns_get_default_id(void)
 {
        if (default_ns)
                return default_ns->ns_id;
-       return NS_UNKNOWN;
+       return NS_DEFAULT_INTERNAL;
 }