Print this page
Plug sharefs zone-shutdown leaks
        
*** 23,32 ****
--- 23,33 ----
   * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
   */
  
  /*
   * Copyright 2018 Nexenta Systems, Inc.
+  * Copyright 2019 Joyent, Inc.
   */
  
  #include <sys/types.h>
  #include <sys/types32.h>
  #include <sys/param.h>
*** 307,316 ****
--- 308,338 ----
          sharetab_globals_t *sg = data;
  
          rw_destroy(&sg->sharefs_lock);
          rw_destroy(&sg->sharetab_lock);
  
+         /* ALL of the allocated things must be cleaned before we free sg. */
+         while (sg->sharefs_sharetab != NULL) {
+                 int i;
+                 sharetab_t *freeing = sg->sharefs_sharetab;
+ 
+                 sg->sharefs_sharetab = freeing->s_next;
+                 kmem_free(freeing->s_fstype, strlen(freeing->s_fstype) + 1);
+                 for (i = 0; i < PKP_HASH_SIZE; i++) {
+                         sharefs_hash_head_t *bucket;
+ 
+                         bucket = &(freeing->s_buckets[i]);
+                         while (bucket->ssh_sh != NULL) {
+                                 share_t *share = bucket->ssh_sh;
+ 
+                                 bucket->ssh_sh = share->sh_next;
+                                 sharefree(share, NULL);
+                         }
+                 }
+                 kmem_free(freeing, sizeof (*freeing));
+         }
+ 
          kmem_free(sg, sizeof (*sg));
  }
  
  void
  sharefs_sharetab_init(void)