Author: jamie
Date: Thu Jun  9 20:43:14 2016
New Revision: 301760
URL: https://svnweb.freebsd.org/changeset/base/301760

Log:
  Re-order some jail parameter reading to prevent a vnode leak.

Modified:
  head/sys/kern/kern_jail.c

Modified: head/sys/kern/kern_jail.c
==============================================================================
--- head/sys/kern/kern_jail.c   Thu Jun  9 20:40:12 2016        (r301759)
+++ head/sys/kern/kern_jail.c   Thu Jun  9 20:43:14 2016        (r301760)
@@ -920,6 +920,46 @@ kern_jail_set(struct thread *td, struct 
        }
 #endif
 
+       error = vfs_getopt(opts, "osrelease", (void **)&osrelstr, &len);
+       if (error == ENOENT)
+               osrelstr = NULL;
+       else if (error != 0)
+               goto done_free;
+       else {
+               if (flags & JAIL_UPDATE) {
+                       error = EINVAL;
+                       vfs_opterror(opts,
+                           "osrelease cannot be changed after creation");
+                       goto done_errmsg;
+               }
+               if (len == 0 || len >= OSRELEASELEN) {
+                       error = EINVAL;
+                       vfs_opterror(opts,
+                           "osrelease string must be 1-%d bytes long",
+                           OSRELEASELEN - 1);
+                       goto done_errmsg;
+               }
+       }
+
+       error = vfs_copyopt(opts, "osreldate", &osreldt, sizeof(osreldt));
+       if (error == ENOENT)
+               osreldt = 0;
+       else if (error != 0)
+               goto done_free;
+       else {
+               if (flags & JAIL_UPDATE) {
+                       error = EINVAL;
+                       vfs_opterror(opts,
+                           "osreldate cannot be changed after creation");
+                       goto done_errmsg;
+               }
+               if (osreldt == 0) {
+                       error = EINVAL;
+                       vfs_opterror(opts, "osreldate cannot be 0");
+                       goto done_errmsg;
+               }
+       }
+
        fullpath_disabled = 0;
        root = NULL;
        error = vfs_getopt(opts, "path", (void **)&path, &len);
@@ -975,46 +1015,6 @@ kern_jail_set(struct thread *td, struct 
                }
        }
 
-       error = vfs_getopt(opts, "osrelease", (void **)&osrelstr, &len);
-       if (error == ENOENT)
-               osrelstr = NULL;
-       else if (error != 0)
-               goto done_free;
-       else {
-               if (flags & JAIL_UPDATE) {
-                       error = EINVAL;
-                       vfs_opterror(opts,
-                           "osrelease cannot be changed after creation");
-                       goto done_errmsg;
-               }
-               if (len == 0 || len >= OSRELEASELEN) {
-                       error = EINVAL;
-                       vfs_opterror(opts,
-                           "osrelease string must be 1-%d bytes long",
-                           OSRELEASELEN - 1);
-                       goto done_errmsg;
-               }
-       }
-
-       error = vfs_copyopt(opts, "osreldate", &osreldt, sizeof(osreldt));
-       if (error == ENOENT)
-               osreldt = 0;
-       else if (error != 0)
-               goto done_free;
-       else {
-               if (flags & JAIL_UPDATE) {
-                       error = EINVAL;
-                       vfs_opterror(opts,
-                           "osreldate cannot be changed after creation");
-                       goto done_errmsg;
-               }
-               if (osreldt == 0) {
-                       error = EINVAL;
-                       vfs_opterror(opts, "osreldate cannot be 0");
-                       goto done_errmsg;
-               }
-       }
-
        /*
         * Find the specified jail, or at least its parent.
         * This abuses the file error codes ENOENT and EEXIST.
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to