don't leak memory if exec() arguments are invalid.
This commit is contained in:
parent
6b79ee69b7
commit
d940fd122d
2 changed files with 27 additions and 4 deletions
|
@ -421,10 +421,10 @@ sys_exec(void)
|
|||
memset(argv, 0, sizeof(argv));
|
||||
for(i=0;; i++){
|
||||
if(i >= NELEM(argv)){
|
||||
return -1;
|
||||
goto bad;
|
||||
}
|
||||
if(fetchaddr(uargv+sizeof(uint64)*i, (uint64*)&uarg) < 0){
|
||||
return -1;
|
||||
goto bad;
|
||||
}
|
||||
if(uarg == 0){
|
||||
argv[i] = 0;
|
||||
|
@ -434,7 +434,7 @@ sys_exec(void)
|
|||
if(argv[i] == 0)
|
||||
panic("sys_exec kalloc");
|
||||
if(fetchstr(uarg, argv[i], PGSIZE) < 0){
|
||||
return -1;
|
||||
goto bad;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -444,6 +444,11 @@ sys_exec(void)
|
|||
kfree(argv[i]);
|
||||
|
||||
return ret;
|
||||
|
||||
bad:
|
||||
for(i = 0; i < NELEM(argv) && argv[i] != 0; i++)
|
||||
kfree(argv[i]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
uint64
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue