|
@@ -26,6 +26,8 @@ int main(int argc, char** argv)
|
|
|
InvalidStackPointerOnSyscall,
|
|
|
InvalidStackPointerOnPageFault,
|
|
|
SyscallFromWritableMemory,
|
|
|
+ WriteToFreedMemoryStillCachedByMalloc,
|
|
|
+ ReadFromFreedMemoryStillCachedByMalloc,
|
|
|
};
|
|
|
Mode mode = SegmentationViolation;
|
|
|
|
|
@@ -56,6 +58,10 @@ int main(int argc, char** argv)
|
|
|
mode = InvalidStackPointerOnPageFault;
|
|
|
else if (String(argv[1]) == "-S")
|
|
|
mode = SyscallFromWritableMemory;
|
|
|
+ else if (String(argv[1]) == "-x")
|
|
|
+ mode = ReadFromFreedMemoryStillCachedByMalloc;
|
|
|
+ else if (String(argv[1]) == "-y")
|
|
|
+ mode = WriteToFreedMemoryStillCachedByMalloc;
|
|
|
else
|
|
|
print_usage_and_exit();
|
|
|
|
|
@@ -161,6 +167,23 @@ int main(int argc, char** argv)
|
|
|
((void(*)())buffer)();
|
|
|
}
|
|
|
|
|
|
+ if (mode == ReadFromFreedMemoryStillCachedByMalloc) {
|
|
|
+ auto* ptr = (u8*)malloc(1024);
|
|
|
+ free(ptr);
|
|
|
+ dbgprintf("ptr = %p\n", ptr);
|
|
|
+ volatile auto foo = *ptr;
|
|
|
+ (void)foo;
|
|
|
+ ASSERT_NOT_REACHED();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (mode == WriteToFreedMemoryStillCachedByMalloc) {
|
|
|
+ auto* ptr = (u8*)malloc(1024);
|
|
|
+ free(ptr);
|
|
|
+ dbgprintf("ptr = %p\n", ptr);
|
|
|
+ *ptr = 'x';
|
|
|
+ ASSERT_NOT_REACHED();
|
|
|
+ }
|
|
|
+
|
|
|
ASSERT_NOT_REACHED();
|
|
|
return 0;
|
|
|
}
|