diff options
| author | Filip Strömbäck <filip.stromback@liu.se> | 2016-05-18 14:18:55 +0200 |
|---|---|---|
| committer | Filip Strömbäck <filip.stromback@liu.se> | 2016-05-18 14:53:17 +0200 |
| commit | 2858b834ded475881c48360187481f54c30c49eb (patch) | |
| tree | 133ee32ade5b8b4d985ae2abf0f61a080694ef1f /src | |
| parent | eb423363986defac4fa8eebd9baf4f84fac36bf9 (diff) | |
| download | pintos-rs-2858b834ded475881c48360187481f54c30c49eb.tar.gz | |
Fixed sc-bad-write test to be more precise.
Signed-off-by: Filip Strömbäck <filip.stromback@liu.se>
Diffstat (limited to 'src')
| -rw-r--r-- | src/tests/filst/sc-bad-write.c | 30 | ||||
| -rw-r--r-- | src/tests/filst/sc-bad-write.ck | 1 |
2 files changed, 27 insertions, 4 deletions
diff --git a/src/tests/filst/sc-bad-write.c b/src/tests/filst/sc-bad-write.c index 55927e7..28e0409 100644 --- a/src/tests/filst/sc-bad-write.c +++ b/src/tests/filst/sc-bad-write.c @@ -28,23 +28,45 @@ void test_main(void) // Get the addres of the first unmapped page in the system. unsigned page = (unsigned)pg_round_up(&global); + // Reserve space for 4 parameters. + unsigned base = page - sizeof(int) * 4; + + // Call write() with space for 4 parameters (should be fine). + asm volatile ( + "movl %%esp, %%edi;" + "movl %0, %%esp;" // Set stack pointer to right below page boundary. + "movl %1, (%%esp);" // Try to call SYS_WRITE + "movl %2, 4(%%esp);" // Write to STDOUT + "movl %3, 8(%%esp);" // Load buffer. + "movl $6, 12(%%esp);" // Write length of string + "int $0x30;" + "movl %%edi, %%esp;" // Restore esp. + : + : "r" (base), + "i" (SYS_WRITE), + "i" (STDOUT_FILENO), + "i" ("WORKS\n") + : "%esp", "%eax", "%edi"); + + // Reserve space for 3 parameters (write requires 4). - page -= sizeof(int) * 3; + base = page - sizeof(int) * 3; + // Call write() with space for 3 parameters (the kernel should kill us for doing this). asm volatile ( "movl %%esp, %%edi;" "movl %0, %%esp;" // Set stack pointer to right below page boundary. "movl %1, (%%esp);" // Try to call SYS_WRITE "movl %2, 4(%%esp);" // Write to STDOUT "movl %3, 8(%%esp);" // Load buffer. - //"movl $5, 12(%%esp);" // Can not write the last parameter as we would get a pagefault. + //"movl $6, 12(%%esp);" // Can not write the last parameter as we would get a pagefault. "int $0x30;" "movl %%edi, %%esp;" // Restore esp in case we do not crash (as we should). : - : "r" (page), + : "r" (base), "i" (SYS_WRITE), "i" (STDOUT_FILENO), - "i" ("TEST\n") + "i" ("FAIL!\n") : "%esp", "%eax", "%edi"); fail("should have died."); diff --git a/src/tests/filst/sc-bad-write.ck b/src/tests/filst/sc-bad-write.ck index bd393c0..b23175a 100644 --- a/src/tests/filst/sc-bad-write.ck +++ b/src/tests/filst/sc-bad-write.ck @@ -4,6 +4,7 @@ use warnings; use tests::tests; check_expected ([<<'EOF']); (sc-bad-write) begin +WORKS sc-bad-write: exit(-1) EOF pass; |
