svn commit: r184866 - head/sys/kern

Ed Schouten ed at FreeBSD.org
Wed Nov 12 01:04:44 PST 2008


Author: ed
Date: Wed Nov 12 09:04:44 2008
New Revision: 184866
URL: http://svn.freebsd.org/changeset/base/184866

Log:
  Don't forget to relock the TTY after uiomove() returns an error.
  
  Peter Holm just discovered this funny bug inside the TTY code: if
  uiomove() in ttydisc_write() returns an error, we forget to relock the
  TTY before jumping out of ttydisc_write(). Fix it by placing
  tty_unlock() and tty_lock() around uiomove().
  
  Submitted by:	pho

Modified:
  head/sys/kern/tty_ttydisc.c

Modified: head/sys/kern/tty_ttydisc.c
==============================================================================
--- head/sys/kern/tty_ttydisc.c	Wed Nov 12 08:29:26 2008	(r184865)
+++ head/sys/kern/tty_ttydisc.c	Wed Nov 12 09:04:44 2008	(r184866)
@@ -460,17 +460,15 @@ ttydisc_write(struct tty *tp, struct uio
 		MPASS(oblen == 0);
 
 		/* Step 1: read data. */
-
-		tty_unlock(tp);
-
 		obstart = ob;
 		nlen = MIN(uio->uio_resid, sizeof ob);
+		tty_unlock(tp);
 		error = uiomove(ob, nlen, uio);
+		tty_lock(tp);
 		if (error != 0)
 			break;
 		oblen = nlen;
 
-		tty_lock(tp);
 		if (tty_gone(tp)) {
 			error = ENXIO;
 			break;


More information about the svn-src-head mailing list