Commit eef9287108b27063391a52a47ed2b4cc369af472

Authored by Dmitry V. Levin
Committed by Greg Kroah-Hartman
1 parent ff00df41a1

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; \