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
|
@ -2016,6 +2016,7 @@ sbrkbugs(char *s)
|
|||
// has this bug, it will panic: balloc: out of blocks.
|
||||
// assumed_free may need to be raised to be
|
||||
// more than the number of free blocks.
|
||||
// this test takes a long time.
|
||||
void
|
||||
badwrite(char *s)
|
||||
{
|
||||
|
@ -2048,6 +2049,22 @@ badwrite(char *s)
|
|||
exit(0);
|
||||
}
|
||||
|
||||
// test whether exec() leaks memory if one of the
|
||||
// arguments is invalid. the test passes if
|
||||
// the kernel doesn't panic.
|
||||
void
|
||||
badarg(char *s)
|
||||
{
|
||||
for(int i = 0; i < 50000; i++){
|
||||
char *argv[2];
|
||||
argv[0] = (char*)0xffffffff;
|
||||
argv[1] = 0;
|
||||
exec("echo", argv);
|
||||
}
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
// run each test in its own process. run returns 1 if child's exit()
|
||||
// indicates success.
|
||||
int
|
||||
|
@ -2087,7 +2104,8 @@ main(int argc, char *argv[])
|
|||
} tests[] = {
|
||||
{pgbug, "pgbug" },
|
||||
{sbrkbugs, "sbrkbugs" },
|
||||
{badwrite, "badwrite" },
|
||||
// {badwrite, "badwrite" },
|
||||
{badarg, "badarg" },
|
||||
{reparent, "reparent" },
|
||||
{twochildren, "twochildren"},
|
||||
{forkfork, "forkfork"},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue