diff -c /n/dump/2009/0801/sys/src/9/port/sysproc.c sysproc.c
/n/dump/2009/0801/sys/src/9/port/sysproc.c:234,247 - sysproc.c:234,248
        ulong magic, text, entry, data, bss;
        Tos *tos;
  
-       validaddr(arg[0], 1, 0);
-       file = (char*)arg[0];
+       file = nil;
        indir = 0;
        elem = nil;
        if(waserror()){
                free(elem);
+               free(file);
                nexterror();
        }
+       file = validnamedup((char*)arg[0], 1);
        for(;;){
                tc = namec(file, Aopen, OEXEC, 0);
                if(waserror()){
diff -c /n/dump/2009/0801/sys/src/9/port/chan.c chan.c
/n/dump/2009/0801/sys/src/9/port/chan.c:1689,1701 - chan.c:1689,1698
        if((ulong)name < KZERO){
                validaddr((ulong)name, 1, 0);
                if(!dup)
-                       print("warning: validname called from %lux with user 
pointer", pc);
+                       print("warning: validname called from %#p with user 
pointer", pc);
                p = name;
                t = BY2PG-((ulong)p&(BY2PG-1));
-               while((ename=vmemchr(p, 0, t)) == nil){
-                       p += t;
-                       t = BY2PG;
-               }
+               ename = vmemchr(name, 0, 1<<16);
        }else
                ename = memchr(name, 0, (1<<16));
  

Reply via email to