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));