1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * 4 * Copyright (c) 2014 Samsung Electronics Co., Ltd. 5 * Author: Andrey Ryabinin <a.ryabinin@samsung.com> 6 */ 7 8 #define pr_fmt(fmt) "kasan: test: " fmt 9 10 #include <kunit/test.h> 11 #include <linux/bitops.h> 12 #include <linux/delay.h> 13 #include <linux/io.h> 14 #include <linux/kasan.h> 15 #include <linux/kernel.h> 16 #include <linux/mempool.h> 17 #include <linux/mm.h> 18 #include <linux/mman.h> 19 #include <linux/module.h> 20 #include <linux/printk.h> 21 #include <linux/random.h> 22 #include <linux/set_memory.h> 23 #include <linux/slab.h> 24 #include <linux/string.h> 25 #include <linux/tracepoint.h> 26 #include <linux/uaccess.h> 27 #include <linux/vmalloc.h> 28 #include <trace/events/printk.h> 29 30 #include <asm/page.h> 31 32 #include "kasan.h" 33 34 #define OOB_TAG_OFF (IS_ENABLED(CONFIG_KASAN_GENERIC) ? 0 : KASAN_GRANULE_SIZE) 35 36 MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING"); 37 38 static bool multishot; 39 40 /* Fields set based on lines observed in the console. */ 41 static struct { 42 bool report_found; 43 bool async_fault; 44 } test_status; 45 46 /* 47 * Some tests use these global variables to store return values from function 48 * calls that could otherwise be eliminated by the compiler as dead code. 49 */ 50 static void *volatile kasan_ptr_result; 51 static volatile int kasan_int_result; 52 53 /* Probe for console output: obtains test_status lines of interest. */ 54 static void probe_console(void *ignore, const char *buf, size_t len) 55 { 56 if (strnstr(buf, "BUG: KASAN: ", len)) 57 WRITE_ONCE(test_status.report_found, true); 58 else if (strnstr(buf, "Asynchronous fault: ", len)) 59 WRITE_ONCE(test_status.async_fault, true); 60 } 61 62 static int kasan_suite_init(struct kunit_suite *suite) 63 { 64 if (!kasan_enabled()) { 65 pr_err("Can't run KASAN tests with KASAN disabled"); 66 return -1; 67 } 68 69 /* Stop failing KUnit tests on KASAN reports. */ 70 kasan_kunit_test_suite_start(); 71 72 /* 73 * Temporarily enable multi-shot mode. Otherwise, KASAN would only 74 * report the first detected bug and panic the kernel if panic_on_warn 75 * is enabled. 76 */ 77 multishot = kasan_save_enable_multi_shot(); 78 79 register_trace_console(probe_console, NULL); 80 return 0; 81 } 82 83 static void kasan_suite_exit(struct kunit_suite *suite) 84 { 85 kasan_kunit_test_suite_end(); 86 kasan_restore_multi_shot(multishot); 87 unregister_trace_console(probe_console, NULL); 88 tracepoint_synchronize_unregister(); 89 } 90 91 static void kasan_test_exit(struct kunit *test) 92 { 93 KUNIT_EXPECT_FALSE(test, READ_ONCE(test_status.report_found)); 94 } 95 96 /** 97 * KUNIT_EXPECT_KASAN_RESULT - checks whether the executed expression 98 * produces a KASAN report; causes a KUnit test failure when the result 99 * is different from @fail. 100 * 101 * @test: Currently executing KUnit test. 102 * @expr: Expression to be tested. 103 * @expr_str: Expression to be tested encoded as a string. 104 * @fail: Whether expression should produce a KASAN report. 105 * 106 * For hardware tag-based KASAN, when a synchronous tag fault happens, tag 107 * checking is auto-disabled. When this happens, this test handler reenables 108 * tag checking. As tag checking can be only disabled or enabled per CPU, 109 * this handler disables migration (preemption). 110 * 111 * Since the compiler doesn't see that the expression can change the test_status 112 * fields, it can reorder or optimize away the accesses to those fields. 113 * Use READ/WRITE_ONCE() for the accesses and compiler barriers around the 114 * expression to prevent that. 115 * 116 * In between KUNIT_EXPECT_KASAN_RESULT checks, test_status.report_found is kept 117 * as false. This allows detecting KASAN reports that happen outside of the 118 * checks by asserting !test_status.report_found at the start of 119 * KUNIT_EXPECT_KASAN_RESULT and in kasan_test_exit. 120 */ 121 #define KUNIT_EXPECT_KASAN_RESULT(test, expr, expr_str, fail) \ 122 do { \ 123 if (IS_ENABLED(CONFIG_KASAN_HW_TAGS) && \ 124 kasan_sync_fault_possible()) \ 125 migrate_disable(); \ 126 KUNIT_EXPECT_FALSE(test, READ_ONCE(test_status.report_found)); \ 127 barrier(); \ 128 expr; \ 129 barrier(); \ 130 if (kasan_async_fault_possible()) \ 131 kasan_force_async_fault(); \ 132 if (READ_ONCE(test_status.report_found) != fail) { \ 133 KUNIT_FAIL(test, KUNIT_SUBTEST_INDENT "KASAN failure" \ 134 "%sexpected in \"" expr_str \ 135 "\", but %soccurred", \ 136 (fail ? " " : " not "), \ 137 (test_status.report_found ? \ 138 "" : "none ")); \ 139 } \ 140 if (IS_ENABLED(CONFIG_KASAN_HW_TAGS) && \ 141 kasan_sync_fault_possible()) { \ 142 if (READ_ONCE(test_status.report_found) && \ 143 !READ_ONCE(test_status.async_fault)) \ 144 kasan_enable_hw_tags(); \ 145 migrate_enable(); \ 146 } \ 147 WRITE_ONCE(test_status.report_found, false); \ 148 WRITE_ONCE(test_status.async_fault, false); \ 149 } while (0) 150 151 /* 152 * KUNIT_EXPECT_KASAN_FAIL - check that the executed expression produces a 153 * KASAN report; causes a KUnit test failure otherwise. 154 * 155 * @test: Currently executing KUnit test. 156 * @expr: Expression that must produce a KASAN report. 157 */ 158 #define KUNIT_EXPECT_KASAN_FAIL(test, expr) \ 159 KUNIT_EXPECT_KASAN_RESULT(test, expr, #expr, true) 160 161 /* 162 * KUNIT_EXPECT_KASAN_FAIL_READ - check that the executed expression 163 * produces a KASAN report when the write-only mode is not enabled; 164 * causes a KUnit test failure otherwise. 165 * 166 * Note: At the moment, this macro does not check whether the produced 167 * KASAN report is a report about a bad read access. It is only intended 168 * for checking the write-only KASAN mode functionality without failing 169 * KASAN tests. 170 * 171 * @test: Currently executing KUnit test. 172 * @expr: Expression that must only produce a KASAN report 173 * when the write-only mode is not enabled. 174 */ 175 #define KUNIT_EXPECT_KASAN_FAIL_READ(test, expr) \ 176 KUNIT_EXPECT_KASAN_RESULT(test, expr, #expr, \ 177 !kasan_write_only_enabled()) \ 178 179 #define KASAN_TEST_NEEDS_CONFIG_ON(test, config) do { \ 180 if (!IS_ENABLED(config)) \ 181 kunit_skip((test), "Test requires " #config "=y"); \ 182 } while (0) 183 184 #define KASAN_TEST_NEEDS_CONFIG_OFF(test, config) do { \ 185 if (IS_ENABLED(config)) \ 186 kunit_skip((test), "Test requires " #config "=n"); \ 187 } while (0) 188 189 #define KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test) do { \ 190 if (IS_ENABLED(CONFIG_KASAN_HW_TAGS)) \ 191 break; /* No compiler instrumentation. */ \ 192 if (IS_ENABLED(CONFIG_CC_HAS_KASAN_MEMINTRINSIC_PREFIX)) \ 193 break; /* Should always be instrumented! */ \ 194 if (IS_ENABLED(CONFIG_GENERIC_ENTRY)) \ 195 kunit_skip((test), "Test requires checked mem*()"); \ 196 } while (0) 197 198 static void kmalloc_oob_right(struct kunit *test) 199 { 200 char *ptr; 201 size_t size = 128 - KASAN_GRANULE_SIZE - 5; 202 203 ptr = kmalloc(size, GFP_KERNEL); 204 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 205 206 OPTIMIZER_HIDE_VAR(ptr); 207 /* 208 * An unaligned access past the requested kmalloc size. 209 * Only generic KASAN can precisely detect these. 210 */ 211 if (IS_ENABLED(CONFIG_KASAN_GENERIC)) 212 KUNIT_EXPECT_KASAN_FAIL(test, ptr[size] = 'x'); 213 214 /* 215 * An aligned access into the first out-of-bounds granule that falls 216 * within the aligned kmalloc object. 217 */ 218 KUNIT_EXPECT_KASAN_FAIL(test, ptr[size + 5] = 'y'); 219 220 /* Out-of-bounds access past the aligned kmalloc object. */ 221 KUNIT_EXPECT_KASAN_FAIL_READ(test, ptr[0] = 222 ptr[size + KASAN_GRANULE_SIZE + 5]); 223 224 kfree(ptr); 225 } 226 227 static void kmalloc_oob_left(struct kunit *test) 228 { 229 char *ptr; 230 size_t size = 15; 231 232 ptr = kmalloc(size, GFP_KERNEL); 233 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 234 235 OPTIMIZER_HIDE_VAR(ptr); 236 KUNIT_EXPECT_KASAN_FAIL_READ(test, *ptr = *(ptr - 1)); 237 kfree(ptr); 238 } 239 240 static void kmalloc_node_oob_right(struct kunit *test) 241 { 242 char *ptr; 243 size_t size = 4096; 244 245 ptr = kmalloc_node(size, GFP_KERNEL, 0); 246 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 247 248 OPTIMIZER_HIDE_VAR(ptr); 249 KUNIT_EXPECT_KASAN_FAIL_READ(test, ptr[0] = ptr[size]); 250 kfree(ptr); 251 } 252 253 static void kmalloc_track_caller_oob_right(struct kunit *test) 254 { 255 char *ptr; 256 size_t size = 128 - KASAN_GRANULE_SIZE; 257 258 /* 259 * Check that KASAN detects out-of-bounds access for object allocated via 260 * kmalloc_track_caller(). 261 */ 262 ptr = kmalloc_track_caller(size, GFP_KERNEL); 263 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 264 265 OPTIMIZER_HIDE_VAR(ptr); 266 KUNIT_EXPECT_KASAN_FAIL(test, ptr[size] = 'y'); 267 268 kfree(ptr); 269 270 /* 271 * Check that KASAN detects out-of-bounds access for object allocated via 272 * kmalloc_node_track_caller(). 273 */ 274 ptr = kmalloc_node_track_caller(size, GFP_KERNEL, 0); 275 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 276 277 OPTIMIZER_HIDE_VAR(ptr); 278 KUNIT_EXPECT_KASAN_FAIL(test, ptr[size] = 'y'); 279 280 kfree(ptr); 281 } 282 283 /* 284 * Check that KASAN detects an out-of-bounds access for a big object allocated 285 * via kmalloc(). But not as big as to trigger the page_alloc fallback. 286 */ 287 static void kmalloc_big_oob_right(struct kunit *test) 288 { 289 char *ptr; 290 size_t size = KMALLOC_MAX_CACHE_SIZE - 256; 291 292 ptr = kmalloc(size, GFP_KERNEL); 293 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 294 295 OPTIMIZER_HIDE_VAR(ptr); 296 KUNIT_EXPECT_KASAN_FAIL(test, ptr[size] = 0); 297 kfree(ptr); 298 } 299 300 /* 301 * The kmalloc_large_* tests below use kmalloc() to allocate a memory chunk 302 * that does not fit into the largest slab cache and therefore is allocated via 303 * the page_alloc fallback. 304 */ 305 306 static void kmalloc_large_oob_right(struct kunit *test) 307 { 308 char *ptr; 309 size_t size = KMALLOC_MAX_CACHE_SIZE + 10; 310 311 ptr = kmalloc(size, GFP_KERNEL); 312 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 313 314 OPTIMIZER_HIDE_VAR(ptr); 315 KUNIT_EXPECT_KASAN_FAIL(test, ptr[size + OOB_TAG_OFF] = 0); 316 317 kfree(ptr); 318 } 319 320 static void kmalloc_large_uaf(struct kunit *test) 321 { 322 char *ptr; 323 size_t size = KMALLOC_MAX_CACHE_SIZE + 10; 324 325 ptr = kmalloc(size, GFP_KERNEL); 326 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 327 kfree(ptr); 328 329 KUNIT_EXPECT_KASAN_FAIL_READ(test, ((volatile char *)ptr)[0]); 330 } 331 332 static void kmalloc_large_invalid_free(struct kunit *test) 333 { 334 char *ptr; 335 size_t size = KMALLOC_MAX_CACHE_SIZE + 10; 336 337 ptr = kmalloc(size, GFP_KERNEL); 338 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 339 340 KUNIT_EXPECT_KASAN_FAIL(test, kfree(ptr + 1)); 341 } 342 343 static void page_alloc_oob_right(struct kunit *test) 344 { 345 char *ptr; 346 struct page *pages; 347 size_t order = 4; 348 size_t size = (1UL << (PAGE_SHIFT + order)); 349 350 /* 351 * With generic KASAN page allocations have no redzones, thus 352 * out-of-bounds detection is not guaranteed. 353 * See https://bugzilla.kernel.org/show_bug.cgi?id=210503. 354 */ 355 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_GENERIC); 356 357 pages = alloc_pages(GFP_KERNEL, order); 358 ptr = page_address(pages); 359 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 360 361 KUNIT_EXPECT_KASAN_FAIL_READ(test, ptr[0] = ptr[size]); 362 free_pages((unsigned long)ptr, order); 363 } 364 365 static void page_alloc_uaf(struct kunit *test) 366 { 367 char *ptr; 368 struct page *pages; 369 size_t order = 4; 370 371 pages = alloc_pages(GFP_KERNEL, order); 372 ptr = page_address(pages); 373 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 374 free_pages((unsigned long)ptr, order); 375 376 KUNIT_EXPECT_KASAN_FAIL_READ(test, ((volatile char *)ptr)[0]); 377 } 378 379 static void krealloc_more_oob_helper(struct kunit *test, 380 size_t size1, size_t size2) 381 { 382 char *ptr1, *ptr2; 383 size_t middle; 384 385 KUNIT_ASSERT_LT(test, size1, size2); 386 middle = size1 + (size2 - size1) / 2; 387 388 ptr1 = kmalloc(size1, GFP_KERNEL); 389 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1); 390 391 ptr2 = krealloc(ptr1, size2, GFP_KERNEL); 392 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr2); 393 394 /* Suppress -Warray-bounds warnings. */ 395 OPTIMIZER_HIDE_VAR(ptr2); 396 397 /* All offsets up to size2 must be accessible. */ 398 ptr2[size1 - 1] = 'x'; 399 ptr2[size1] = 'x'; 400 ptr2[middle] = 'x'; 401 ptr2[size2 - 1] = 'x'; 402 403 /* Generic mode is precise, so unaligned size2 must be inaccessible. */ 404 if (IS_ENABLED(CONFIG_KASAN_GENERIC)) 405 KUNIT_EXPECT_KASAN_FAIL(test, ptr2[size2] = 'x'); 406 407 /* For all modes first aligned offset after size2 must be inaccessible. */ 408 KUNIT_EXPECT_KASAN_FAIL(test, 409 ptr2[round_up(size2, KASAN_GRANULE_SIZE)] = 'x'); 410 411 kfree(ptr2); 412 } 413 414 static void krealloc_less_oob_helper(struct kunit *test, 415 size_t size1, size_t size2) 416 { 417 char *ptr1, *ptr2; 418 size_t middle; 419 420 KUNIT_ASSERT_LT(test, size2, size1); 421 middle = size2 + (size1 - size2) / 2; 422 423 ptr1 = kmalloc(size1, GFP_KERNEL); 424 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1); 425 426 ptr2 = krealloc(ptr1, size2, GFP_KERNEL); 427 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr2); 428 429 /* Suppress -Warray-bounds warnings. */ 430 OPTIMIZER_HIDE_VAR(ptr2); 431 432 /* Must be accessible for all modes. */ 433 ptr2[size2 - 1] = 'x'; 434 435 /* Generic mode is precise, so unaligned size2 must be inaccessible. */ 436 if (IS_ENABLED(CONFIG_KASAN_GENERIC)) 437 KUNIT_EXPECT_KASAN_FAIL(test, ptr2[size2] = 'x'); 438 439 /* For all modes first aligned offset after size2 must be inaccessible. */ 440 KUNIT_EXPECT_KASAN_FAIL(test, 441 ptr2[round_up(size2, KASAN_GRANULE_SIZE)] = 'x'); 442 443 /* 444 * For all modes all size2, middle, and size1 should land in separate 445 * granules and thus the latter two offsets should be inaccessible. 446 */ 447 KUNIT_EXPECT_LE(test, round_up(size2, KASAN_GRANULE_SIZE), 448 round_down(middle, KASAN_GRANULE_SIZE)); 449 KUNIT_EXPECT_LE(test, round_up(middle, KASAN_GRANULE_SIZE), 450 round_down(size1, KASAN_GRANULE_SIZE)); 451 KUNIT_EXPECT_KASAN_FAIL(test, ptr2[middle] = 'x'); 452 KUNIT_EXPECT_KASAN_FAIL(test, ptr2[size1 - 1] = 'x'); 453 KUNIT_EXPECT_KASAN_FAIL(test, ptr2[size1] = 'x'); 454 455 kfree(ptr2); 456 } 457 458 static void krealloc_more_oob(struct kunit *test) 459 { 460 krealloc_more_oob_helper(test, 201, 235); 461 } 462 463 static void krealloc_less_oob(struct kunit *test) 464 { 465 krealloc_less_oob_helper(test, 235, 201); 466 } 467 468 static void krealloc_large_more_oob(struct kunit *test) 469 { 470 krealloc_more_oob_helper(test, KMALLOC_MAX_CACHE_SIZE + 201, 471 KMALLOC_MAX_CACHE_SIZE + 235); 472 } 473 474 static void krealloc_large_less_oob(struct kunit *test) 475 { 476 krealloc_less_oob_helper(test, KMALLOC_MAX_CACHE_SIZE + 235, 477 KMALLOC_MAX_CACHE_SIZE + 201); 478 } 479 480 /* 481 * Check that krealloc() detects a use-after-free, returns NULL, 482 * and doesn't unpoison the freed object. 483 */ 484 static void krealloc_uaf(struct kunit *test) 485 { 486 char *ptr1, *ptr2; 487 int size1 = 201; 488 int size2 = 235; 489 490 ptr1 = kmalloc(size1, GFP_KERNEL); 491 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1); 492 kfree(ptr1); 493 494 KUNIT_EXPECT_KASAN_FAIL(test, ptr2 = krealloc(ptr1, size2, GFP_KERNEL)); 495 KUNIT_ASSERT_NULL(test, ptr2); 496 KUNIT_EXPECT_KASAN_FAIL_READ(test, *(volatile char *)ptr1); 497 } 498 499 static void kmalloc_oob_16(struct kunit *test) 500 { 501 struct { 502 u64 words[2]; 503 } *ptr1, *ptr2; 504 505 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); 506 507 /* This test is specifically crafted for the generic mode. */ 508 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_GENERIC); 509 510 /* RELOC_HIDE to prevent gcc from warning about short alloc */ 511 ptr1 = RELOC_HIDE(kmalloc(sizeof(*ptr1) - 3, GFP_KERNEL), 0); 512 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1); 513 514 ptr2 = kmalloc(sizeof(*ptr2), GFP_KERNEL); 515 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr2); 516 517 OPTIMIZER_HIDE_VAR(ptr1); 518 OPTIMIZER_HIDE_VAR(ptr2); 519 KUNIT_EXPECT_KASAN_FAIL(test, *ptr1 = *ptr2); 520 kfree(ptr1); 521 kfree(ptr2); 522 } 523 524 static void kmalloc_uaf_16(struct kunit *test) 525 { 526 struct { 527 u64 words[2]; 528 } *ptr1, *ptr2; 529 530 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); 531 532 ptr1 = kmalloc(sizeof(*ptr1), GFP_KERNEL); 533 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1); 534 535 ptr2 = kmalloc(sizeof(*ptr2), GFP_KERNEL); 536 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr2); 537 kfree(ptr2); 538 539 KUNIT_EXPECT_KASAN_FAIL_READ(test, *ptr1 = *ptr2); 540 kfree(ptr1); 541 } 542 543 /* 544 * Note: in the memset tests below, the written range touches both valid and 545 * invalid memory. This makes sure that the instrumentation does not only check 546 * the starting address but the whole range. 547 */ 548 549 static void kmalloc_oob_memset_2(struct kunit *test) 550 { 551 char *ptr; 552 size_t size = 128 - KASAN_GRANULE_SIZE; 553 size_t memset_size = 2; 554 555 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); 556 557 ptr = kmalloc(size, GFP_KERNEL); 558 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 559 560 OPTIMIZER_HIDE_VAR(ptr); 561 OPTIMIZER_HIDE_VAR(size); 562 OPTIMIZER_HIDE_VAR(memset_size); 563 KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr + size - 1, 0, memset_size)); 564 kfree(ptr); 565 } 566 567 static void kmalloc_oob_memset_4(struct kunit *test) 568 { 569 char *ptr; 570 size_t size = 128 - KASAN_GRANULE_SIZE; 571 size_t memset_size = 4; 572 573 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); 574 575 ptr = kmalloc(size, GFP_KERNEL); 576 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 577 578 OPTIMIZER_HIDE_VAR(ptr); 579 OPTIMIZER_HIDE_VAR(size); 580 OPTIMIZER_HIDE_VAR(memset_size); 581 KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr + size - 3, 0, memset_size)); 582 kfree(ptr); 583 } 584 585 static void kmalloc_oob_memset_8(struct kunit *test) 586 { 587 char *ptr; 588 size_t size = 128 - KASAN_GRANULE_SIZE; 589 size_t memset_size = 8; 590 591 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); 592 593 ptr = kmalloc(size, GFP_KERNEL); 594 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 595 596 OPTIMIZER_HIDE_VAR(ptr); 597 OPTIMIZER_HIDE_VAR(size); 598 OPTIMIZER_HIDE_VAR(memset_size); 599 KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr + size - 7, 0, memset_size)); 600 kfree(ptr); 601 } 602 603 static void kmalloc_oob_memset_16(struct kunit *test) 604 { 605 char *ptr; 606 size_t size = 128 - KASAN_GRANULE_SIZE; 607 size_t memset_size = 16; 608 609 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); 610 611 ptr = kmalloc(size, GFP_KERNEL); 612 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 613 614 OPTIMIZER_HIDE_VAR(ptr); 615 OPTIMIZER_HIDE_VAR(size); 616 OPTIMIZER_HIDE_VAR(memset_size); 617 KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr + size - 15, 0, memset_size)); 618 kfree(ptr); 619 } 620 621 static void kmalloc_oob_in_memset(struct kunit *test) 622 { 623 char *ptr; 624 size_t size = 128 - KASAN_GRANULE_SIZE; 625 626 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); 627 628 ptr = kmalloc(size, GFP_KERNEL); 629 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 630 631 OPTIMIZER_HIDE_VAR(ptr); 632 OPTIMIZER_HIDE_VAR(size); 633 KUNIT_EXPECT_KASAN_FAIL(test, 634 memset(ptr, 0, size + KASAN_GRANULE_SIZE)); 635 kfree(ptr); 636 } 637 638 static void kmalloc_memmove_negative_size(struct kunit *test) 639 { 640 char *ptr; 641 size_t size = 64; 642 size_t invalid_size = -2; 643 644 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); 645 646 /* 647 * Hardware tag-based mode doesn't check memmove for negative size. 648 * As a result, this test introduces a side-effect memory corruption, 649 * which can result in a crash. 650 */ 651 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_HW_TAGS); 652 653 ptr = kmalloc(size, GFP_KERNEL); 654 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 655 656 memset((char *)ptr, 0, 64); 657 OPTIMIZER_HIDE_VAR(ptr); 658 OPTIMIZER_HIDE_VAR(invalid_size); 659 KUNIT_EXPECT_KASAN_FAIL(test, 660 memmove((char *)ptr, (char *)ptr + 4, invalid_size)); 661 kfree(ptr); 662 } 663 664 static void kmalloc_memmove_invalid_size(struct kunit *test) 665 { 666 char *ptr; 667 size_t size = 64; 668 size_t invalid_size = size; 669 670 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); 671 672 ptr = kmalloc(size, GFP_KERNEL); 673 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 674 675 memset((char *)ptr, 0, 64); 676 OPTIMIZER_HIDE_VAR(ptr); 677 OPTIMIZER_HIDE_VAR(invalid_size); 678 KUNIT_EXPECT_KASAN_FAIL_READ(test, 679 memmove((char *)ptr, (char *)ptr + 4, invalid_size)); 680 kfree(ptr); 681 } 682 683 static void kmalloc_uaf(struct kunit *test) 684 { 685 char *ptr; 686 size_t size = 10; 687 688 ptr = kmalloc(size, GFP_KERNEL); 689 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 690 691 kfree(ptr); 692 KUNIT_EXPECT_KASAN_FAIL_READ(test, ((volatile char *)ptr)[8]); 693 } 694 695 static void kmalloc_uaf_memset(struct kunit *test) 696 { 697 char *ptr; 698 size_t size = 33; 699 700 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); 701 702 /* 703 * Only generic KASAN uses quarantine, which is required to avoid a 704 * kernel memory corruption this test causes. 705 */ 706 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_GENERIC); 707 708 ptr = kmalloc(size, GFP_KERNEL); 709 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 710 711 kfree(ptr); 712 KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr, 0, size)); 713 } 714 715 static void kmalloc_uaf2(struct kunit *test) 716 { 717 char *ptr1, *ptr2; 718 size_t size = 43; 719 int counter = 0; 720 721 again: 722 ptr1 = kmalloc(size, GFP_KERNEL); 723 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1); 724 725 kfree(ptr1); 726 727 ptr2 = kmalloc(size, GFP_KERNEL); 728 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr2); 729 730 /* 731 * For tag-based KASAN ptr1 and ptr2 tags might happen to be the same. 732 * Allow up to 16 attempts at generating different tags. 733 */ 734 if (!IS_ENABLED(CONFIG_KASAN_GENERIC) && ptr1 == ptr2 && counter++ < 16) { 735 kfree(ptr2); 736 goto again; 737 } 738 739 KUNIT_EXPECT_KASAN_FAIL_READ(test, ((volatile char *)ptr1)[40]); 740 KUNIT_EXPECT_PTR_NE(test, ptr1, ptr2); 741 742 kfree(ptr2); 743 } 744 745 /* 746 * Check that KASAN detects use-after-free when another object was allocated in 747 * the same slot. Relevant for the tag-based modes, which do not use quarantine. 748 */ 749 static void kmalloc_uaf3(struct kunit *test) 750 { 751 char *ptr1, *ptr2; 752 size_t size = 100; 753 754 /* This test is specifically crafted for tag-based modes. */ 755 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_GENERIC); 756 757 ptr1 = kmalloc(size, GFP_KERNEL); 758 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1); 759 kfree(ptr1); 760 761 ptr2 = kmalloc(size, GFP_KERNEL); 762 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr2); 763 kfree(ptr2); 764 765 KUNIT_EXPECT_KASAN_FAIL_READ(test, ((volatile char *)ptr1)[8]); 766 } 767 768 static void kasan_atomics_helper(struct kunit *test, void *unsafe, void *safe) 769 { 770 int *i_unsafe = unsafe; 771 772 KUNIT_EXPECT_KASAN_FAIL_READ(test, READ_ONCE(*i_unsafe)); 773 KUNIT_EXPECT_KASAN_FAIL(test, WRITE_ONCE(*i_unsafe, 42)); 774 KUNIT_EXPECT_KASAN_FAIL_READ(test, smp_load_acquire(i_unsafe)); 775 KUNIT_EXPECT_KASAN_FAIL(test, smp_store_release(i_unsafe, 42)); 776 777 KUNIT_EXPECT_KASAN_FAIL_READ(test, atomic_read(unsafe)); 778 KUNIT_EXPECT_KASAN_FAIL(test, atomic_set(unsafe, 42)); 779 KUNIT_EXPECT_KASAN_FAIL(test, atomic_add(42, unsafe)); 780 KUNIT_EXPECT_KASAN_FAIL(test, atomic_sub(42, unsafe)); 781 KUNIT_EXPECT_KASAN_FAIL(test, atomic_inc(unsafe)); 782 KUNIT_EXPECT_KASAN_FAIL(test, atomic_dec(unsafe)); 783 KUNIT_EXPECT_KASAN_FAIL(test, atomic_and(42, unsafe)); 784 KUNIT_EXPECT_KASAN_FAIL(test, atomic_andnot(42, unsafe)); 785 KUNIT_EXPECT_KASAN_FAIL(test, atomic_or(42, unsafe)); 786 KUNIT_EXPECT_KASAN_FAIL(test, atomic_xor(42, unsafe)); 787 KUNIT_EXPECT_KASAN_FAIL(test, atomic_xchg(unsafe, 42)); 788 KUNIT_EXPECT_KASAN_FAIL(test, atomic_cmpxchg(unsafe, 21, 42)); 789 KUNIT_EXPECT_KASAN_FAIL(test, atomic_try_cmpxchg(unsafe, safe, 42)); 790 /* 791 * The result of the test below may vary due to garbage values of 792 * unsafe in write-only mode. 793 * Therefore, skip this test when KASAN is configured in write-only mode. 794 */ 795 if (!kasan_write_only_enabled()) 796 KUNIT_EXPECT_KASAN_FAIL(test, atomic_try_cmpxchg(safe, unsafe, 42)); 797 KUNIT_EXPECT_KASAN_FAIL(test, atomic_sub_and_test(42, unsafe)); 798 KUNIT_EXPECT_KASAN_FAIL(test, atomic_dec_and_test(unsafe)); 799 KUNIT_EXPECT_KASAN_FAIL(test, atomic_inc_and_test(unsafe)); 800 KUNIT_EXPECT_KASAN_FAIL(test, atomic_add_negative(42, unsafe)); 801 /* 802 * The result of the test below may vary due to garbage values of 803 * unsafe in write-only mode. 804 * Therefore, skip this test when KASAN is configured in write-only mode. 805 */ 806 if (!kasan_write_only_enabled()) { 807 KUNIT_EXPECT_KASAN_FAIL(test, atomic_add_unless(unsafe, 21, 42)); 808 KUNIT_EXPECT_KASAN_FAIL(test, atomic_inc_not_zero(unsafe)); 809 KUNIT_EXPECT_KASAN_FAIL(test, atomic_inc_unless_negative(unsafe)); 810 KUNIT_EXPECT_KASAN_FAIL(test, atomic_dec_unless_positive(unsafe)); 811 KUNIT_EXPECT_KASAN_FAIL(test, atomic_dec_if_positive(unsafe)); 812 } 813 814 KUNIT_EXPECT_KASAN_FAIL_READ(test, atomic_long_read(unsafe)); 815 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_set(unsafe, 42)); 816 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_add(42, unsafe)); 817 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_sub(42, unsafe)); 818 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_inc(unsafe)); 819 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_dec(unsafe)); 820 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_and(42, unsafe)); 821 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_andnot(42, unsafe)); 822 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_or(42, unsafe)); 823 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_xor(42, unsafe)); 824 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_xchg(unsafe, 42)); 825 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_cmpxchg(unsafe, 21, 42)); 826 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_try_cmpxchg(unsafe, safe, 42)); 827 /* 828 * The result of the test below may vary due to garbage values of 829 * unsafe in write-only mode. 830 * Therefore, skip this test when KASAN is configured in write-only mode. 831 */ 832 if (!kasan_write_only_enabled()) 833 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_try_cmpxchg(safe, unsafe, 42)); 834 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_sub_and_test(42, unsafe)); 835 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_dec_and_test(unsafe)); 836 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_inc_and_test(unsafe)); 837 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_add_negative(42, unsafe)); 838 /* 839 * The result of the test below may vary due to garbage values of 840 * unsafe in write-only mode. 841 * Therefore, skip this test when KASAN is configured in write-only mode. 842 */ 843 if (!kasan_write_only_enabled()) { 844 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_add_unless(unsafe, 21, 42)); 845 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_inc_not_zero(unsafe)); 846 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_inc_unless_negative(unsafe)); 847 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_dec_unless_positive(unsafe)); 848 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_dec_if_positive(unsafe)); 849 } 850 } 851 852 static void kasan_atomics(struct kunit *test) 853 { 854 void *a1, *a2; 855 856 /* 857 * Just as with kasan_bitops_tags(), we allocate 48 bytes of memory such 858 * that the following 16 bytes will make up the redzone. 859 */ 860 a1 = kzalloc(48, GFP_KERNEL); 861 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, a1); 862 a2 = kzalloc(sizeof(atomic_long_t), GFP_KERNEL); 863 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, a2); 864 865 /* Use atomics to access the redzone. */ 866 kasan_atomics_helper(test, a1 + 48, a2); 867 868 kfree(a1); 869 kfree(a2); 870 } 871 872 static void kmalloc_double_kzfree(struct kunit *test) 873 { 874 char *ptr; 875 size_t size = 16; 876 877 ptr = kmalloc(size, GFP_KERNEL); 878 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 879 880 kfree_sensitive(ptr); 881 KUNIT_EXPECT_KASAN_FAIL(test, kfree_sensitive(ptr)); 882 } 883 884 /* Check that ksize() does NOT unpoison whole object. */ 885 static void ksize_unpoisons_memory(struct kunit *test) 886 { 887 char *ptr; 888 size_t size = 128 - KASAN_GRANULE_SIZE - 5; 889 size_t real_size; 890 891 ptr = kmalloc(size, GFP_KERNEL); 892 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 893 894 real_size = ksize(ptr); 895 KUNIT_EXPECT_GT(test, real_size, size); 896 897 OPTIMIZER_HIDE_VAR(ptr); 898 899 /* These accesses shouldn't trigger a KASAN report. */ 900 ptr[0] = 'x'; 901 ptr[size - 1] = 'x'; 902 903 /* These must trigger a KASAN report. */ 904 if (IS_ENABLED(CONFIG_KASAN_GENERIC)) 905 KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[size]); 906 KUNIT_EXPECT_KASAN_FAIL_READ(test, ((volatile char *)ptr)[size + 5]); 907 KUNIT_EXPECT_KASAN_FAIL_READ(test, ((volatile char *)ptr)[real_size - 1]); 908 909 kfree(ptr); 910 } 911 912 /* 913 * Check that a use-after-free is detected by ksize() and via normal accesses 914 * after it. 915 */ 916 static void ksize_uaf(struct kunit *test) 917 { 918 char *ptr; 919 int size = 128 - KASAN_GRANULE_SIZE; 920 921 ptr = kmalloc(size, GFP_KERNEL); 922 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 923 kfree(ptr); 924 925 OPTIMIZER_HIDE_VAR(ptr); 926 KUNIT_EXPECT_KASAN_FAIL(test, ksize(ptr)); 927 KUNIT_EXPECT_KASAN_FAIL_READ(test, ((volatile char *)ptr)[0]); 928 KUNIT_EXPECT_KASAN_FAIL_READ(test, ((volatile char *)ptr)[size]); 929 } 930 931 /* 932 * The two tests below check that Generic KASAN prints auxiliary stack traces 933 * for RCU callbacks and workqueues. The reports need to be inspected manually. 934 * 935 * These tests are still enabled for other KASAN modes to make sure that all 936 * modes report bad accesses in tested scenarios. 937 */ 938 939 static struct kasan_rcu_info { 940 int i; 941 struct rcu_head rcu; 942 } *global_rcu_ptr; 943 944 static void rcu_uaf_reclaim(struct rcu_head *rp) 945 { 946 struct kasan_rcu_info *fp = 947 container_of(rp, struct kasan_rcu_info, rcu); 948 949 kfree(fp); 950 ((volatile struct kasan_rcu_info *)fp)->i; 951 } 952 953 static void rcu_uaf(struct kunit *test) 954 { 955 struct kasan_rcu_info *ptr; 956 957 ptr = kmalloc(sizeof(struct kasan_rcu_info), GFP_KERNEL); 958 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 959 960 global_rcu_ptr = rcu_dereference_protected( 961 (struct kasan_rcu_info __rcu *)ptr, NULL); 962 963 KUNIT_EXPECT_KASAN_FAIL_READ(test, 964 call_rcu(&global_rcu_ptr->rcu, rcu_uaf_reclaim); 965 rcu_barrier()); 966 } 967 968 static void workqueue_uaf_work(struct work_struct *work) 969 { 970 kfree(work); 971 } 972 973 static void workqueue_uaf(struct kunit *test) 974 { 975 struct workqueue_struct *workqueue; 976 struct work_struct *work; 977 978 workqueue = create_workqueue("kasan_workqueue_test"); 979 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, workqueue); 980 981 work = kmalloc(sizeof(struct work_struct), GFP_KERNEL); 982 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, work); 983 984 INIT_WORK(work, workqueue_uaf_work); 985 queue_work(workqueue, work); 986 destroy_workqueue(workqueue); 987 988 KUNIT_EXPECT_KASAN_FAIL_READ(test, 989 ((volatile struct work_struct *)work)->data); 990 } 991 992 static void kfree_via_page(struct kunit *test) 993 { 994 char *ptr; 995 size_t size = 8; 996 struct page *page; 997 unsigned long offset; 998 999 ptr = kmalloc(size, GFP_KERNEL); 1000 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 1001 1002 page = virt_to_page(ptr); 1003 offset = offset_in_page(ptr); 1004 kfree(page_address(page) + offset); 1005 } 1006 1007 static void kfree_via_phys(struct kunit *test) 1008 { 1009 char *ptr; 1010 size_t size = 8; 1011 phys_addr_t phys; 1012 1013 ptr = kmalloc(size, GFP_KERNEL); 1014 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 1015 1016 phys = virt_to_phys(ptr); 1017 kfree(phys_to_virt(phys)); 1018 } 1019 1020 static void kmem_cache_oob(struct kunit *test) 1021 { 1022 char *p; 1023 size_t size = 200; 1024 struct kmem_cache *cache; 1025 1026 cache = kmem_cache_create("test_cache", size, 0, 0, NULL); 1027 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); 1028 1029 p = kmem_cache_alloc(cache, GFP_KERNEL); 1030 if (!p) { 1031 kunit_err(test, "Allocation failed: %s\n", __func__); 1032 kmem_cache_destroy(cache); 1033 return; 1034 } 1035 1036 KUNIT_EXPECT_KASAN_FAIL_READ(test, *p = p[size + OOB_TAG_OFF]); 1037 1038 kmem_cache_free(cache, p); 1039 kmem_cache_destroy(cache); 1040 } 1041 1042 static void kmem_cache_double_free(struct kunit *test) 1043 { 1044 char *p; 1045 size_t size = 200; 1046 struct kmem_cache *cache; 1047 1048 cache = kmem_cache_create("test_cache", size, 0, 0, NULL); 1049 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); 1050 1051 p = kmem_cache_alloc(cache, GFP_KERNEL); 1052 if (!p) { 1053 kunit_err(test, "Allocation failed: %s\n", __func__); 1054 kmem_cache_destroy(cache); 1055 return; 1056 } 1057 1058 kmem_cache_free(cache, p); 1059 KUNIT_EXPECT_KASAN_FAIL(test, kmem_cache_free(cache, p)); 1060 kmem_cache_destroy(cache); 1061 } 1062 1063 static void kmem_cache_invalid_free(struct kunit *test) 1064 { 1065 char *p; 1066 size_t size = 200; 1067 struct kmem_cache *cache; 1068 1069 cache = kmem_cache_create("test_cache", size, 0, SLAB_TYPESAFE_BY_RCU, 1070 NULL); 1071 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); 1072 1073 p = kmem_cache_alloc(cache, GFP_KERNEL); 1074 if (!p) { 1075 kunit_err(test, "Allocation failed: %s\n", __func__); 1076 kmem_cache_destroy(cache); 1077 return; 1078 } 1079 1080 /* Trigger invalid free, the object doesn't get freed. */ 1081 KUNIT_EXPECT_KASAN_FAIL(test, kmem_cache_free(cache, p + 1)); 1082 1083 /* 1084 * Properly free the object to prevent the "Objects remaining in 1085 * test_cache on __kmem_cache_shutdown" BUG failure. 1086 */ 1087 kmem_cache_free(cache, p); 1088 1089 kmem_cache_destroy(cache); 1090 } 1091 1092 static void kmem_cache_rcu_uaf(struct kunit *test) 1093 { 1094 char *p; 1095 size_t size = 200; 1096 struct kmem_cache *cache; 1097 1098 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_SLUB_RCU_DEBUG); 1099 1100 cache = kmem_cache_create("test_cache", size, 0, SLAB_TYPESAFE_BY_RCU, 1101 NULL); 1102 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); 1103 1104 p = kmem_cache_alloc(cache, GFP_KERNEL); 1105 if (!p) { 1106 kunit_err(test, "Allocation failed: %s\n", __func__); 1107 kmem_cache_destroy(cache); 1108 return; 1109 } 1110 *p = 1; 1111 1112 rcu_read_lock(); 1113 1114 /* Free the object - this will internally schedule an RCU callback. */ 1115 kmem_cache_free(cache, p); 1116 1117 /* 1118 * We should still be allowed to access the object at this point because 1119 * the cache is SLAB_TYPESAFE_BY_RCU and we've been in an RCU read-side 1120 * critical section since before the kmem_cache_free(). 1121 */ 1122 READ_ONCE(*p); 1123 1124 rcu_read_unlock(); 1125 1126 /* 1127 * Wait for the RCU callback to execute; after this, the object should 1128 * have actually been freed from KASAN's perspective. 1129 */ 1130 rcu_barrier(); 1131 1132 KUNIT_EXPECT_KASAN_FAIL_READ(test, READ_ONCE(*p)); 1133 1134 kmem_cache_destroy(cache); 1135 } 1136 1137 /* 1138 * Check that SLAB_TYPESAFE_BY_RCU objects are immediately reused when 1139 * CONFIG_SLUB_RCU_DEBUG is off, and stay at the same address. 1140 * Without this, KASAN builds would be unable to trigger bugs caused by 1141 * SLAB_TYPESAFE_BY_RCU users handling reycled objects improperly. 1142 */ 1143 static void kmem_cache_rcu_reuse(struct kunit *test) 1144 { 1145 char *p, *p2; 1146 struct kmem_cache *cache; 1147 1148 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_SLUB_RCU_DEBUG); 1149 1150 cache = kmem_cache_create("test_cache", 16, 0, SLAB_TYPESAFE_BY_RCU, 1151 NULL); 1152 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); 1153 1154 migrate_disable(); 1155 p = kmem_cache_alloc(cache, GFP_KERNEL); 1156 if (!p) { 1157 kunit_err(test, "Allocation failed: %s\n", __func__); 1158 goto out; 1159 } 1160 1161 kmem_cache_free(cache, p); 1162 p2 = kmem_cache_alloc(cache, GFP_KERNEL); 1163 if (!p2) { 1164 kunit_err(test, "Allocation failed: %s\n", __func__); 1165 goto out; 1166 } 1167 KUNIT_EXPECT_PTR_EQ(test, p, p2); 1168 1169 kmem_cache_free(cache, p2); 1170 1171 out: 1172 migrate_enable(); 1173 kmem_cache_destroy(cache); 1174 } 1175 1176 static void kmem_cache_double_destroy(struct kunit *test) 1177 { 1178 struct kmem_cache *cache; 1179 1180 cache = kmem_cache_create("test_cache", 200, 0, SLAB_NO_MERGE, NULL); 1181 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); 1182 kmem_cache_destroy(cache); 1183 KUNIT_EXPECT_KASAN_FAIL(test, kmem_cache_destroy(cache)); 1184 } 1185 1186 static void kmem_cache_accounted(struct kunit *test) 1187 { 1188 int i; 1189 char *p; 1190 size_t size = 200; 1191 struct kmem_cache *cache; 1192 1193 cache = kmem_cache_create("test_cache", size, 0, SLAB_ACCOUNT, NULL); 1194 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); 1195 1196 /* 1197 * Several allocations with a delay to allow for lazy per memcg kmem 1198 * cache creation. 1199 */ 1200 for (i = 0; i < 5; i++) { 1201 p = kmem_cache_alloc(cache, GFP_KERNEL); 1202 if (!p) 1203 goto free_cache; 1204 1205 kmem_cache_free(cache, p); 1206 msleep(100); 1207 } 1208 1209 free_cache: 1210 kmem_cache_destroy(cache); 1211 } 1212 1213 static void kmem_cache_bulk(struct kunit *test) 1214 { 1215 struct kmem_cache *cache; 1216 size_t size = 200; 1217 char *p[10]; 1218 bool ret; 1219 int i; 1220 1221 cache = kmem_cache_create("test_cache", size, 0, 0, NULL); 1222 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); 1223 1224 ret = kmem_cache_alloc_bulk(cache, GFP_KERNEL, ARRAY_SIZE(p), (void **)&p); 1225 if (!ret) { 1226 kunit_err(test, "Allocation failed: %s\n", __func__); 1227 kmem_cache_destroy(cache); 1228 return; 1229 } 1230 1231 for (i = 0; i < ARRAY_SIZE(p); i++) 1232 p[i][0] = p[i][size - 1] = 42; 1233 1234 kmem_cache_free_bulk(cache, ARRAY_SIZE(p), (void **)&p); 1235 kmem_cache_destroy(cache); 1236 } 1237 1238 static void *mempool_prepare_kmalloc(struct kunit *test, mempool_t *pool, size_t size) 1239 { 1240 int pool_size = 4; 1241 int ret; 1242 void *elem; 1243 1244 memset(pool, 0, sizeof(*pool)); 1245 ret = mempool_init_kmalloc_pool(pool, pool_size, size); 1246 KUNIT_ASSERT_EQ(test, ret, 0); 1247 1248 /* 1249 * Allocate one element to prevent mempool from freeing elements to the 1250 * underlying allocator and instead make it add them to the element 1251 * list when the tests trigger double-free and invalid-free bugs. 1252 * This allows testing KASAN annotations in add_element(). 1253 */ 1254 elem = mempool_alloc_preallocated(pool); 1255 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, elem); 1256 1257 return elem; 1258 } 1259 1260 static struct kmem_cache *mempool_prepare_slab(struct kunit *test, mempool_t *pool, size_t size) 1261 { 1262 struct kmem_cache *cache; 1263 int pool_size = 4; 1264 int ret; 1265 1266 cache = kmem_cache_create("test_cache", size, 0, 0, NULL); 1267 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); 1268 1269 memset(pool, 0, sizeof(*pool)); 1270 ret = mempool_init_slab_pool(pool, pool_size, cache); 1271 KUNIT_ASSERT_EQ(test, ret, 0); 1272 1273 /* 1274 * Do not allocate one preallocated element, as we skip the double-free 1275 * and invalid-free tests for slab mempool for simplicity. 1276 */ 1277 1278 return cache; 1279 } 1280 1281 static void *mempool_prepare_page(struct kunit *test, mempool_t *pool, int order) 1282 { 1283 int pool_size = 4; 1284 int ret; 1285 void *elem; 1286 1287 memset(pool, 0, sizeof(*pool)); 1288 ret = mempool_init_page_pool(pool, pool_size, order); 1289 KUNIT_ASSERT_EQ(test, ret, 0); 1290 1291 elem = mempool_alloc_preallocated(pool); 1292 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, elem); 1293 1294 return elem; 1295 } 1296 1297 static void mempool_oob_right_helper(struct kunit *test, mempool_t *pool, size_t size) 1298 { 1299 char *elem; 1300 1301 elem = mempool_alloc_preallocated(pool); 1302 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, elem); 1303 1304 OPTIMIZER_HIDE_VAR(elem); 1305 1306 if (IS_ENABLED(CONFIG_KASAN_GENERIC)) 1307 KUNIT_EXPECT_KASAN_FAIL(test, 1308 ((volatile char *)&elem[size])[0]); 1309 else 1310 KUNIT_EXPECT_KASAN_FAIL_READ(test, 1311 ((volatile char *)&elem[round_up(size, KASAN_GRANULE_SIZE)])[0]); 1312 1313 mempool_free(elem, pool); 1314 } 1315 1316 static void mempool_kmalloc_oob_right(struct kunit *test) 1317 { 1318 mempool_t pool; 1319 size_t size = 128 - KASAN_GRANULE_SIZE - 5; 1320 void *extra_elem; 1321 1322 extra_elem = mempool_prepare_kmalloc(test, &pool, size); 1323 1324 mempool_oob_right_helper(test, &pool, size); 1325 1326 mempool_free(extra_elem, &pool); 1327 mempool_exit(&pool); 1328 } 1329 1330 static void mempool_kmalloc_large_oob_right(struct kunit *test) 1331 { 1332 mempool_t pool; 1333 size_t size = KMALLOC_MAX_CACHE_SIZE + 1; 1334 void *extra_elem; 1335 1336 extra_elem = mempool_prepare_kmalloc(test, &pool, size); 1337 1338 mempool_oob_right_helper(test, &pool, size); 1339 1340 mempool_free(extra_elem, &pool); 1341 mempool_exit(&pool); 1342 } 1343 1344 static void mempool_slab_oob_right(struct kunit *test) 1345 { 1346 mempool_t pool; 1347 size_t size = 123; 1348 struct kmem_cache *cache; 1349 1350 cache = mempool_prepare_slab(test, &pool, size); 1351 1352 mempool_oob_right_helper(test, &pool, size); 1353 1354 mempool_exit(&pool); 1355 kmem_cache_destroy(cache); 1356 } 1357 1358 /* 1359 * Skip the out-of-bounds test for page mempool. With Generic KASAN, page 1360 * allocations have no redzones, and thus the out-of-bounds detection is not 1361 * guaranteed; see https://bugzilla.kernel.org/show_bug.cgi?id=210503. With 1362 * the tag-based KASAN modes, the neighboring allocation might have the same 1363 * tag; see https://bugzilla.kernel.org/show_bug.cgi?id=203505. 1364 */ 1365 1366 static void mempool_uaf_helper(struct kunit *test, mempool_t *pool, bool page) 1367 { 1368 char *elem, *ptr; 1369 1370 elem = mempool_alloc_preallocated(pool); 1371 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, elem); 1372 1373 mempool_free(elem, pool); 1374 1375 ptr = page ? page_address((struct page *)elem) : elem; 1376 KUNIT_EXPECT_KASAN_FAIL_READ(test, ((volatile char *)ptr)[0]); 1377 } 1378 1379 static void mempool_kmalloc_uaf(struct kunit *test) 1380 { 1381 mempool_t pool; 1382 size_t size = 128; 1383 void *extra_elem; 1384 1385 extra_elem = mempool_prepare_kmalloc(test, &pool, size); 1386 1387 mempool_uaf_helper(test, &pool, false); 1388 1389 mempool_free(extra_elem, &pool); 1390 mempool_exit(&pool); 1391 } 1392 1393 static void mempool_kmalloc_large_uaf(struct kunit *test) 1394 { 1395 mempool_t pool; 1396 size_t size = KMALLOC_MAX_CACHE_SIZE + 1; 1397 void *extra_elem; 1398 1399 extra_elem = mempool_prepare_kmalloc(test, &pool, size); 1400 1401 mempool_uaf_helper(test, &pool, false); 1402 1403 mempool_free(extra_elem, &pool); 1404 mempool_exit(&pool); 1405 } 1406 1407 static void mempool_slab_uaf(struct kunit *test) 1408 { 1409 mempool_t pool; 1410 size_t size = 123; 1411 struct kmem_cache *cache; 1412 1413 cache = mempool_prepare_slab(test, &pool, size); 1414 1415 mempool_uaf_helper(test, &pool, false); 1416 1417 mempool_exit(&pool); 1418 kmem_cache_destroy(cache); 1419 } 1420 1421 static void mempool_page_alloc_uaf(struct kunit *test) 1422 { 1423 mempool_t pool; 1424 int order = 2; 1425 void *extra_elem; 1426 1427 extra_elem = mempool_prepare_page(test, &pool, order); 1428 1429 mempool_uaf_helper(test, &pool, true); 1430 1431 mempool_free(extra_elem, &pool); 1432 mempool_exit(&pool); 1433 } 1434 1435 static void mempool_double_free_helper(struct kunit *test, mempool_t *pool) 1436 { 1437 char *elem; 1438 1439 elem = mempool_alloc_preallocated(pool); 1440 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, elem); 1441 1442 mempool_free(elem, pool); 1443 1444 KUNIT_EXPECT_KASAN_FAIL(test, mempool_free(elem, pool)); 1445 } 1446 1447 static void mempool_kmalloc_double_free(struct kunit *test) 1448 { 1449 mempool_t pool; 1450 size_t size = 128; 1451 char *extra_elem; 1452 1453 extra_elem = mempool_prepare_kmalloc(test, &pool, size); 1454 1455 mempool_double_free_helper(test, &pool); 1456 1457 mempool_free(extra_elem, &pool); 1458 mempool_exit(&pool); 1459 } 1460 1461 static void mempool_kmalloc_large_double_free(struct kunit *test) 1462 { 1463 mempool_t pool; 1464 size_t size = KMALLOC_MAX_CACHE_SIZE + 1; 1465 char *extra_elem; 1466 1467 extra_elem = mempool_prepare_kmalloc(test, &pool, size); 1468 1469 mempool_double_free_helper(test, &pool); 1470 1471 mempool_free(extra_elem, &pool); 1472 mempool_exit(&pool); 1473 } 1474 1475 static void mempool_page_alloc_double_free(struct kunit *test) 1476 { 1477 mempool_t pool; 1478 int order = 2; 1479 char *extra_elem; 1480 1481 extra_elem = mempool_prepare_page(test, &pool, order); 1482 1483 mempool_double_free_helper(test, &pool); 1484 1485 mempool_free(extra_elem, &pool); 1486 mempool_exit(&pool); 1487 } 1488 1489 static void mempool_kmalloc_invalid_free_helper(struct kunit *test, mempool_t *pool) 1490 { 1491 char *elem; 1492 1493 elem = mempool_alloc_preallocated(pool); 1494 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, elem); 1495 1496 KUNIT_EXPECT_KASAN_FAIL(test, mempool_free(elem + 1, pool)); 1497 1498 mempool_free(elem, pool); 1499 } 1500 1501 static void mempool_kmalloc_invalid_free(struct kunit *test) 1502 { 1503 mempool_t pool; 1504 size_t size = 128; 1505 char *extra_elem; 1506 1507 extra_elem = mempool_prepare_kmalloc(test, &pool, size); 1508 1509 mempool_kmalloc_invalid_free_helper(test, &pool); 1510 1511 mempool_free(extra_elem, &pool); 1512 mempool_exit(&pool); 1513 } 1514 1515 static void mempool_kmalloc_large_invalid_free(struct kunit *test) 1516 { 1517 mempool_t pool; 1518 size_t size = KMALLOC_MAX_CACHE_SIZE + 1; 1519 char *extra_elem; 1520 1521 extra_elem = mempool_prepare_kmalloc(test, &pool, size); 1522 1523 mempool_kmalloc_invalid_free_helper(test, &pool); 1524 1525 mempool_free(extra_elem, &pool); 1526 mempool_exit(&pool); 1527 } 1528 1529 /* 1530 * Skip the invalid-free test for page mempool. The invalid-free detection only 1531 * works for compound pages and mempool preallocates all page elements without 1532 * the __GFP_COMP flag. 1533 */ 1534 1535 static char global_array[10]; 1536 1537 static void kasan_global_oob_right(struct kunit *test) 1538 { 1539 /* 1540 * Deliberate out-of-bounds access. To prevent CONFIG_UBSAN_LOCAL_BOUNDS 1541 * from failing here and panicking the kernel, access the array via a 1542 * volatile pointer, which will prevent the compiler from being able to 1543 * determine the array bounds. 1544 * 1545 * This access uses a volatile pointer to char (char *volatile) rather 1546 * than the more conventional pointer to volatile char (volatile char *) 1547 * because we want to prevent the compiler from making inferences about 1548 * the pointer itself (i.e. its array bounds), not the data that it 1549 * refers to. 1550 */ 1551 char *volatile array = global_array; 1552 char *p = &array[ARRAY_SIZE(global_array) + 3]; 1553 1554 /* Only generic mode instruments globals. */ 1555 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_GENERIC); 1556 1557 KUNIT_EXPECT_KASAN_FAIL(test, *(volatile char *)p); 1558 } 1559 1560 static void kasan_global_oob_left(struct kunit *test) 1561 { 1562 char *volatile array = global_array; 1563 char *p = array - 3; 1564 1565 /* 1566 * GCC is known to fail this test, skip it. 1567 * See https://bugzilla.kernel.org/show_bug.cgi?id=215051. 1568 */ 1569 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_CC_IS_CLANG); 1570 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_GENERIC); 1571 KUNIT_EXPECT_KASAN_FAIL(test, *(volatile char *)p); 1572 } 1573 1574 static void kasan_stack_oob(struct kunit *test) 1575 { 1576 char stack_array[10]; 1577 /* See comment in kasan_global_oob_right. */ 1578 char *volatile array = stack_array; 1579 char *p = &array[ARRAY_SIZE(stack_array) + OOB_TAG_OFF]; 1580 1581 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_STACK); 1582 1583 KUNIT_EXPECT_KASAN_FAIL(test, *(volatile char *)p); 1584 } 1585 1586 static void kasan_alloca_oob_left(struct kunit *test) 1587 { 1588 volatile int i = 10; 1589 char alloca_array[i]; 1590 /* See comment in kasan_global_oob_right. */ 1591 char *volatile array = alloca_array; 1592 char *p = array - 1; 1593 1594 /* Only generic mode instruments dynamic allocas. */ 1595 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_GENERIC); 1596 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_STACK); 1597 1598 KUNIT_EXPECT_KASAN_FAIL(test, *(volatile char *)p); 1599 } 1600 1601 static void kasan_alloca_oob_right(struct kunit *test) 1602 { 1603 volatile int i = 10; 1604 char alloca_array[i]; 1605 /* See comment in kasan_global_oob_right. */ 1606 char *volatile array = alloca_array; 1607 char *p = array + i; 1608 1609 /* Only generic mode instruments dynamic allocas. */ 1610 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_GENERIC); 1611 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_STACK); 1612 1613 KUNIT_EXPECT_KASAN_FAIL(test, *(volatile char *)p); 1614 } 1615 1616 static void kasan_memchr(struct kunit *test) 1617 { 1618 char *ptr; 1619 size_t size = 24; 1620 1621 /* 1622 * str* functions are not instrumented with CONFIG_AMD_MEM_ENCRYPT. 1623 * See https://bugzilla.kernel.org/show_bug.cgi?id=206337 for details. 1624 */ 1625 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_AMD_MEM_ENCRYPT); 1626 1627 if (OOB_TAG_OFF) 1628 size = round_up(size, OOB_TAG_OFF); 1629 1630 ptr = kmalloc(size, GFP_KERNEL | __GFP_ZERO); 1631 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 1632 1633 OPTIMIZER_HIDE_VAR(ptr); 1634 OPTIMIZER_HIDE_VAR(size); 1635 KUNIT_EXPECT_KASAN_FAIL_READ(test, 1636 kasan_ptr_result = memchr(ptr, '1', size + 1)); 1637 1638 kfree(ptr); 1639 } 1640 1641 static void kasan_memcmp(struct kunit *test) 1642 { 1643 char *ptr; 1644 size_t size = 24; 1645 int arr[9]; 1646 1647 /* 1648 * str* functions are not instrumented with CONFIG_AMD_MEM_ENCRYPT. 1649 * See https://bugzilla.kernel.org/show_bug.cgi?id=206337 for details. 1650 */ 1651 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_AMD_MEM_ENCRYPT); 1652 1653 if (OOB_TAG_OFF) 1654 size = round_up(size, OOB_TAG_OFF); 1655 1656 ptr = kmalloc(size, GFP_KERNEL | __GFP_ZERO); 1657 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 1658 memset(arr, 0, sizeof(arr)); 1659 1660 OPTIMIZER_HIDE_VAR(ptr); 1661 OPTIMIZER_HIDE_VAR(size); 1662 KUNIT_EXPECT_KASAN_FAIL_READ(test, 1663 kasan_int_result = memcmp(ptr, arr, size+1)); 1664 kfree(ptr); 1665 } 1666 1667 static void kasan_strings(struct kunit *test) 1668 { 1669 char *ptr; 1670 char *src; 1671 size_t size = 24; 1672 1673 /* 1674 * str* functions are not instrumented with CONFIG_AMD_MEM_ENCRYPT. 1675 * See https://bugzilla.kernel.org/show_bug.cgi?id=206337 for details. 1676 */ 1677 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_AMD_MEM_ENCRYPT); 1678 1679 ptr = kmalloc(size, GFP_KERNEL | __GFP_ZERO); 1680 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 1681 OPTIMIZER_HIDE_VAR(ptr); 1682 1683 src = kmalloc(KASAN_GRANULE_SIZE, GFP_KERNEL | __GFP_ZERO); 1684 strscpy(src, "f0cacc1a0000000", KASAN_GRANULE_SIZE); 1685 OPTIMIZER_HIDE_VAR(src); 1686 1687 /* 1688 * Make sure that strscpy() does not trigger KASAN if it overreads into 1689 * poisoned memory. 1690 * 1691 * The expected size does not include the terminator '\0' 1692 * so it is (KASAN_GRANULE_SIZE - 2) == 1693 * KASAN_GRANULE_SIZE - ("initial removed character" + "\0"). 1694 */ 1695 KUNIT_EXPECT_EQ(test, KASAN_GRANULE_SIZE - 2, 1696 strscpy(ptr, src + 1, KASAN_GRANULE_SIZE)); 1697 1698 /* strscpy should fail if the first byte is unreadable. */ 1699 KUNIT_EXPECT_KASAN_FAIL_READ(test, strscpy(ptr, src + KASAN_GRANULE_SIZE, 1700 KASAN_GRANULE_SIZE)); 1701 1702 kfree(src); 1703 kfree(ptr); 1704 1705 /* 1706 * Try to cause only 1 invalid access (less spam in dmesg). 1707 * For that we need ptr to point to zeroed byte. 1708 * Skip metadata that could be stored in freed object so ptr 1709 * will likely point to zeroed byte. 1710 */ 1711 ptr += 16; 1712 KUNIT_EXPECT_KASAN_FAIL_READ(test, kasan_ptr_result = strchr(ptr, '1')); 1713 1714 KUNIT_EXPECT_KASAN_FAIL_READ(test, kasan_ptr_result = strrchr(ptr, '1')); 1715 1716 KUNIT_EXPECT_KASAN_FAIL_READ(test, kasan_int_result = strcmp(ptr, "2")); 1717 1718 KUNIT_EXPECT_KASAN_FAIL_READ(test, kasan_int_result = strncmp(ptr, "2", 1)); 1719 1720 KUNIT_EXPECT_KASAN_FAIL_READ(test, kasan_int_result = strlen(ptr)); 1721 1722 KUNIT_EXPECT_KASAN_FAIL_READ(test, kasan_int_result = strnlen(ptr, 1)); 1723 } 1724 1725 static void kasan_bitops_modify(struct kunit *test, int nr, void *addr) 1726 { 1727 KUNIT_EXPECT_KASAN_FAIL(test, set_bit(nr, addr)); 1728 KUNIT_EXPECT_KASAN_FAIL(test, __set_bit(nr, addr)); 1729 KUNIT_EXPECT_KASAN_FAIL(test, clear_bit(nr, addr)); 1730 KUNIT_EXPECT_KASAN_FAIL(test, __clear_bit(nr, addr)); 1731 KUNIT_EXPECT_KASAN_FAIL(test, clear_bit_unlock(nr, addr)); 1732 KUNIT_EXPECT_KASAN_FAIL(test, __clear_bit_unlock(nr, addr)); 1733 KUNIT_EXPECT_KASAN_FAIL(test, change_bit(nr, addr)); 1734 KUNIT_EXPECT_KASAN_FAIL(test, __change_bit(nr, addr)); 1735 } 1736 1737 static void kasan_bitops_test_and_modify(struct kunit *test, int nr, void *addr) 1738 { 1739 KUNIT_EXPECT_KASAN_FAIL(test, test_and_set_bit(nr, addr)); 1740 KUNIT_EXPECT_KASAN_FAIL(test, __test_and_set_bit(nr, addr)); 1741 /* 1742 * When KASAN is running in write-only mode, 1743 * a fault won't occur when the bit is set. 1744 * Therefore, skip the test_and_set_bit_lock test in write-only mode. 1745 */ 1746 if (!kasan_write_only_enabled()) 1747 KUNIT_EXPECT_KASAN_FAIL(test, test_and_set_bit_lock(nr, addr)); 1748 KUNIT_EXPECT_KASAN_FAIL(test, test_and_clear_bit(nr, addr)); 1749 KUNIT_EXPECT_KASAN_FAIL(test, __test_and_clear_bit(nr, addr)); 1750 KUNIT_EXPECT_KASAN_FAIL(test, test_and_change_bit(nr, addr)); 1751 KUNIT_EXPECT_KASAN_FAIL(test, __test_and_change_bit(nr, addr)); 1752 KUNIT_EXPECT_KASAN_FAIL_READ(test, kasan_int_result = test_bit(nr, addr)); 1753 if (nr < 7) 1754 KUNIT_EXPECT_KASAN_FAIL(test, kasan_int_result = 1755 xor_unlock_is_negative_byte(1 << nr, addr)); 1756 } 1757 1758 static void kasan_bitops_generic(struct kunit *test) 1759 { 1760 long *bits; 1761 1762 /* This test is specifically crafted for the generic mode. */ 1763 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_GENERIC); 1764 1765 /* 1766 * Allocate 1 more byte, which causes kzalloc to round up to 16 bytes; 1767 * this way we do not actually corrupt other memory. 1768 */ 1769 bits = kzalloc(sizeof(*bits) + 1, GFP_KERNEL); 1770 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, bits); 1771 1772 /* 1773 * Below calls try to access bit within allocated memory; however, the 1774 * below accesses are still out-of-bounds, since bitops are defined to 1775 * operate on the whole long the bit is in. 1776 */ 1777 kasan_bitops_modify(test, BITS_PER_LONG, bits); 1778 1779 /* 1780 * Below calls try to access bit beyond allocated memory. 1781 */ 1782 kasan_bitops_test_and_modify(test, BITS_PER_LONG + BITS_PER_BYTE, bits); 1783 1784 kfree(bits); 1785 } 1786 1787 static void kasan_bitops_tags(struct kunit *test) 1788 { 1789 long *bits; 1790 1791 /* This test is specifically crafted for tag-based modes. */ 1792 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_GENERIC); 1793 1794 /* kmalloc-64 cache will be used and the last 16 bytes will be the redzone. */ 1795 bits = kzalloc(48, GFP_KERNEL); 1796 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, bits); 1797 1798 /* Do the accesses past the 48 allocated bytes, but within the redone. */ 1799 kasan_bitops_modify(test, BITS_PER_LONG, (void *)bits + 48); 1800 kasan_bitops_test_and_modify(test, BITS_PER_LONG + BITS_PER_BYTE, (void *)bits + 48); 1801 1802 kfree(bits); 1803 } 1804 1805 static void vmalloc_helpers_tags(struct kunit *test) 1806 { 1807 void *ptr; 1808 1809 /* This test is intended for tag-based modes. */ 1810 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_GENERIC); 1811 1812 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_VMALLOC); 1813 1814 if (!kasan_vmalloc_enabled()) 1815 kunit_skip(test, "Test requires kasan.vmalloc=on"); 1816 1817 ptr = vmalloc(PAGE_SIZE); 1818 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 1819 1820 /* Check that the returned pointer is tagged. */ 1821 KUNIT_EXPECT_GE(test, (u8)get_tag(ptr), (u8)KASAN_TAG_MIN); 1822 KUNIT_EXPECT_LT(test, (u8)get_tag(ptr), (u8)KASAN_TAG_KERNEL); 1823 1824 /* Make sure exported vmalloc helpers handle tagged pointers. */ 1825 KUNIT_ASSERT_TRUE(test, is_vmalloc_addr(ptr)); 1826 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, vmalloc_to_page(ptr)); 1827 1828 #if !IS_MODULE(CONFIG_KASAN_KUNIT_TEST) 1829 { 1830 int rv; 1831 1832 /* Make sure vmalloc'ed memory permissions can be changed. */ 1833 rv = set_memory_ro((unsigned long)ptr, 1); 1834 KUNIT_ASSERT_GE(test, rv, 0); 1835 rv = set_memory_rw((unsigned long)ptr, 1); 1836 KUNIT_ASSERT_GE(test, rv, 0); 1837 } 1838 #endif 1839 1840 vfree(ptr); 1841 } 1842 1843 static void vmalloc_oob(struct kunit *test) 1844 { 1845 char *v_ptr, *p_ptr; 1846 struct page *page; 1847 size_t size = PAGE_SIZE / 2 - KASAN_GRANULE_SIZE - 5; 1848 1849 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_VMALLOC); 1850 1851 if (!kasan_vmalloc_enabled()) 1852 kunit_skip(test, "Test requires kasan.vmalloc=on"); 1853 1854 v_ptr = vmalloc(size); 1855 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, v_ptr); 1856 1857 OPTIMIZER_HIDE_VAR(v_ptr); 1858 1859 /* 1860 * We have to be careful not to hit the guard page in vmalloc tests. 1861 * The MMU will catch that and crash us. 1862 */ 1863 1864 /* Make sure in-bounds accesses are valid. */ 1865 v_ptr[0] = 0; 1866 v_ptr[size - 1] = 0; 1867 1868 /* 1869 * An unaligned access past the requested vmalloc size. 1870 * Only generic KASAN can precisely detect these. 1871 */ 1872 if (IS_ENABLED(CONFIG_KASAN_GENERIC)) 1873 KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)v_ptr)[size]); 1874 1875 /* An aligned access into the first out-of-bounds granule. */ 1876 KUNIT_EXPECT_KASAN_FAIL_READ(test, ((volatile char *)v_ptr)[size + 5]); 1877 1878 /* Check that in-bounds accesses to the physical page are valid. */ 1879 page = vmalloc_to_page(v_ptr); 1880 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, page); 1881 p_ptr = page_address(page); 1882 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, p_ptr); 1883 p_ptr[0] = 0; 1884 1885 vfree(v_ptr); 1886 1887 /* 1888 * We can't check for use-after-unmap bugs in this nor in the following 1889 * vmalloc tests, as the page might be fully unmapped and accessing it 1890 * will crash the kernel. 1891 */ 1892 } 1893 1894 static void vmap_tags(struct kunit *test) 1895 { 1896 char *p_ptr, *v_ptr; 1897 struct page *p_page, *v_page; 1898 1899 /* 1900 * This test is specifically crafted for the software tag-based mode, 1901 * the only tag-based mode that poisons vmap mappings. 1902 */ 1903 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_SW_TAGS); 1904 1905 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_VMALLOC); 1906 1907 if (!kasan_vmalloc_enabled()) 1908 kunit_skip(test, "Test requires kasan.vmalloc=on"); 1909 1910 p_page = alloc_pages(GFP_KERNEL, 1); 1911 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, p_page); 1912 p_ptr = page_address(p_page); 1913 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, p_ptr); 1914 1915 v_ptr = vmap(&p_page, 1, VM_MAP, PAGE_KERNEL); 1916 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, v_ptr); 1917 1918 /* 1919 * We can't check for out-of-bounds bugs in this nor in the following 1920 * vmalloc tests, as allocations have page granularity and accessing 1921 * the guard page will crash the kernel. 1922 */ 1923 1924 KUNIT_EXPECT_GE(test, (u8)get_tag(v_ptr), (u8)KASAN_TAG_MIN); 1925 KUNIT_EXPECT_LT(test, (u8)get_tag(v_ptr), (u8)KASAN_TAG_KERNEL); 1926 1927 /* Make sure that in-bounds accesses through both pointers work. */ 1928 *p_ptr = 0; 1929 *v_ptr = 0; 1930 1931 /* Make sure vmalloc_to_page() correctly recovers the page pointer. */ 1932 v_page = vmalloc_to_page(v_ptr); 1933 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, v_page); 1934 KUNIT_EXPECT_PTR_EQ(test, p_page, v_page); 1935 1936 vunmap(v_ptr); 1937 free_pages((unsigned long)p_ptr, 1); 1938 } 1939 1940 static void vm_map_ram_tags(struct kunit *test) 1941 { 1942 char *p_ptr, *v_ptr; 1943 struct page *page; 1944 1945 /* 1946 * This test is specifically crafted for the software tag-based mode, 1947 * the only tag-based mode that poisons vm_map_ram mappings. 1948 */ 1949 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_SW_TAGS); 1950 1951 page = alloc_pages(GFP_KERNEL, 1); 1952 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, page); 1953 p_ptr = page_address(page); 1954 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, p_ptr); 1955 1956 v_ptr = vm_map_ram(&page, 1, -1); 1957 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, v_ptr); 1958 1959 KUNIT_EXPECT_GE(test, (u8)get_tag(v_ptr), (u8)KASAN_TAG_MIN); 1960 KUNIT_EXPECT_LT(test, (u8)get_tag(v_ptr), (u8)KASAN_TAG_KERNEL); 1961 1962 /* Make sure that in-bounds accesses through both pointers work. */ 1963 *p_ptr = 0; 1964 *v_ptr = 0; 1965 1966 vm_unmap_ram(v_ptr, 1); 1967 free_pages((unsigned long)p_ptr, 1); 1968 } 1969 1970 /* 1971 * Check that the assigned pointer tag falls within the [KASAN_TAG_MIN, 1972 * KASAN_TAG_KERNEL) range (note: excluding the match-all tag) for tag-based 1973 * modes. 1974 */ 1975 static void match_all_not_assigned(struct kunit *test) 1976 { 1977 char *ptr; 1978 struct page *pages; 1979 int i, size, order; 1980 1981 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_GENERIC); 1982 1983 for (i = 0; i < 256; i++) { 1984 size = get_random_u32_inclusive(1, 1024); 1985 ptr = kmalloc(size, GFP_KERNEL); 1986 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 1987 KUNIT_EXPECT_GE(test, (u8)get_tag(ptr), (u8)KASAN_TAG_MIN); 1988 KUNIT_EXPECT_LT(test, (u8)get_tag(ptr), (u8)KASAN_TAG_KERNEL); 1989 kfree(ptr); 1990 } 1991 1992 for (i = 0; i < 256; i++) { 1993 order = get_random_u32_inclusive(1, 4); 1994 pages = alloc_pages(GFP_KERNEL, order); 1995 ptr = page_address(pages); 1996 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 1997 KUNIT_EXPECT_GE(test, (u8)get_tag(ptr), (u8)KASAN_TAG_MIN); 1998 KUNIT_EXPECT_LT(test, (u8)get_tag(ptr), (u8)KASAN_TAG_KERNEL); 1999 free_pages((unsigned long)ptr, order); 2000 } 2001 2002 if (!kasan_vmalloc_enabled()) 2003 return; 2004 2005 for (i = 0; i < 256; i++) { 2006 size = get_random_u32_inclusive(1, 1024); 2007 ptr = vmalloc(size); 2008 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 2009 KUNIT_EXPECT_GE(test, (u8)get_tag(ptr), (u8)KASAN_TAG_MIN); 2010 KUNIT_EXPECT_LT(test, (u8)get_tag(ptr), (u8)KASAN_TAG_KERNEL); 2011 vfree(ptr); 2012 } 2013 } 2014 2015 /* Check that 0xff works as a match-all pointer tag for tag-based modes. */ 2016 static void match_all_ptr_tag(struct kunit *test) 2017 { 2018 char *ptr; 2019 u8 tag; 2020 2021 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_GENERIC); 2022 2023 ptr = kmalloc(128, GFP_KERNEL); 2024 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 2025 2026 /* Backup the assigned tag. */ 2027 tag = get_tag(ptr); 2028 KUNIT_EXPECT_NE(test, tag, (u8)KASAN_TAG_KERNEL); 2029 2030 /* Reset the tag to 0xff.*/ 2031 ptr = set_tag(ptr, KASAN_TAG_KERNEL); 2032 2033 /* This access shouldn't trigger a KASAN report. */ 2034 *ptr = 0; 2035 2036 /* Recover the pointer tag and free. */ 2037 ptr = set_tag(ptr, tag); 2038 kfree(ptr); 2039 } 2040 2041 /* Check that there are no match-all memory tags for tag-based modes. */ 2042 static void match_all_mem_tag(struct kunit *test) 2043 { 2044 char *ptr; 2045 int tag; 2046 2047 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_GENERIC); 2048 2049 ptr = kmalloc(128, GFP_KERNEL); 2050 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 2051 KUNIT_EXPECT_NE(test, (u8)get_tag(ptr), (u8)KASAN_TAG_KERNEL); 2052 2053 /* For each possible tag value not matching the pointer tag. */ 2054 for (tag = KASAN_TAG_MIN; tag <= KASAN_TAG_KERNEL; tag++) { 2055 /* 2056 * For Software Tag-Based KASAN, skip the majority of tag 2057 * values to avoid the test printing too many reports. 2058 */ 2059 if (IS_ENABLED(CONFIG_KASAN_SW_TAGS) && 2060 tag >= KASAN_TAG_MIN + 8 && tag <= KASAN_TAG_KERNEL - 8) 2061 continue; 2062 2063 if (tag == get_tag(ptr)) 2064 continue; 2065 2066 /* Mark the first memory granule with the chosen memory tag. */ 2067 kasan_poison(ptr, KASAN_GRANULE_SIZE, (u8)tag, false); 2068 2069 /* This access must cause a KASAN report. */ 2070 KUNIT_EXPECT_KASAN_FAIL(test, *ptr = 0); 2071 } 2072 2073 /* Recover the memory tag and free. */ 2074 kasan_poison(ptr, KASAN_GRANULE_SIZE, get_tag(ptr), false); 2075 kfree(ptr); 2076 } 2077 2078 /* 2079 * Check that Rust performing a use-after-free using `unsafe` is detected. 2080 * This is a smoke test to make sure that Rust is being sanitized properly. 2081 */ 2082 static void rust_uaf(struct kunit *test) 2083 { 2084 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_RUST); 2085 KUNIT_EXPECT_KASAN_FAIL(test, kasan_test_rust_uaf()); 2086 } 2087 2088 /* 2089 * copy_to_kernel_nofault() is an internal helper available when 2090 * kasan_test is built-in, so it must not be visible to loadable modules. 2091 */ 2092 #ifndef MODULE 2093 static void copy_to_kernel_nofault_oob(struct kunit *test) 2094 { 2095 char *ptr; 2096 char buf[128]; 2097 size_t size = sizeof(buf); 2098 2099 /* 2100 * This test currently fails with the HW_TAGS mode. The reason is 2101 * unknown and needs to be investigated. 2102 */ 2103 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_HW_TAGS); 2104 2105 ptr = kmalloc(size - KASAN_GRANULE_SIZE, GFP_KERNEL); 2106 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); 2107 OPTIMIZER_HIDE_VAR(ptr); 2108 2109 /* 2110 * We test copy_to_kernel_nofault() to detect corrupted memory that is 2111 * being written into the kernel. In contrast, 2112 * copy_from_kernel_nofault() is primarily used in kernel helper 2113 * functions where the source address might be random or uninitialized. 2114 * Applying KASAN instrumentation to copy_from_kernel_nofault() could 2115 * lead to false positives. By focusing KASAN checks only on 2116 * copy_to_kernel_nofault(), we ensure that only valid memory is 2117 * written to the kernel, minimizing the risk of kernel corruption 2118 * while avoiding false positives in the reverse case. 2119 */ 2120 KUNIT_EXPECT_KASAN_FAIL(test, 2121 copy_to_kernel_nofault(&buf[0], ptr, size)); 2122 KUNIT_EXPECT_KASAN_FAIL(test, 2123 copy_to_kernel_nofault(ptr, &buf[0], size)); 2124 2125 kfree(ptr); 2126 } 2127 #endif /* !MODULE */ 2128 2129 static void copy_user_test_oob(struct kunit *test) 2130 { 2131 char *kmem; 2132 char __user *usermem; 2133 unsigned long useraddr; 2134 size_t size = 128 - KASAN_GRANULE_SIZE; 2135 int __maybe_unused unused; 2136 2137 kmem = kunit_kmalloc(test, size, GFP_KERNEL); 2138 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, kmem); 2139 2140 useraddr = kunit_vm_mmap(test, NULL, 0, PAGE_SIZE, 2141 PROT_READ | PROT_WRITE | PROT_EXEC, 2142 MAP_ANONYMOUS | MAP_PRIVATE, 0); 2143 KUNIT_ASSERT_NE_MSG(test, useraddr, 0, 2144 "Could not create userspace mm"); 2145 KUNIT_ASSERT_LT_MSG(test, useraddr, (unsigned long)TASK_SIZE, 2146 "Failed to allocate user memory"); 2147 2148 OPTIMIZER_HIDE_VAR(size); 2149 usermem = (char __user *)useraddr; 2150 2151 KUNIT_EXPECT_KASAN_FAIL(test, 2152 unused = copy_from_user(kmem, usermem, size + 1)); 2153 KUNIT_EXPECT_KASAN_FAIL_READ(test, 2154 unused = copy_to_user(usermem, kmem, size + 1)); 2155 KUNIT_EXPECT_KASAN_FAIL(test, 2156 unused = __copy_from_user(kmem, usermem, size + 1)); 2157 KUNIT_EXPECT_KASAN_FAIL_READ(test, 2158 unused = __copy_to_user(usermem, kmem, size + 1)); 2159 KUNIT_EXPECT_KASAN_FAIL(test, 2160 unused = __copy_from_user_inatomic(kmem, usermem, size + 1)); 2161 KUNIT_EXPECT_KASAN_FAIL_READ(test, 2162 unused = __copy_to_user_inatomic(usermem, kmem, size + 1)); 2163 2164 /* 2165 * Prepare a long string in usermem to avoid the strncpy_from_user test 2166 * bailing out on '\0' before it reaches out-of-bounds. 2167 */ 2168 memset(kmem, 'a', size); 2169 KUNIT_EXPECT_EQ(test, copy_to_user(usermem, kmem, size), 0); 2170 2171 KUNIT_EXPECT_KASAN_FAIL(test, 2172 unused = strncpy_from_user(kmem, usermem, size + 1)); 2173 } 2174 2175 static struct kunit_case kasan_kunit_test_cases[] = { 2176 KUNIT_CASE(kmalloc_oob_right), 2177 KUNIT_CASE(kmalloc_oob_left), 2178 KUNIT_CASE(kmalloc_node_oob_right), 2179 KUNIT_CASE(kmalloc_track_caller_oob_right), 2180 KUNIT_CASE(kmalloc_big_oob_right), 2181 KUNIT_CASE(kmalloc_large_oob_right), 2182 KUNIT_CASE(kmalloc_large_uaf), 2183 KUNIT_CASE(kmalloc_large_invalid_free), 2184 KUNIT_CASE(page_alloc_oob_right), 2185 KUNIT_CASE(page_alloc_uaf), 2186 KUNIT_CASE(krealloc_more_oob), 2187 KUNIT_CASE(krealloc_less_oob), 2188 KUNIT_CASE(krealloc_large_more_oob), 2189 KUNIT_CASE(krealloc_large_less_oob), 2190 KUNIT_CASE(krealloc_uaf), 2191 KUNIT_CASE(kmalloc_oob_16), 2192 KUNIT_CASE(kmalloc_uaf_16), 2193 KUNIT_CASE(kmalloc_oob_in_memset), 2194 KUNIT_CASE(kmalloc_oob_memset_2), 2195 KUNIT_CASE(kmalloc_oob_memset_4), 2196 KUNIT_CASE(kmalloc_oob_memset_8), 2197 KUNIT_CASE(kmalloc_oob_memset_16), 2198 KUNIT_CASE(kmalloc_memmove_negative_size), 2199 KUNIT_CASE(kmalloc_memmove_invalid_size), 2200 KUNIT_CASE(kmalloc_uaf), 2201 KUNIT_CASE(kmalloc_uaf_memset), 2202 KUNIT_CASE(kmalloc_uaf2), 2203 KUNIT_CASE(kmalloc_uaf3), 2204 KUNIT_CASE(kmalloc_double_kzfree), 2205 KUNIT_CASE(ksize_unpoisons_memory), 2206 KUNIT_CASE(ksize_uaf), 2207 KUNIT_CASE(rcu_uaf), 2208 KUNIT_CASE(workqueue_uaf), 2209 KUNIT_CASE(kfree_via_page), 2210 KUNIT_CASE(kfree_via_phys), 2211 KUNIT_CASE(kmem_cache_oob), 2212 KUNIT_CASE(kmem_cache_double_free), 2213 KUNIT_CASE(kmem_cache_invalid_free), 2214 KUNIT_CASE(kmem_cache_rcu_uaf), 2215 KUNIT_CASE(kmem_cache_rcu_reuse), 2216 KUNIT_CASE(kmem_cache_double_destroy), 2217 KUNIT_CASE(kmem_cache_accounted), 2218 KUNIT_CASE(kmem_cache_bulk), 2219 KUNIT_CASE(mempool_kmalloc_oob_right), 2220 KUNIT_CASE(mempool_kmalloc_large_oob_right), 2221 KUNIT_CASE(mempool_slab_oob_right), 2222 KUNIT_CASE(mempool_kmalloc_uaf), 2223 KUNIT_CASE(mempool_kmalloc_large_uaf), 2224 KUNIT_CASE(mempool_slab_uaf), 2225 KUNIT_CASE(mempool_page_alloc_uaf), 2226 KUNIT_CASE(mempool_kmalloc_double_free), 2227 KUNIT_CASE(mempool_kmalloc_large_double_free), 2228 KUNIT_CASE(mempool_page_alloc_double_free), 2229 KUNIT_CASE(mempool_kmalloc_invalid_free), 2230 KUNIT_CASE(mempool_kmalloc_large_invalid_free), 2231 KUNIT_CASE(kasan_global_oob_right), 2232 KUNIT_CASE(kasan_global_oob_left), 2233 KUNIT_CASE(kasan_stack_oob), 2234 KUNIT_CASE(kasan_alloca_oob_left), 2235 KUNIT_CASE(kasan_alloca_oob_right), 2236 KUNIT_CASE(kasan_memchr), 2237 KUNIT_CASE(kasan_memcmp), 2238 KUNIT_CASE(kasan_strings), 2239 KUNIT_CASE(kasan_bitops_generic), 2240 KUNIT_CASE(kasan_bitops_tags), 2241 KUNIT_CASE_SLOW(kasan_atomics), 2242 KUNIT_CASE(vmalloc_helpers_tags), 2243 KUNIT_CASE(vmalloc_oob), 2244 KUNIT_CASE(vmap_tags), 2245 KUNIT_CASE(vm_map_ram_tags), 2246 KUNIT_CASE(match_all_not_assigned), 2247 KUNIT_CASE(match_all_ptr_tag), 2248 KUNIT_CASE(match_all_mem_tag), 2249 #ifndef MODULE 2250 KUNIT_CASE(copy_to_kernel_nofault_oob), 2251 #endif 2252 KUNIT_CASE(rust_uaf), 2253 KUNIT_CASE(copy_user_test_oob), 2254 {} 2255 }; 2256 2257 static struct kunit_suite kasan_kunit_test_suite = { 2258 .name = "kasan", 2259 .test_cases = kasan_kunit_test_cases, 2260 .exit = kasan_test_exit, 2261 .suite_init = kasan_suite_init, 2262 .suite_exit = kasan_suite_exit, 2263 }; 2264 2265 kunit_test_suite(kasan_kunit_test_suite); 2266 2267 MODULE_DESCRIPTION("KUnit tests for checking KASAN bug-detection capabilities"); 2268 MODULE_LICENSE("GPL"); 2269