From c01a009dc5b05abca78ea0fd5c232d6493b50bcc Mon Sep 17 00:00:00 2001 From: Poul-Henning Kamp Date: Mon, 28 May 2001 20:22:12 +0000 Subject: [PATCH] With the new kernel dev_t conversions done at release 4.X, it becomes possible to trap in ptsstop() in kern/tty_pty.c if the slave side has never been opened during the life of a kernel. What happens is that calls to ttyflush() done from ptyioctl() for the controlling side end up calling ptsstop() [via (*tp->t_stop)(tp, )] which evaluates the following: struct pt_ioctl *pti = tp->t_dev->si_drv1; In order for tp->t_dev to be set, the slave device must first be opened in ttyopen() [kern/tty.c]. It appears that the only problem is calls to (*tp->t_stop)(tp, ), so this could also happen with other ioctls initiated by the controlling side before the slave has been opened. PR: 27698 Submitted by: David Bein bein@netapp.com MFC after: 6 days --- sys/kern/tty_pty.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/kern/tty_pty.c b/sys/kern/tty_pty.c index d533070dd53..37a3126fbe1 100644 --- a/sys/kern/tty_pty.c +++ b/sys/kern/tty_pty.c @@ -156,6 +156,7 @@ ptyinit(dev_t devc) devs->si_drv1 = devc->si_drv1 = pt; devs->si_tty = devc->si_tty = &pt->pt_tty; + pt->pt_tty.t_dev = devs; ttyregister(&pt->pt_tty); return (devc); }