Uses channame() in sys_fd2path()
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 3 Apr 2014 23:11:30 +0000 (16:11 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 3 Apr 2014 23:11:30 +0000 (16:11 -0700)
channame() should do the trick, instead of the old chanpath() which was
removed in commit 011ab2.  If not, we should fix channame().  chanpath()
was a nxm thing; Inferno has different structs to track the name.
"chanpath(ch)" might have been put in quotes during the 9ns->inferno
change.

Using snprintf() and channame() helps with a couple things.  Previously,
fd2path() didn't check ch != 0 and could copy more than the user requested
(i.e. the full channame len instead of MIN(len, ch->name->len)).

kern/src/syscall.c

index 3b16a53..7454f38 100644 (file)
@@ -1731,10 +1731,7 @@ static intreg_t sys_fd2path(struct proc *p, int fd, void *u_buf, size_t len)
                return -1;
        }
        ch = fdtochan(current->fgrp, fd, -1, FALSE, TRUE);
-       if (ch->name != NULL) {
-               memmove(u_buf, ch->name->s, ch->name->len + 1);
-       }
-       ret = ch->name->len;
+       ret = snprintf(u_buf, len, "%s", channame(ch));
        cclose(ch);
        poperror();
        return ret;