diff --git a/drivers/misc/lkdtm.c b/drivers/misc/lkdtm.c index 42a0a99007be..8e06e1020ad9 100644 --- a/drivers/misc/lkdtm.c +++ b/drivers/misc/lkdtm.c @@ -48,6 +48,8 @@ #include #include #include +#include +#include #ifdef CONFIG_IDE #include @@ -95,6 +97,7 @@ enum ctype { CT_OVERFLOW, CT_CORRUPT_LIST_ADD, CT_CORRUPT_LIST_DEL, + CT_CORRUPT_USER_DS, CT_CORRUPT_STACK, CT_UNALIGNED_LOAD_STORE_WRITE, CT_OVERWRITE_ALLOCATION, @@ -135,6 +138,7 @@ static char* cp_type[] = { "OVERFLOW", "CORRUPT_LIST_ADD", "CORRUPT_LIST_DEL", + "CORRUPT_USER_DS", "CORRUPT_STACK", "UNALIGNED_LOAD_STORE_WRITE", "OVERWRITE_ALLOCATION", @@ -618,6 +622,14 @@ static void lkdtm_do_action(enum ctype which) pr_err("list_del() corruption not detected!\n"); break; } + case CT_CORRUPT_USER_DS: { + pr_info("setting bad task size limit\n"); + set_fs(KERNEL_DS); + + /* Make sure we do not keep running with a KERNEL_DS! */ + force_sig(SIGKILL, current); + break; + } case CT_NONE: default: break;