Module Name:    src
Committed By:   martin
Date:           Sat Apr  9 06:34:06 UTC 2011

Modified Files:
        src/sys/kern: tty.c tty_pty.c

Log Message:
In ttymalloc() explicitly initialize t_dev to NODEV.
In ptcwakeup() do not bother to wake up a client side if it has not been
opened yet.
The old code would spuriously wakeup the client minor(0) [i.e. ttyp0
typically] or crash the kernel if that wasn't open, see PR kern/40688.
(Old names used to match the PR and test case, adjust names for
/dev/ptm[x] resp. /dev/pts/* accordingly)


To generate a diff of this commit:
cvs rdiff -u -r1.242 -r1.243 src/sys/kern/tty.c
cvs rdiff -u -r1.124 -r1.125 src/sys/kern/tty_pty.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/tty.c
diff -u src/sys/kern/tty.c:1.242 src/sys/kern/tty.c:1.243
--- src/sys/kern/tty.c:1.242	Wed Feb  2 03:00:44 2011
+++ src/sys/kern/tty.c	Sat Apr  9 06:34:06 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: tty.c,v 1.242 2011/02/02 03:00:44 christos Exp $	*/
+/*	$NetBSD: tty.c,v 1.243 2011/04/09 06:34:06 martin Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -63,7 +63,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tty.c,v 1.242 2011/02/02 03:00:44 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tty.c,v 1.243 2011/04/09 06:34:06 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -2695,6 +2695,7 @@
 	cv_init(&tp->t_outcvf, "ttyoutf");
 	/* Set default line discipline. */
 	tp->t_linesw = ttyldisc_default();
+	tp->t_dev = NODEV;
 	selinit(&tp->t_rsel);
 	selinit(&tp->t_wsel);
 	for (i = 0; i < TTYSIG_COUNT; i++) 

Index: src/sys/kern/tty_pty.c
diff -u src/sys/kern/tty_pty.c:1.124 src/sys/kern/tty_pty.c:1.125
--- src/sys/kern/tty_pty.c:1.124	Tue Nov 16 23:58:11 2010
+++ src/sys/kern/tty_pty.c	Sat Apr  9 06:34:06 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: tty_pty.c,v 1.124 2010/11/16 23:58:11 dyoung Exp $	*/
+/*	$NetBSD: tty_pty.c,v 1.125 2011/04/09 06:34:06 martin Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tty_pty.c,v 1.124 2010/11/16 23:58:11 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tty_pty.c,v 1.125 2011/04/09 06:34:06 martin Exp $");
 
 #include "opt_ptm.h"
 
@@ -523,7 +523,11 @@
 void
 ptcwakeup(struct tty *tp, int flag)
 {
-	struct pt_softc *pti = pt_softc[minor(tp->t_dev)];
+	struct pt_softc *pti = NULL;
+
+	if (tp->t_dev == NODEV) return;
+
+	pti = pt_softc[minor(tp->t_dev)];
 
 	mutex_spin_enter(&tty_lock);
 	if (flag & FREAD) {

Reply via email to