Author: kib
Date: Wed Jan 13 12:01:28 2016
New Revision: 293825
URL: https://svnweb.freebsd.org/changeset/base/293825

Log:
  Switch legacy pty clone handler to use make_dev_s(9).  Add
  MAKEDEV_CHECKNAME flag to the call, this is required to not panic on
  race between the clone and destructing the closed master.
  
  Reported by and discussed with:       bde
  Tested by:    pho (as part of the larger patch)
  Sponsored by: The FreeBSD Foundation
  MFC after:    3 weeks

Modified:
  head/sys/dev/pty/pty.c

Modified: head/sys/dev/pty/pty.c
==============================================================================
--- head/sys/dev/pty/pty.c      Wed Jan 13 09:26:44 2016        (r293824)
+++ head/sys/dev/pty/pty.c      Wed Jan 13 12:01:28 2016        (r293825)
@@ -97,6 +97,8 @@ static void
 pty_clone(void *arg, struct ucred *cr, char *name, int namelen,
     struct cdev **dev)
 {
+       struct make_dev_args mda;
+       int error;
 
        /* Cloning is already satisfied. */
        if (*dev != NULL)
@@ -117,8 +119,17 @@ pty_clone(void *arg, struct ucred *cr, c
                return;
 
        /* Create the controller device node. */
-       *dev = make_dev_credf(MAKEDEV_REF, &ptydev_cdevsw, 0,
-           NULL, UID_ROOT, GID_WHEEL, 0666, "%s", name);
+       make_dev_args_init(&mda);
+       mda.mda_flags =  MAKEDEV_CHECKNAME | MAKEDEV_REF;
+       mda.mda_devsw = &ptydev_cdevsw;
+       mda.mda_uid = UID_ROOT;
+       mda.mda_gid = GID_WHEEL;
+       mda.mda_mode = 0666;
+       error = make_dev_s(&mda, dev, "%s", name);
+       if (error != 0) {
+               printf("pty_clone: failed to create %s: %d\n", name, error);
+               *dev = NULL;
+       }
 }
 
 static int
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to