|
|
@@ -164,6 +164,11 @@ void lkdtm_EXEC_USERSPACE(void)
|
|
|
vm_munmap(user_addr, PAGE_SIZE);
|
|
|
}
|
|
|
|
|
|
+void lkdtm_EXEC_NULL(void)
|
|
|
+{
|
|
|
+ execute_location(NULL, CODE_AS_IS);
|
|
|
+}
|
|
|
+
|
|
|
void lkdtm_ACCESS_USERSPACE(void)
|
|
|
{
|
|
|
unsigned long user_addr, tmp = 0;
|
|
|
@@ -195,6 +200,19 @@ void lkdtm_ACCESS_USERSPACE(void)
|
|
|
vm_munmap(user_addr, PAGE_SIZE);
|
|
|
}
|
|
|
|
|
|
+void lkdtm_ACCESS_NULL(void)
|
|
|
+{
|
|
|
+ unsigned long tmp;
|
|
|
+ unsigned long *ptr = (unsigned long *)NULL;
|
|
|
+
|
|
|
+ pr_info("attempting bad read at %px\n", ptr);
|
|
|
+ tmp = *ptr;
|
|
|
+ tmp += 0xc0dec0de;
|
|
|
+
|
|
|
+ pr_info("attempting bad write at %px\n", ptr);
|
|
|
+ *ptr = tmp;
|
|
|
+}
|
|
|
+
|
|
|
void __init lkdtm_perms_init(void)
|
|
|
{
|
|
|
/* Make sure we can write to __ro_after_init values during __init */
|