Module Name:    src
Committed By:   snj
Date:           Mon Nov  6 10:29:06 UTC 2017

Modified Files:
        src/sys/arch/sparc64/dev [netbsd-8]: sab.c
        src/sys/dev/ic [netbsd-8]: com.c z8530tty.c
        src/sys/dev/sun [netbsd-8]: sunkbd.c sunms.c
        src/sys/sys [netbsd-8]: tty.h

Log Message:
Pull up following revision(s) (requested by martin in ticket #338):
        sys/arch/sparc64/dev/sab.c: revision 1.55
        sys/dev/ic/com.c: revision 1.345
        sys/dev/ic/z8530tty.c: revision 1.132
        sys/dev/sun/sunkbd.c: revision 1.30
        sys/dev/sun/sunms.c: revision 1.33
        sys/sys/tty.h: revision 1.94
As discussed on tech-kern: define a new tty internal state flag: TS_KERN_ONLY
Implement it in a few tty drivers. If this flag is set, the underlying
hardware is used by another driver and userland has no right to open
it. A few uses will appear soon in sys/dev/sun/sun{kbd,ms}.c.
--
PR port-sparc64/52622: mark the parent device as TS_KERN_ONLY,
so userland will not touch it (and change serial params w/o our
control).


To generate a diff of this commit:
cvs rdiff -u -r1.54 -r1.54.12.1 src/sys/arch/sparc64/dev/sab.c
cvs rdiff -u -r1.339 -r1.339.10.1 src/sys/dev/ic/com.c
cvs rdiff -u -r1.131 -r1.131.12.1 src/sys/dev/ic/z8530tty.c
cvs rdiff -u -r1.29 -r1.29.22.1 src/sys/dev/sun/sunkbd.c
cvs rdiff -u -r1.32 -r1.32.22.1 src/sys/dev/sun/sunms.c
cvs rdiff -u -r1.93 -r1.93.12.1 src/sys/sys/tty.h

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

Modified files:

Index: src/sys/arch/sparc64/dev/sab.c
diff -u src/sys/arch/sparc64/dev/sab.c:1.54 src/sys/arch/sparc64/dev/sab.c:1.54.12.1
--- src/sys/arch/sparc64/dev/sab.c:1.54	Sat Nov 15 19:20:02 2014
+++ src/sys/arch/sparc64/dev/sab.c	Mon Nov  6 10:29:06 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: sab.c,v 1.54 2014/11/15 19:20:02 christos Exp $	*/
+/*	$NetBSD: sab.c,v 1.54.12.1 2017/11/06 10:29:06 snj Exp $	*/
 /*	$OpenBSD: sab.c,v 1.7 2002/04/08 17:49:42 jason Exp $	*/
 
 /*
@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sab.c,v 1.54 2014/11/15 19:20:02 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sab.c,v 1.54.12.1 2017/11/06 10:29:06 snj Exp $");
 
 #include "opt_kgdb.h"
 #include <sys/types.h>
@@ -681,6 +681,13 @@ sabopen(dev_t dev, int flags, int mode, 
 	tp = sc->sc_tty;
 	tp->t_dev = dev;
 
+	/*
+	 * If the device is exclusively for kernel use, deny userland
+	 * open.
+	 */
+	if (ISSET(tp->t_state, TS_KERN_ONLY))
+		return (EBUSY);
+
 	if (kauth_authorize_device_tty(l->l_cred, KAUTH_DEVICE_TTY_OPEN, tp))
 		return (EBUSY);
 

Index: src/sys/dev/ic/com.c
diff -u src/sys/dev/ic/com.c:1.339 src/sys/dev/ic/com.c:1.339.10.1
--- src/sys/dev/ic/com.c:1.339	Fri May 27 20:01:49 2016
+++ src/sys/dev/ic/com.c	Mon Nov  6 10:29:06 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: com.c,v 1.339 2016/05/27 20:01:49 bouyer Exp $ */
+/* $NetBSD: com.c,v 1.339.10.1 2017/11/06 10:29:06 snj Exp $ */
 
 /*-
  * Copyright (c) 1998, 1999, 2004, 2008 The NetBSD Foundation, Inc.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: com.c,v 1.339 2016/05/27 20:01:49 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: com.c,v 1.339.10.1 2017/11/06 10:29:06 snj Exp $");
 
 #include "opt_com.h"
 #include "opt_ddb.h"
@@ -871,6 +871,13 @@ comopen(dev_t dev, int flag, int mode, s
 
 	tp = sc->sc_tty;
 
+	/*
+	 * If the device is exclusively for kernel use, deny userland
+	 * open.
+	 */
+	if (ISSET(tp->t_state, TS_KERN_ONLY))
+		return (EBUSY);
+
 	if (kauth_authorize_device_tty(l->l_cred, KAUTH_DEVICE_TTY_OPEN, tp))
 		return (EBUSY);
 
@@ -1009,6 +1016,12 @@ comclose(dev_t dev, int flag, int mode, 
 	/* XXX This is for cons.c. */
 	if (!ISSET(tp->t_state, TS_ISOPEN))
 		return (0);
+	/*
+	 * If the device is exclusively for kernel use, deny userland
+	 * close.
+	 */
+	if (ISSET(tp->t_state, TS_KERN_ONLY))
+		return (0);
 
 	(*tp->t_linesw->l_close)(tp, flag);
 	ttyclose(tp);

Index: src/sys/dev/ic/z8530tty.c
diff -u src/sys/dev/ic/z8530tty.c:1.131 src/sys/dev/ic/z8530tty.c:1.131.12.1
--- src/sys/dev/ic/z8530tty.c:1.131	Sat Nov 15 19:18:18 2014
+++ src/sys/dev/ic/z8530tty.c	Mon Nov  6 10:29:06 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: z8530tty.c,v 1.131 2014/11/15 19:18:18 christos Exp $	*/
+/*	$NetBSD: z8530tty.c,v 1.131.12.1 2017/11/06 10:29:06 snj Exp $	*/
 
 /*-
  * Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 1999
@@ -137,7 +137,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: z8530tty.c,v 1.131 2014/11/15 19:18:18 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: z8530tty.c,v 1.131.12.1 2017/11/06 10:29:06 snj Exp $");
 
 #include "opt_kgdb.h"
 #include "opt_ntp.h"
@@ -560,6 +560,13 @@ zsopen(dev_t dev, int flags, int mode, s
 	if (tp == NULL)
 		return (EBUSY);
 
+	/*
+	 * If the device is exclusively for kernel use, deny userland
+	 * open.
+	 */
+	if (ISSET(tp->t_state, TS_KERN_ONLY))
+		return (EBUSY);
+
 	if (kauth_authorize_device_tty(l->l_cred, KAUTH_DEVICE_TTY_OPEN, tp))
 		return (EBUSY);
 

Index: src/sys/dev/sun/sunkbd.c
diff -u src/sys/dev/sun/sunkbd.c:1.29 src/sys/dev/sun/sunkbd.c:1.29.22.1
--- src/sys/dev/sun/sunkbd.c:1.29	Sun Sep 15 14:10:04 2013
+++ src/sys/dev/sun/sunkbd.c	Mon Nov  6 10:29:06 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: sunkbd.c,v 1.29 2013/09/15 14:10:04 martin Exp $	*/
+/*	$NetBSD: sunkbd.c,v 1.29.22.1 2017/11/06 10:29:06 snj Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -51,7 +51,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sunkbd.c,v 1.29 2013/09/15 14:10:04 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sunkbd.c,v 1.29.22.1 2017/11/06 10:29:06 snj Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -145,6 +145,7 @@ sunkbd_attach(device_t parent, device_t 
 	KASSERT(tp->t_linesw == &sunkbd_disc);
 	tp->t_oflag &= ~OPOST;
 	tp->t_dev = args->kmta_dev;
+	SET(tp->t_state, TS_KERN_ONLY);
 
 	/* link the structures together. */
 	k->k_priv = tp;
@@ -218,6 +219,7 @@ sunkbdiopen(device_t dev, int flags)
 	int error;
 
 	/* Open the lower device */
+	CLR(tp->t_state, TS_KERN_ONLY);
 	if ((error = cdev_open(tp->t_dev, O_NONBLOCK|flags,
 				     0/* ignored? */, l)) != 0)
 		return (error);
@@ -228,6 +230,7 @@ sunkbdiopen(device_t dev, int flags)
 	t.c_ospeed = sunkbd_bps;
 	t.c_cflag =  CLOCAL|CS8;
 	(*tp->t_param)(tp, &t);
+	SET(tp->t_state, TS_KERN_ONLY);
 
 	return (0);
 }

Index: src/sys/dev/sun/sunms.c
diff -u src/sys/dev/sun/sunms.c:1.32 src/sys/dev/sun/sunms.c:1.32.22.1
--- src/sys/dev/sun/sunms.c:1.32	Sun Sep 15 14:13:19 2013
+++ src/sys/dev/sun/sunms.c	Mon Nov  6 10:29:06 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: sunms.c,v 1.32 2013/09/15 14:13:19 martin Exp $	*/
+/*	$NetBSD: sunms.c,v 1.32.22.1 2017/11/06 10:29:06 snj Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -52,7 +52,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sunms.c,v 1.32 2013/09/15 14:13:19 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sunms.c,v 1.32.22.1 2017/11/06 10:29:06 snj Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -162,6 +162,7 @@ sunms_attach(device_t parent, device_t s
 	tp->t_linesw = ttyldisc_lookup(sunms_disc.l_name);
 	KASSERT(tp->t_linesw == &sunms_disc);
 	tp->t_oflag &= ~OPOST;
+	SET(tp->t_state, TS_KERN_ONLY);
 
 	/* Initialize translator. */
 	ms->ms_byteno = -1;
@@ -192,6 +193,7 @@ sunmsiopen(device_t dev, int flags)
 	int error;
 
 	/* Open the lower device */
+	CLR(tp->t_state, TS_KERN_ONLY);
 	if ((error = cdev_open(tp->t_dev, O_NONBLOCK|flags,
 				     0/* ignored? */, l)) != 0)
 		return (error);
@@ -202,6 +204,7 @@ sunmsiopen(device_t dev, int flags)
 	t.c_ospeed = sunms_bps;
 	t.c_cflag =  CLOCAL|CS8;
 	(*tp->t_param)(tp, &t);
+	SET(tp->t_state, TS_KERN_ONLY);
 
 	return (0);
 }

Index: src/sys/sys/tty.h
diff -u src/sys/sys/tty.h:1.93 src/sys/sys/tty.h:1.93.12.1
--- src/sys/sys/tty.h:1.93	Sat Nov 15 19:17:05 2014
+++ src/sys/sys/tty.h	Mon Nov  6 10:29:06 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: tty.h,v 1.93 2014/11/15 19:17:05 christos Exp $	*/
+/*	$NetBSD: tty.h,v 1.93.12.1 2017/11/06 10:29:06 snj Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -203,6 +203,10 @@ struct tty {
 #define	TS_TYPEN	0x08000		/* Retyping suspended input (PENDIN). */
 #define	TS_LOCAL	(TS_BKSL | TS_CNTTB | TS_ERASE | TS_LNCH | TS_TYPEN)
 
+/* for special line disciplines, like dev/sun/sunkbd.c */
+#define	TS_KERN_ONLY	0x10000		/* Device is accessible by kernel
+					 * only, deny all userland access */
+
 /* Character type information. */
 #define	ORDINARY	0
 #define	CONTROL		1

Reply via email to