X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ftests%2Fuserprog%2Fboundary.c;h=ca4fb73e5a52a5470e251ed1476a991cdb9be5c5;hb=bd5dde3034714da175496292c92dc5a37509a311;hp=50f2618d3db62852a7368630e267eba22afeb27d;hpb=615bf3b3d2a8573ed6fb9ddc0055745e163ac999;p=pintos-anon diff --git a/src/tests/userprog/boundary.c b/src/tests/userprog/boundary.c index 50f2618..ca4fb73 100644 --- a/src/tests/userprog/boundary.c +++ b/src/tests/userprog/boundary.c @@ -1,9 +1,16 @@ +/* Utility function for tests that try to break system calls by + passing them data that crosses from one virtual page to + another. */ + #include #include #include #include "tests/userprog/boundary.h" -static char dst[8192]; +/* Together with statements in src/lib/user/user.lds, arranges + for the following array to be at the very end of the .bss + segment (needed for get_bad_boundary below). */ +static char dst[8192] __attribute__ ((section (".testEndmem,\"aw\",@nobits#"))); /* Returns the beginning of a page. There are at least 2048 modifiable bytes on either side of the pointer returned. */ @@ -27,3 +34,14 @@ copy_string_across_boundary (const char *src) return p; } +/* Returns an address that is invalid, but the preceding bytes + * are all valid (the highest address in the bss segment). Used + * to position information such that the first byte of the + * information is valid, but not all the information is valid. */ +void * +get_bad_boundary (void) +{ + /* This code assumes that dst will be in the highest page + * allocated to the user process. */ + return (void *) ROUND_UP ((uintptr_t) (dst + sizeof(dst) - 1), 4096); +}