Print this page
14025 ipnet sniffing leaks promisc mode

@@ -24,11 +24,11 @@
  * Use is subject to license terms.
  * Copyright (c) 2016 by Delphix. All rights reserved.
  */
 
 /*
- * Copyright (c) 2016, Joyent, Inc. All rights reserved.
+ * Copyright 2021 Joyent, Inc.
  */
 
 /*
  * The ipnet device defined here provides access to packets at the IP layer. To
  * provide access to packets at this layer it registers a callback function in

@@ -2243,10 +2243,11 @@
 
 regfail:
         cmn_err(CE_WARN, "net_hook_register failed: %d", error);
         strfree(ipnet->ipnet_hook->h_name);
         hook_free(ipnet->ipnet_hook);
+        ipnet_leave_allmulti(ifp, ns->netstack_ipnet);
         netstack_rele(ns);
         return (error);
 }
 
 void

@@ -2268,10 +2269,12 @@
 
         strfree(hook->h_name);
 
         hook_free(hook);
 
+        ipnet_leave_allmulti(ipnet->ipnet_if, ipnet->ipnet_ns->netstack_ipnet);
+
         kmem_free(ipnet, sizeof (*ipnet));
 }
 
 /*
  * arg here comes from the ipnet_t allocated in ipnet_promisc_add.