Fix devip's permission conversion
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 11 Sep 2015 15:44:53 +0000 (11:44 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 28 Sep 2015 19:14:00 +0000 (15:14 -0400)
Unfortunately, there are probably lots of conversions from omode to some
form of rwx permission, just like devpermcheck (probably due to the
independence and lack of sharing between device code).  All of these
will assume that 0 means O_READ.  In #I, they wanted just rwx, not
rwx------.  Oh well.

kern/src/net/devip.c

index 7befb77..eabfe7f 100644 (file)
@@ -362,12 +362,6 @@ static int should_wake(void *arg)
        return cv->incall != NULL;
 }
 
-static int m2p[] = {
-       [O_READ] 4,
-       [O_WRITE] 2,
-       [O_RDWR] 6
-};
-
 static struct chan *ipopen(struct chan *c, int omode)
 {
        ERRSTACK(2);
@@ -376,7 +370,8 @@ static struct chan *ipopen(struct chan *c, int omode)
        int perm;
        struct Fs *f;
 
-       perm = m2p[omode & 3];
+       /* perm is a lone rwx, not the rwx------ from the conversion */
+       perm = omode_to_rwx(omode) >> 6;
 
        f = ipfs[c->dev];