From 10b66aa0a9a308f429504b22f03f8cb96d91e809 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Sun, 8 Apr 2001 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2001-04-08 --- port/devproc.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/port/devproc.c b/port/devproc.c index 2b6ab6874276514b8623b3cd4ce59f2f78f3859f..fd27afd8a6b2497706dcadf11211d829e4c2bc47 100644 --- a/port/devproc.c +++ b/port/devproc.c @@ -159,6 +159,24 @@ procstat(Chan *c, char *db) devstat(c, db, 0, 0, procgen); } +/* + * none can't read or write state on other + * processes. This is to contain access of + * servers running as none should they be + * subverted by, for example, a stack attack. + */ +static void +nonone(Proc *p) +{ + if(p == up) + return; + if(strcmp(up->user, "none") != 0) + return; + if(iseve()) + return; + error(Eperm); +} + static Chan* procopen(Chan *c, int omode) { @@ -209,6 +227,7 @@ procopen(Chan *c, int omode) case Qwait: case Qregs: case Qfpregs: + nonone(p); break; case Qns: @@ -218,6 +237,7 @@ procopen(Chan *c, int omode) break; case Qnotepg: + nonone(p); pg = p->pgrp; if(pg == nil) error(Eprocdied); @@ -258,6 +278,7 @@ procwstat(Chan *c, char *db) error(Eperm); p = proctab(SLOT(c->qid)); + nonone(p); if(waserror()){ qunlock(&p->debug); nexterror();