Fixes PF in sys_exec()
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 20 Nov 2013 02:49:20 +0000 (18:49 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Jan 2014 19:50:50 +0000 (11:50 -0800)
This could happen if load_elf() tries to set_errno().  This could happen
if we failed to load the requested interpreter (ei.interp).

kern/src/syscall.c

index 58b6895..2062a03 100644 (file)
@@ -576,6 +576,8 @@ static int sys_exec(struct proc *p, char *path, size_t path_l,
        /* clear this, so the new program knows to get an LDT */
        p->procdata->ldt = 0;
        #endif
+       /* When we destroy our memory regions, accessing cur_sysc would PF */
+       pcpui->cur_kthread->sysc = 0;
        destroy_vmrs(p);
        close_all_files(&p->open_files, TRUE);
        env_user_mem_free(p, 0, UMAPTOP);