diff options
Diffstat (limited to 'emu')
| -rw-r--r-- | emu/port/dat.h | 3 | ||||
| -rw-r--r-- | emu/port/devprog.c | 8 | ||||
| -rw-r--r-- | emu/port/dis.c | 2 |
3 files changed, 7 insertions, 6 deletions
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; |
