@@ -68,40 +68,40 @@ void __init lkdtm_bugs_init(int *recur_param)
6868 recur_count = * recur_param ;
6969}
7070
71- void lkdtm_PANIC (void )
71+ static void lkdtm_PANIC (void )
7272{
7373 panic ("dumptest" );
7474}
7575
76- void lkdtm_BUG (void )
76+ static void lkdtm_BUG (void )
7777{
7878 BUG ();
7979}
8080
8181static int warn_counter ;
8282
83- void lkdtm_WARNING (void )
83+ static void lkdtm_WARNING (void )
8484{
8585 WARN_ON (++ warn_counter );
8686}
8787
88- void lkdtm_WARNING_MESSAGE (void )
88+ static void lkdtm_WARNING_MESSAGE (void )
8989{
9090 WARN (1 , "Warning message trigger count: %d\n" , ++ warn_counter );
9191}
9292
93- void lkdtm_EXCEPTION (void )
93+ static void lkdtm_EXCEPTION (void )
9494{
9595 * ((volatile int * ) 0 ) = 0 ;
9696}
9797
98- void lkdtm_LOOP (void )
98+ static void lkdtm_LOOP (void )
9999{
100100 for (;;)
101101 ;
102102}
103103
104- void lkdtm_EXHAUST_STACK (void )
104+ static void lkdtm_EXHAUST_STACK (void )
105105{
106106 pr_info ("Calling function with %lu frame size to depth %d ...\n" ,
107107 REC_STACK_SIZE , recur_count );
@@ -115,7 +115,7 @@ static noinline void __lkdtm_CORRUPT_STACK(void *stack)
115115}
116116
117117/* This should trip the stack canary, not corrupt the return address. */
118- noinline void lkdtm_CORRUPT_STACK (void )
118+ static noinline void lkdtm_CORRUPT_STACK (void )
119119{
120120 /* Use default char array length that triggers stack protection. */
121121 char data [8 ] __aligned (sizeof (void * ));
@@ -125,7 +125,7 @@ noinline void lkdtm_CORRUPT_STACK(void)
125125}
126126
127127/* Same as above but will only get a canary with -fstack-protector-strong */
128- noinline void lkdtm_CORRUPT_STACK_STRONG (void )
128+ static noinline void lkdtm_CORRUPT_STACK_STRONG (void )
129129{
130130 union {
131131 unsigned short shorts [4 ];
@@ -139,7 +139,7 @@ noinline void lkdtm_CORRUPT_STACK_STRONG(void)
139139static pid_t stack_pid ;
140140static unsigned long stack_addr ;
141141
142- void lkdtm_REPORT_STACK (void )
142+ static void lkdtm_REPORT_STACK (void )
143143{
144144 volatile uintptr_t magic ;
145145 pid_t pid = task_pid_nr (current );
@@ -222,15 +222,15 @@ static noinline void __lkdtm_REPORT_STACK_CANARY(void *stack)
222222 }
223223}
224224
225- void lkdtm_REPORT_STACK_CANARY (void )
225+ static void lkdtm_REPORT_STACK_CANARY (void )
226226{
227227 /* Use default char array length that triggers stack protection. */
228228 char data [8 ] __aligned (sizeof (void * )) = { };
229229
230230 __lkdtm_REPORT_STACK_CANARY ((void * )& data );
231231}
232232
233- void lkdtm_UNALIGNED_LOAD_STORE_WRITE (void )
233+ static void lkdtm_UNALIGNED_LOAD_STORE_WRITE (void )
234234{
235235 static u8 data [5 ] __attribute__((aligned (4 ))) = {1 , 2 , 3 , 4 , 5 };
236236 u32 * p ;
@@ -245,29 +245,29 @@ void lkdtm_UNALIGNED_LOAD_STORE_WRITE(void)
245245 pr_err ("XFAIL: arch has CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS\n" );
246246}
247247
248- void lkdtm_SOFTLOCKUP (void )
248+ static void lkdtm_SOFTLOCKUP (void )
249249{
250250 preempt_disable ();
251251 for (;;)
252252 cpu_relax ();
253253}
254254
255- void lkdtm_HARDLOCKUP (void )
255+ static void lkdtm_HARDLOCKUP (void )
256256{
257257 local_irq_disable ();
258258 for (;;)
259259 cpu_relax ();
260260}
261261
262- void lkdtm_SPINLOCKUP (void )
262+ static void lkdtm_SPINLOCKUP (void )
263263{
264264 /* Must be called twice to trigger. */
265265 spin_lock (& lock_me_up );
266266 /* Let sparse know we intended to exit holding the lock. */
267267 __release (& lock_me_up );
268268}
269269
270- void lkdtm_HUNG_TASK (void )
270+ static void lkdtm_HUNG_TASK (void )
271271{
272272 set_current_state (TASK_UNINTERRUPTIBLE );
273273 schedule ();
@@ -276,7 +276,7 @@ void lkdtm_HUNG_TASK(void)
276276volatile unsigned int huge = INT_MAX - 2 ;
277277volatile unsigned int ignored ;
278278
279- void lkdtm_OVERFLOW_SIGNED (void )
279+ static void lkdtm_OVERFLOW_SIGNED (void )
280280{
281281 int value ;
282282
@@ -291,7 +291,7 @@ void lkdtm_OVERFLOW_SIGNED(void)
291291}
292292
293293
294- void lkdtm_OVERFLOW_UNSIGNED (void )
294+ static void lkdtm_OVERFLOW_UNSIGNED (void )
295295{
296296 unsigned int value ;
297297
@@ -319,7 +319,7 @@ struct array_bounds {
319319 int three ;
320320};
321321
322- void lkdtm_ARRAY_BOUNDS (void )
322+ static void lkdtm_ARRAY_BOUNDS (void )
323323{
324324 struct array_bounds_flex_array * not_checked ;
325325 struct array_bounds * checked ;
@@ -357,7 +357,7 @@ void lkdtm_ARRAY_BOUNDS(void)
357357 pr_expected_config (CONFIG_UBSAN_BOUNDS );
358358}
359359
360- void lkdtm_CORRUPT_LIST_ADD (void )
360+ static void lkdtm_CORRUPT_LIST_ADD (void )
361361{
362362 /*
363363 * Initially, an empty list via LIST_HEAD:
@@ -397,7 +397,7 @@ void lkdtm_CORRUPT_LIST_ADD(void)
397397 }
398398}
399399
400- void lkdtm_CORRUPT_LIST_DEL (void )
400+ static void lkdtm_CORRUPT_LIST_DEL (void )
401401{
402402 LIST_HEAD (test_head );
403403 struct lkdtm_list item ;
@@ -425,7 +425,7 @@ void lkdtm_CORRUPT_LIST_DEL(void)
425425}
426426
427427/* Test that VMAP_STACK is actually allocating with a leading guard page */
428- void lkdtm_STACK_GUARD_PAGE_LEADING (void )
428+ static void lkdtm_STACK_GUARD_PAGE_LEADING (void )
429429{
430430 const unsigned char * stack = task_stack_page (current );
431431 const unsigned char * ptr = stack - 1 ;
@@ -439,7 +439,7 @@ void lkdtm_STACK_GUARD_PAGE_LEADING(void)
439439}
440440
441441/* Test that VMAP_STACK is actually allocating with a trailing guard page */
442- void lkdtm_STACK_GUARD_PAGE_TRAILING (void )
442+ static void lkdtm_STACK_GUARD_PAGE_TRAILING (void )
443443{
444444 const unsigned char * stack = task_stack_page (current );
445445 const unsigned char * ptr = stack + THREAD_SIZE ;
@@ -452,7 +452,7 @@ void lkdtm_STACK_GUARD_PAGE_TRAILING(void)
452452 pr_err ("FAIL: accessed page after stack! (byte: %x)\n" , byte );
453453}
454454
455- void lkdtm_UNSET_SMEP (void )
455+ static void lkdtm_UNSET_SMEP (void )
456456{
457457#if IS_ENABLED (CONFIG_X86_64 ) && !IS_ENABLED (CONFIG_UML )
458458#define MOV_CR4_DEPTH 64
@@ -518,7 +518,7 @@ void lkdtm_UNSET_SMEP(void)
518518#endif
519519}
520520
521- void lkdtm_DOUBLE_FAULT (void )
521+ static void lkdtm_DOUBLE_FAULT (void )
522522{
523523#if IS_ENABLED (CONFIG_X86_32 ) && !IS_ENABLED (CONFIG_UML )
524524 /*
@@ -566,7 +566,7 @@ static noinline void change_pac_parameters(void)
566566}
567567#endif
568568
569- noinline void lkdtm_CORRUPT_PAC (void )
569+ static noinline void lkdtm_CORRUPT_PAC (void )
570570{
571571#ifdef CONFIG_ARM64
572572#define CORRUPT_PAC_ITERATE 10
@@ -594,3 +594,37 @@ noinline void lkdtm_CORRUPT_PAC(void)
594594 pr_err ("XFAIL: this test is arm64-only\n" );
595595#endif
596596}
597+
598+ static struct crashtype crashtypes [] = {
599+ CRASHTYPE (PANIC ),
600+ CRASHTYPE (BUG ),
601+ CRASHTYPE (WARNING ),
602+ CRASHTYPE (WARNING_MESSAGE ),
603+ CRASHTYPE (EXCEPTION ),
604+ CRASHTYPE (LOOP ),
605+ CRASHTYPE (EXHAUST_STACK ),
606+ CRASHTYPE (CORRUPT_STACK ),
607+ CRASHTYPE (CORRUPT_STACK_STRONG ),
608+ CRASHTYPE (REPORT_STACK ),
609+ CRASHTYPE (REPORT_STACK_CANARY ),
610+ CRASHTYPE (UNALIGNED_LOAD_STORE_WRITE ),
611+ CRASHTYPE (SOFTLOCKUP ),
612+ CRASHTYPE (HARDLOCKUP ),
613+ CRASHTYPE (SPINLOCKUP ),
614+ CRASHTYPE (HUNG_TASK ),
615+ CRASHTYPE (OVERFLOW_SIGNED ),
616+ CRASHTYPE (OVERFLOW_UNSIGNED ),
617+ CRASHTYPE (ARRAY_BOUNDS ),
618+ CRASHTYPE (CORRUPT_LIST_ADD ),
619+ CRASHTYPE (CORRUPT_LIST_DEL ),
620+ CRASHTYPE (STACK_GUARD_PAGE_LEADING ),
621+ CRASHTYPE (STACK_GUARD_PAGE_TRAILING ),
622+ CRASHTYPE (UNSET_SMEP ),
623+ CRASHTYPE (DOUBLE_FAULT ),
624+ CRASHTYPE (CORRUPT_PAC ),
625+ };
626+
627+ struct crashtype_category bugs_crashtypes = {
628+ .crashtypes = crashtypes ,
629+ .len = ARRAY_SIZE (crashtypes ),
630+ };
0 commit comments