goto bad;
}
iunlockput(ip);
+ ip = 0;
// Allocate a one-page stack at the next page boundary
sz = PGROUNDUP(sz);
uint ffffffff = 0xffffffff;
copyout(pgdir, sp, &ffffffff, 4);
+ if(sp < sz - PGSIZE)
+ goto bad;
+
// Save program name for debugging.
for(last=s=path; *s; s++)
if(*s == '/')
return 0;
bad:
- cprintf("kernel: exec failed\n");
- if(pgdir) freevm(pgdir);
- iunlockput(ip);
+ if(pgdir)
+ freevm(pgdir);
+ if(ip)
+ iunlockput(ip);
return -1;
}