Fixes sys_dup_fds_to
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 26 Aug 2014 21:58:01 +0000 (14:58 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 26 Aug 2014 21:58:01 +0000 (14:58 -0700)
Had a gaping hole where we didn't make sure that p controls the target (even
though proc_controls() is mostly a noop now).

Also fixes up the error reporting (set_errno and -1, instead of returning
-error).

kern/src/syscall.c

index 2f1cc24..13be1c6 100644 (file)
@@ -1991,11 +1991,13 @@ static intreg_t sys_dup_fds_to(struct proc *p, unsigned int pid,
        int slot;
        struct file *file;
 
-       if (!is_user_rwaddr(map, sizeof(struct childfdmap) * nentries))
-               return -EINVAL;
-       child = pid2proc(pid);
+       if (!is_user_rwaddr(map, sizeof(struct childfdmap) * nentries)) {
+               set_errno(EINVAL);
+               return -1;
+       }
+       child = get_controllable_proc(p, pid);
        if (!child)
-               return -ENOENT;
+               return -1;
        for (int i = 0; i < nentries; i++) {
                map[i].ok = -1;
                file = get_file_from_fd(&p->open_files, map[i].parentfd);