diff options
| author | forsyth <forsyth@vitanuova.com> | 2011-02-24 23:08:03 +0000 |
|---|---|---|
| committer | forsyth <forsyth@vitanuova.com> | 2011-02-24 23:08:03 +0000 |
| commit | cb6deecc455ddb2a6a83cedaafc576838587d217 (patch) | |
| tree | b1ef6ea611515c18da988ee2a368939d2eb8f1be | |
| parent | 39f1a17d6a1f530b723b42717a2c14db6a25cf16 (diff) | |
20110224-2305
| -rw-r--r-- | CHANGES | 3 | ||||
| -rw-r--r-- | emu/port/dat.h | 3 | ||||
| -rw-r--r-- | emu/port/devprog.c | 8 | ||||
| -rw-r--r-- | emu/port/dis.c | 2 | ||||
| -rw-r--r-- | include/interp.h | 10 | ||||
| -rw-r--r-- | include/version.h | 2 | ||||
| -rw-r--r-- | os/port/devprog.c | 8 | ||||
| -rw-r--r-- | os/port/portdat.h | 1 |
8 files changed, 20 insertions, 17 deletions
@@ -1,3 +1,6 @@ +20110209 + split emu.h from lib9.h for all platforms + kproc in emu is now a void type as in os 20110208 emu/Linux/os.c - use -lrt's semaphores instead of signals emu/Linux/mkfile - add -lrt to library list, and push out separation of X11LIBS from SYSLIBS for emu-g done ages ago diff --git a/emu/port/dat.h b/emu/port/dat.h index b245b61c..a0881050 100644 --- a/emu/port/dat.h +++ b/emu/port/dat.h @@ -37,6 +37,8 @@ typedef struct Walkqid Walkqid; #undef NAMELEN #undef ERRLEN +#include "emu.h" + #pragma incomplete Queue #pragma incomplete Mntrpc @@ -269,7 +271,6 @@ struct Pgrp QLock nsh; Mhead* mnthash[MNTHASH]; int progmode; - int privatemem; /* deny access to /prog by debuggers */ Chan* dot; Chan* slash; int nodevs; diff --git a/emu/port/devprog.c b/emu/port/devprog.c index 8ee6a75b..7eeb5d51 100644 --- a/emu/port/devprog.c +++ b/emu/port/devprog.c @@ -293,14 +293,14 @@ progopen(Chan *c, int omode) error(Enomem); break; case Qheap: - if(SECURE || o->pgrp->privatemem || omode != ORDWR) + if(SECURE || p->group->flags&Pprivatemem || omode != ORDWR) error(Eperm); c->aux = malloc(sizeof(Heapqry)); if(c->aux == nil) error(Enomem); break; case Qdbgctl: - if(SECURE || o->pgrp->privatemem || omode != ORDWR) + if(SECURE || p->group->flags&Pprivatemem || omode != ORDWR) error(Eperm); ctl = malloc(sizeof(Progctl)); if(ctl == nil) @@ -1026,7 +1026,6 @@ progwrite(Chan *c, void *va, long n, vlong offset) int i, pc; Cmdbuf *cb; Cmdtab *ct; - Osenv *o; USED(offset); USED(va); @@ -1072,8 +1071,7 @@ progwrite(Chan *c, void *va, long n, vlong offset) error(Ebadctl); break; case CMprivate: - o = p->osenv; - o->pgrp->privatemem = 1; + p->group->flags |= Pprivatemem; break; } poperror(); diff --git a/emu/port/dis.c b/emu/port/dis.c index 881bd81f..8c474ff6 100644 --- a/emu/port/dis.c +++ b/emu/port/dis.c @@ -459,6 +459,8 @@ newgrp(Prog *p) p->flags &= ~(Ppropagate|Pnotifyleader); g->id = p->pid; g->flags = 0; + if(p->group != nil) + g->flags |= p->group->flags&Pprivatemem; g->child = nil; pg = delgrp(p); g->head = g->tail = p; diff --git a/include/interp.h b/include/interp.h index abbe764b..5bfd4e79 100644 --- a/include/interp.h +++ b/include/interp.h @@ -34,11 +34,13 @@ enum enum { - Ppropagate = 1<<0, - Pnotifyleader = 1<<1, - Prestrict = 1<<2, + /* Prog and Progs flags */ + Ppropagate = 1<<0, /* propagate exceptions within group */ + Pnotifyleader = 1<<1, /* send exceptions to group leader */ + Prestrict = 1<<2, /* enforce memory limits */ Prestricted = 1<<3, - Pkilled = 1<<4 + Pkilled = 1<<4, + Pprivatemem = 1<<5 /* keep heap and stack private */ }; typedef struct Alt Alt; diff --git a/include/version.h b/include/version.h index 2092c618..6c4a0453 100644 --- a/include/version.h +++ b/include/version.h @@ -1 +1 @@ -#define VERSION "Fourth Edition (20110208)" +#define VERSION "Fourth Edition (20110224)" diff --git a/os/port/devprog.c b/os/port/devprog.c index c6c97efc..4289841d 100644 --- a/os/port/devprog.c +++ b/os/port/devprog.c @@ -295,14 +295,14 @@ progopen(Chan *c, int omode) error(Enomem); break; case Qheap: - if(SECURE || o->pgrp->privatemem || omode != ORDWR) + if(SECURE || p->group->flags&Pprivatemem || omode != ORDWR) error(Eperm); c->aux = malloc(sizeof(Heapqry)); if(c->aux == nil) error(Enomem); break; case Qdbgctl: - if(SECURE || o->pgrp->privatemem || omode != ORDWR) + if(SECURE || p->group->flags&Pprivatemem || omode != ORDWR) error(Eperm); ctl = malloc(sizeof(Progctl)); if(ctl == nil) @@ -1028,7 +1028,6 @@ progwrite(Chan *c, void *va, long n, vlong offset) int i, pc; Cmdbuf *cb; Cmdtab *ct; - Osenv *o; USED(offset); USED(va); @@ -1074,8 +1073,7 @@ progwrite(Chan *c, void *va, long n, vlong offset) error(Ebadctl); break; case CMprivate: - o = p->osenv; - o->pgrp->privatemem = 1; + p->group->flags |= Pprivatemem; break; } poperror(); diff --git a/os/port/portdat.h b/os/port/portdat.h index 81e92012..e20ba770 100644 --- a/os/port/portdat.h +++ b/os/port/portdat.h @@ -340,7 +340,6 @@ struct Pgrp QLock nsh; Mhead* mnthash[MNTHASH]; int progmode; - int privatemem; /* deny access to /prog by debuggers */ Chan* dot; Chan* slash; int nodevs; |
