Fixed bug with blindly copying procinfo...
authorKevin Klues <klueska@ros-dev.(none)>
Wed, 14 Apr 2010 04:51:58 +0000 (21:51 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:35:42 +0000 (17:35 -0700)
Blindly copying it like it did causes the vcore map to be
overwritten incorrectly.  We have already initialized the procinfo
strruct at the time of fork() so we really shouldn't be doing it
again anyway.  It only really makes sense to be forking and execing
single core processes anyway, as none of this really makes sense
for manycore processes.  SHould work fine for now though.  Maybe consider
moving the stuff stored in procinfo that's needed by glibc onto the
user stack so none of this is necessary though.

kern/src/syscall.c

index bef44ee..c0964f7 100644 (file)
@@ -34,7 +34,7 @@
 #ifdef __CONFIG_NETWORKING__
 #include <arch/nic_common.h>
 extern int (*send_frame)(const char *CT(len) data, size_t len);
-extern char device_mac[6];
+extern unsigned char device_mac[6];
 #endif
 
 /************** Utility Syscalls **************/
@@ -392,12 +392,16 @@ intreg_t sys_exec(struct proc* p, int fd, procinfo_t* pi)
                goto out;
        }
 
-       // TODO: don't copy procinfo from the user (PC)
-       if(memcpy_from_user(p,p->procinfo,pi,sizeof(procinfo_t))) {
+       // Set the argument stuff needed by glibc
+       if(memcpy_from_user(p,p->procinfo->argp,pi->argp,sizeof(pi->argp))) {
                proc_destroy(p);
                goto out;
        }
-       proc_init_procinfo(p);
+       if(memcpy_from_user(p,p->procinfo->argbuf,pi->argbuf,sizeof(pi->argbuf))) {
+               proc_destroy(p);
+               goto out;
+       }
+
        // TODO: don't do this either (PC)
        memset(p->procdata, 0, sizeof(procdata_t));