Commit eef9287108b27063391a52a47ed2b4cc369af472
Committed by
Greg Kroah-Hartman
1 parent
ff00df41a1
Exists in
smarc_8mm_imx_4.14.98_2.0.0_ga
and in
4 other branches
selftests: do not macro-expand failed assertion expressions
[ Upstream commit b708a3cc9600390ccaa2b68a88087dd265154b2b ] I've stumbled over the current macro-expand behaviour of the test harness: $ gcc -Wall -xc - <<'__EOF__' TEST(macro) { int status = 0; ASSERT_TRUE(WIFSIGNALED(status)); } TEST_HARNESS_MAIN __EOF__ $ ./a.out [==========] Running 1 tests from 1 test cases. [ RUN ] global.macro <stdin>:4:global.macro:Expected 0 (0) != (((signed char) (((status) & 0x7f) + 1) >> 1) > 0) (0) global.macro: Test terminated by assertion [ FAIL ] global.macro [==========] 0 / 1 tests passed. [ FAILED ] With this change the output of the same test looks much more comprehensible: [==========] Running 1 tests from 1 test cases. [ RUN ] global.macro <stdin>:4:global.macro:Expected 0 (0) != WIFSIGNALED(status) (0) global.macro: Test terminated by assertion [ FAIL ] global.macro [==========] 0 / 1 tests passed. [ FAILED ] The issue is very similar to the bug fixed in glibc assert(3) three years ago: https://sourceware.org/bugzilla/show_bug.cgi?id=18604 Cc: Shuah Khan <shuah@kernel.org> Cc: Kees Cook <keescook@chromium.org> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Will Drewry <wad@chromium.org> Cc: linux-kselftest@vger.kernel.org Signed-off-by: Dmitry V. Levin <ldv@altlinux.org> Acked-by: Kees Cook <keescook@chromium.org> Signed-off-by: Shuah Khan <shuah@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
Showing 1 changed file with 21 additions and 21 deletions Side-by-side Diff
tools/testing/selftests/kselftest_harness.h
... | ... | @@ -330,7 +330,7 @@ |
330 | 330 | * ASSERT_EQ(expected, measured): expected == measured |
331 | 331 | */ |
332 | 332 | #define ASSERT_EQ(expected, seen) \ |
333 | - __EXPECT(expected, seen, ==, 1) | |
333 | + __EXPECT(expected, #expected, seen, #seen, ==, 1) | |
334 | 334 | |
335 | 335 | /** |
336 | 336 | * ASSERT_NE(expected, seen) |
... | ... | @@ -341,7 +341,7 @@ |
341 | 341 | * ASSERT_NE(expected, measured): expected != measured |
342 | 342 | */ |
343 | 343 | #define ASSERT_NE(expected, seen) \ |
344 | - __EXPECT(expected, seen, !=, 1) | |
344 | + __EXPECT(expected, #expected, seen, #seen, !=, 1) | |
345 | 345 | |
346 | 346 | /** |
347 | 347 | * ASSERT_LT(expected, seen) |
... | ... | @@ -352,7 +352,7 @@ |
352 | 352 | * ASSERT_LT(expected, measured): expected < measured |
353 | 353 | */ |
354 | 354 | #define ASSERT_LT(expected, seen) \ |
355 | - __EXPECT(expected, seen, <, 1) | |
355 | + __EXPECT(expected, #expected, seen, #seen, <, 1) | |
356 | 356 | |
357 | 357 | /** |
358 | 358 | * ASSERT_LE(expected, seen) |
... | ... | @@ -363,7 +363,7 @@ |
363 | 363 | * ASSERT_LE(expected, measured): expected <= measured |
364 | 364 | */ |
365 | 365 | #define ASSERT_LE(expected, seen) \ |
366 | - __EXPECT(expected, seen, <=, 1) | |
366 | + __EXPECT(expected, #expected, seen, #seen, <=, 1) | |
367 | 367 | |
368 | 368 | /** |
369 | 369 | * ASSERT_GT(expected, seen) |
... | ... | @@ -374,7 +374,7 @@ |
374 | 374 | * ASSERT_GT(expected, measured): expected > measured |
375 | 375 | */ |
376 | 376 | #define ASSERT_GT(expected, seen) \ |
377 | - __EXPECT(expected, seen, >, 1) | |
377 | + __EXPECT(expected, #expected, seen, #seen, >, 1) | |
378 | 378 | |
379 | 379 | /** |
380 | 380 | * ASSERT_GE(expected, seen) |
... | ... | @@ -385,7 +385,7 @@ |
385 | 385 | * ASSERT_GE(expected, measured): expected >= measured |
386 | 386 | */ |
387 | 387 | #define ASSERT_GE(expected, seen) \ |
388 | - __EXPECT(expected, seen, >=, 1) | |
388 | + __EXPECT(expected, #expected, seen, #seen, >=, 1) | |
389 | 389 | |
390 | 390 | /** |
391 | 391 | * ASSERT_NULL(seen) |
... | ... | @@ -395,7 +395,7 @@ |
395 | 395 | * ASSERT_NULL(measured): NULL == measured |
396 | 396 | */ |
397 | 397 | #define ASSERT_NULL(seen) \ |
398 | - __EXPECT(NULL, seen, ==, 1) | |
398 | + __EXPECT(NULL, "NULL", seen, #seen, ==, 1) | |
399 | 399 | |
400 | 400 | /** |
401 | 401 | * ASSERT_TRUE(seen) |
... | ... | @@ -405,7 +405,7 @@ |
405 | 405 | * ASSERT_TRUE(measured): measured != 0 |
406 | 406 | */ |
407 | 407 | #define ASSERT_TRUE(seen) \ |
408 | - ASSERT_NE(0, seen) | |
408 | + __EXPECT(0, "0", seen, #seen, !=, 1) | |
409 | 409 | |
410 | 410 | /** |
411 | 411 | * ASSERT_FALSE(seen) |
... | ... | @@ -415,7 +415,7 @@ |
415 | 415 | * ASSERT_FALSE(measured): measured == 0 |
416 | 416 | */ |
417 | 417 | #define ASSERT_FALSE(seen) \ |
418 | - ASSERT_EQ(0, seen) | |
418 | + __EXPECT(0, "0", seen, #seen, ==, 1) | |
419 | 419 | |
420 | 420 | /** |
421 | 421 | * ASSERT_STREQ(expected, seen) |
... | ... | @@ -448,7 +448,7 @@ |
448 | 448 | * EXPECT_EQ(expected, measured): expected == measured |
449 | 449 | */ |
450 | 450 | #define EXPECT_EQ(expected, seen) \ |
451 | - __EXPECT(expected, seen, ==, 0) | |
451 | + __EXPECT(expected, #expected, seen, #seen, ==, 0) | |
452 | 452 | |
453 | 453 | /** |
454 | 454 | * EXPECT_NE(expected, seen) |
... | ... | @@ -459,7 +459,7 @@ |
459 | 459 | * EXPECT_NE(expected, measured): expected != measured |
460 | 460 | */ |
461 | 461 | #define EXPECT_NE(expected, seen) \ |
462 | - __EXPECT(expected, seen, !=, 0) | |
462 | + __EXPECT(expected, #expected, seen, #seen, !=, 0) | |
463 | 463 | |
464 | 464 | /** |
465 | 465 | * EXPECT_LT(expected, seen) |
... | ... | @@ -470,7 +470,7 @@ |
470 | 470 | * EXPECT_LT(expected, measured): expected < measured |
471 | 471 | */ |
472 | 472 | #define EXPECT_LT(expected, seen) \ |
473 | - __EXPECT(expected, seen, <, 0) | |
473 | + __EXPECT(expected, #expected, seen, #seen, <, 0) | |
474 | 474 | |
475 | 475 | /** |
476 | 476 | * EXPECT_LE(expected, seen) |
... | ... | @@ -481,7 +481,7 @@ |
481 | 481 | * EXPECT_LE(expected, measured): expected <= measured |
482 | 482 | */ |
483 | 483 | #define EXPECT_LE(expected, seen) \ |
484 | - __EXPECT(expected, seen, <=, 0) | |
484 | + __EXPECT(expected, #expected, seen, #seen, <=, 0) | |
485 | 485 | |
486 | 486 | /** |
487 | 487 | * EXPECT_GT(expected, seen) |
... | ... | @@ -492,7 +492,7 @@ |
492 | 492 | * EXPECT_GT(expected, measured): expected > measured |
493 | 493 | */ |
494 | 494 | #define EXPECT_GT(expected, seen) \ |
495 | - __EXPECT(expected, seen, >, 0) | |
495 | + __EXPECT(expected, #expected, seen, #seen, >, 0) | |
496 | 496 | |
497 | 497 | /** |
498 | 498 | * EXPECT_GE(expected, seen) |
... | ... | @@ -503,7 +503,7 @@ |
503 | 503 | * EXPECT_GE(expected, measured): expected >= measured |
504 | 504 | */ |
505 | 505 | #define EXPECT_GE(expected, seen) \ |
506 | - __EXPECT(expected, seen, >=, 0) | |
506 | + __EXPECT(expected, #expected, seen, #seen, >=, 0) | |
507 | 507 | |
508 | 508 | /** |
509 | 509 | * EXPECT_NULL(seen) |
... | ... | @@ -513,7 +513,7 @@ |
513 | 513 | * EXPECT_NULL(measured): NULL == measured |
514 | 514 | */ |
515 | 515 | #define EXPECT_NULL(seen) \ |
516 | - __EXPECT(NULL, seen, ==, 0) | |
516 | + __EXPECT(NULL, "NULL", seen, #seen, ==, 0) | |
517 | 517 | |
518 | 518 | /** |
519 | 519 | * EXPECT_TRUE(seen) |
... | ... | @@ -523,7 +523,7 @@ |
523 | 523 | * EXPECT_TRUE(measured): 0 != measured |
524 | 524 | */ |
525 | 525 | #define EXPECT_TRUE(seen) \ |
526 | - EXPECT_NE(0, seen) | |
526 | + __EXPECT(0, "0", seen, #seen, !=, 0) | |
527 | 527 | |
528 | 528 | /** |
529 | 529 | * EXPECT_FALSE(seen) |
... | ... | @@ -533,7 +533,7 @@ |
533 | 533 | * EXPECT_FALSE(measured): 0 == measured |
534 | 534 | */ |
535 | 535 | #define EXPECT_FALSE(seen) \ |
536 | - EXPECT_EQ(0, seen) | |
536 | + __EXPECT(0, "0", seen, #seen, ==, 0) | |
537 | 537 | |
538 | 538 | /** |
539 | 539 | * EXPECT_STREQ(expected, seen) |
... | ... | @@ -573,7 +573,7 @@ |
573 | 573 | if (_metadata->passed && _metadata->step < 255) \ |
574 | 574 | _metadata->step++; |
575 | 575 | |
576 | -#define __EXPECT(_expected, _seen, _t, _assert) do { \ | |
576 | +#define __EXPECT(_expected, _expected_str, _seen, _seen_str, _t, _assert) do { \ | |
577 | 577 | /* Avoid multiple evaluation of the cases */ \ |
578 | 578 | __typeof__(_expected) __exp = (_expected); \ |
579 | 579 | __typeof__(_seen) __seen = (_seen); \ |
... | ... | @@ -582,8 +582,8 @@ |
582 | 582 | unsigned long long __exp_print = (uintptr_t)__exp; \ |
583 | 583 | unsigned long long __seen_print = (uintptr_t)__seen; \ |
584 | 584 | __TH_LOG("Expected %s (%llu) %s %s (%llu)", \ |
585 | - #_expected, __exp_print, #_t, \ | |
586 | - #_seen, __seen_print); \ | |
585 | + _expected_str, __exp_print, #_t, \ | |
586 | + _seen_str, __seen_print); \ | |
587 | 587 | _metadata->passed = 0; \ |
588 | 588 | /* Ensure the optional handler is triggered */ \ |
589 | 589 | _metadata->trigger = 1; \ |