summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2005-03-31 12:19:44 +0000
committerphk <phk@FreeBSD.org>2005-03-31 12:19:44 +0000
commit7af1e31761f34e698cdf576e46c042b327f5a612 (patch)
tree3f79498c2fd283a3ff468ae4f9116e9f395f4fa7 /sys/kern
parentbf21be6c028410767b09b4755acb72b254e317d8 (diff)
downloadFreeBSD-src-7af1e31761f34e698cdf576e46c042b327f5a612.zip
FreeBSD-src-7af1e31761f34e698cdf576e46c042b327f5a612.tar.gz
Explicitly hold a reference to the cdev we have just cloned. This
closes the race where the cdev was reclaimed before it ever made it back to devfs lookup.
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/tty_pty.c1
-rw-r--r--sys/kern/tty_tty.c1
2 files changed, 2 insertions, 0 deletions
diff --git a/sys/kern/tty_pty.c b/sys/kern/tty_pty.c
index 21d47e2..3a53294 100644
--- a/sys/kern/tty_pty.c
+++ b/sys/kern/tty_pty.c
@@ -710,6 +710,7 @@ pty_clone(void *arg, char *name, int namelen, struct cdev **dev)
return;
*dev = make_dev(&ptc_cdevsw, u,
UID_ROOT, GID_WHEEL, 0666, "pty%c%r", names[u / 32], u % 32);
+ dev_ref(*dev);
(*dev)->si_flags |= SI_CHEAPCLONE;
return;
}
diff --git a/sys/kern/tty_tty.c b/sys/kern/tty_tty.c
index c813211..8951e99 100644
--- a/sys/kern/tty_tty.c
+++ b/sys/kern/tty_tty.c
@@ -65,6 +65,7 @@ ctty_clone(void *arg, char *name, int namelen, struct cdev **dev)
*dev = ctty;
else
*dev = curthread->td_proc->p_session->s_ttyvp->v_rdev;
+ dev_ref(*dev);
}
static void
OpenPOWER on IntegriCloud