From e9bb7876e1bd7f9aaef4e1cd0c64c97f411ffde5 Mon Sep 17 00:00:00 2001 From: Jacob Moody Date: Sat, 28 May 2022 02:23:29 +0000 Subject: kernel: add chdev command to devcons --- sys/src/9/port/dev.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'sys/src/9/port/dev.c') diff --git a/sys/src/9/port/dev.c b/sys/src/9/port/dev.c index e875c50e4..185d7ffd0 100644 --- a/sys/src/9/port/dev.c +++ b/sys/src/9/port/dev.c @@ -30,6 +30,63 @@ devno(int c, int user) return -1; } +void +devmask(Pgrp *pgrp, int invert, char *devs) +{ + int i, t, w; + char *p; + Rune r; + u64int mask[nelem(pgrp->notallowed)]; + + if(invert) + memset(mask, 0xFF, sizeof mask); + else + memset(mask, 0, sizeof mask); + + w = sizeof mask[0] * 8; + for(p = devs; *p != '\0';){ + p += chartorune(&r, p); + t = devno(r, 1); + if(t == -1) + continue; + if(invert) + mask[t/w] &= ~(1<ns); + for(i=0; i < nelem(pgrp->notallowed); i++) + pgrp->notallowed[i] |= mask[i]; + wunlock(&pgrp->ns); +} + +int +devallowed(Pgrp *pgrp, int r) +{ + int t, w, b; + + t = devno(r, 1); + if(t == -1) + return 0; + + w = sizeof(u64int) * 8; + rlock(&pgrp->ns); + b = !(pgrp->notallowed[t/w] & 1<ns); + return b; +} + +int +canmount(Pgrp *pgrp) +{ + /* + * Devmnt is not usable directly from user procs, so + * having it removed is interpreted to block any mounts. + */ + return devallowed(pgrp, 'M'); +} + void devdir(Chan *c, Qid qid, char *n, vlong length, char *user, long perm, Dir *db) { -- cgit v1.2.3