tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: New line discipline flag to prevent userland open/close of the device
To give a better idea of what changes: here is a tested patch that solves
the original problem for me.
It is kinda ugly, but I don't see an easier solution.
Anyone?
Martin
Index: dev/ic/com.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/com.c,v
retrieving revision 1.343
diff -u -p -r1.343 com.c
--- dev/ic/com.c 28 Oct 2017 04:53:55 -0000 1.343
+++ dev/ic/com.c 29 Oct 2017 13:43:11 -0000
@@ -879,6 +879,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_NO_USER_OPEN))
+ return (EBUSY);
+
if (kauth_authorize_device_tty(l->l_cred, KAUTH_DEVICE_TTY_OPEN, tp))
return (EBUSY);
@@ -1017,6 +1024,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_NO_USER_OPEN))
+ return (0);
(*tp->t_linesw->l_close)(tp, flag);
ttyclose(tp);
Index: dev/sun/sunkbd.c
===================================================================
RCS file: /cvsroot/src/sys/dev/sun/sunkbd.c,v
retrieving revision 1.29
diff -u -p -r1.29 sunkbd.c
--- dev/sun/sunkbd.c 15 Sep 2013 14:10:04 -0000 1.29
+++ dev/sun/sunkbd.c 29 Oct 2017 13:43:10 -0000
@@ -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_NO_USER_OPEN);
/* 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_NO_USER_OPEN);
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_NO_USER_OPEN);
return (0);
}
Index: dev/sun/sunms.c
===================================================================
RCS file: /cvsroot/src/sys/dev/sun/sunms.c,v
retrieving revision 1.32
diff -u -p -r1.32 sunms.c
--- dev/sun/sunms.c 15 Sep 2013 14:13:19 -0000 1.32
+++ dev/sun/sunms.c 29 Oct 2017 13:43:10 -0000
@@ -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_NO_USER_OPEN);
/* 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_NO_USER_OPEN);
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_NO_USER_OPEN);
return (0);
}
Index: sys/tty.h
===================================================================
RCS file: /cvsroot/src/sys/sys/tty.h,v
retrieving revision 1.93
diff -u -p -r1.93 tty.h
--- sys/tty.h 15 Nov 2014 19:17:05 -0000 1.93
+++ sys/tty.h 29 Oct 2017 13:43:11 -0000
@@ -203,6 +203,9 @@ 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_NO_USER_OPEN 0x10000 /* Device is kernel only */
+
/* Character type information. */
#define ORDINARY 0
#define CONTROL 1
Home |
Main Index |
Thread Index |
Old Index