@@ -388,6 +388,8 @@ static void __attribute__((noinline)) wolfBoot_image_clear_signature_ok(
388388 * double checking its return value contains a valid
389389 * len (>= WOLFBOOT_SHA_DIGEST_SIZE).
390390 *
391+ * Uses GAS local numeric labels (1f/1:) so the macro can be safely expanded
392+ * multiple times in the same function (e.g. RSA PKCS#1.5 + RSA-PSS paths).
391393 */
392394#define RSA_VERIFY_FN (ret ,fn ,...) \
393395 { \
@@ -406,22 +408,22 @@ static void __attribute__((noinline)) wolfBoot_image_clear_signature_ok(
406408 asm volatile ("cmp r0, r2" :::"cc" ); \
407409 asm volatile ("cmp r0, r2" :::"cc" ); \
408410 asm volatile ("cmp r0, r2" :::"cc" ); \
409- asm volatile ("blt nope " ); \
411+ asm volatile ("blt 1f " ); \
410412 asm volatile ("cmp r0, r2" :::"cc" ); \
411413 asm volatile ("cmp r0, r2" :::"cc" ); \
412414 asm volatile ("cmp r0, r2" :::"cc" ); \
413- asm volatile ("blt nope " ); \
415+ asm volatile ("blt 1f " ); \
414416 asm volatile ("cmp r0, r2" :::"cc" ); \
415417 asm volatile ("cmp r0, r2" :::"cc" ); \
416418 asm volatile ("cmp r0, r2" :::"cc" ); \
417- asm volatile ("blt nope " ); \
419+ asm volatile ("blt 1f " ); \
418420 asm volatile ("cmp r0, r2" :::"cc" ); \
419421 asm volatile ("cmp r0, r2" :::"cc" ); \
420422 asm volatile ("cmp r0, r2" :::"cc" ); \
421- asm volatile ("blt nope " ); \
423+ asm volatile ("blt 1f " ); \
422424 /* Return value is set here in case of success */ \
423425 ret = tmp_ret ; \
424- asm volatile ("nope :" ); \
426+ asm volatile ("1 :" ); \
425427 asm volatile ("nop" ); \
426428 }
427429
@@ -430,12 +432,14 @@ static void __attribute__((noinline)) wolfBoot_image_clear_signature_ok(
430432 *
431433 * Compare the digest twice, then confirm via
432434 * wolfBoot_image_confirm_signature_ok();
435+ *
436+ * Uses GAS local numeric labels (2f/2:) for safe multi-expansion.
433437 */
434438#define RSA_VERIFY_HASH (img ,digest ) \
435439 { \
436440 volatile int compare_res; \
437441 if (!img || !digest) \
438- asm volatile("b hnope "); \
442+ asm volatile("b 2f "); \
439443 /* Redundant set of r0=50*/ \
440444 asm volatile ("mov r0, #50" :::"r0" ); \
441445 asm volatile ("mov r0, #50" :::"r0" ); \
@@ -445,42 +449,42 @@ static void __attribute__((noinline)) wolfBoot_image_clear_signature_ok(
445449 asm volatile ("cmp r0, #0" :::"cc" ); \
446450 asm volatile ("cmp r0, #0" :::"cc" ); \
447451 asm volatile ("cmp r0, #0" :::"cc" ); \
448- asm volatile ("bne hnope " :::"cc" ); \
452+ asm volatile ("bne 2f " :::"cc" ); \
449453 asm volatile ("cmp r0, #0" ); \
450454 asm volatile ("cmp r0, #0" ); \
451455 asm volatile ("cmp r0, #0" ); \
452- asm volatile ("bne hnope " :::"cc" ); \
456+ asm volatile ("bne 2f " :::"cc" ); \
453457 asm volatile ("cmp r0, #0" :::"cc" ); \
454458 asm volatile ("cmp r0, #0" :::"cc" ); \
455459 asm volatile ("cmp r0, #0" :::"cc" ); \
456- asm volatile ("bne hnope " ); \
460+ asm volatile ("bne 2f " ); \
457461 asm volatile ("cmp r0, #0" :::"cc" ); \
458462 asm volatile ("cmp r0, #0" :::"cc" ); \
459463 asm volatile ("cmp r0, #0" :::"cc" ); \
460- asm volatile ("bne hnope " ); \
464+ asm volatile ("bne 2f " ); \
461465 /* Repeat memcmp call */ \
462466 compare_res = XMEMCMP (digest , img -> sha_hash , WOLFBOOT_SHA_DIGEST_SIZE ); \
463467 compare_res ; \
464468 /* Redundant checks that ensure the function actually returned 0 */ \
465469 asm volatile ("cmp r0, #0" :::"cc" ); \
466470 asm volatile ("cmp r0, #0" :::"cc" ); \
467471 asm volatile ("cmp r0, #0" :::"cc" ); \
468- asm volatile ("bne hnope " ); \
472+ asm volatile ("bne 2f " ); \
469473 asm volatile ("cmp r0, #0" :::"cc" ); \
470474 asm volatile ("cmp r0, #0" :::"cc" ); \
471475 asm volatile ("cmp r0, #0" :::"cc" ); \
472- asm volatile ("bne hnope " ); \
476+ asm volatile ("bne 2f " ); \
473477 asm volatile ("cmp r0, #0" :::"cc" ); \
474478 asm volatile ("cmp r0, #0" :::"cc" ); \
475479 asm volatile ("cmp r0, #0" :::"cc" ); \
476- asm volatile ("bne hnope " ); \
480+ asm volatile ("bne 2f " ); \
477481 asm volatile ("cmp r0, #0" :::"cc" ); \
478482 asm volatile ("cmp r0, #0" :::"cc" ); \
479483 asm volatile ("cmp r0, #0" :::"cc" ); \
480- asm volatile ("bne hnope " ); \
484+ asm volatile ("bne 2f " ); \
481485 /* Confirm that the signature is OK */ \
482486 wolfBoot_image_confirm_signature_ok (img ); \
483- asm volatile ("hnope :" ); \
487+ asm volatile ("2 :" ); \
484488 asm volatile ("nop" ); \
485489 }
486490
@@ -489,12 +493,14 @@ static void __attribute__((noinline)) wolfBoot_image_clear_signature_ok(
489493 *
490494 * Call wc_RsaPSS_CheckPadding twice, then confirm via
491495 * wolfBoot_image_confirm_signature_ok();
496+ *
497+ * Uses GAS local numeric labels (3f/3:) for safe multi-expansion.
492498 */
493499#define RSA_PSS_VERIFY_HASH (img , pss_data , pss_data_sz , hash_type ) \
494500 { \
495501 volatile int pss_res; \
496502 if (!img || !pss_data) \
497- asm volatile("b pnope "); \
503+ asm volatile("b 3f "); \
498504 /* Redundant set of r0=50*/ \
499505 asm volatile ("mov r0, #50" :::"r0" ); \
500506 asm volatile ("mov r0, #50" :::"r0" ); \
@@ -505,19 +511,19 @@ static void __attribute__((noinline)) wolfBoot_image_clear_signature_ok(
505511 asm volatile ("cmp r0, #0" :::"cc" ); \
506512 asm volatile ("cmp r0, #0" :::"cc" ); \
507513 asm volatile ("cmp r0, #0" :::"cc" ); \
508- asm volatile ("bne pnope " :::"cc" ); \
514+ asm volatile ("bne 3f " :::"cc" ); \
509515 asm volatile ("cmp r0, #0" ); \
510516 asm volatile ("cmp r0, #0" ); \
511517 asm volatile ("cmp r0, #0" ); \
512- asm volatile ("bne pnope " :::"cc" ); \
518+ asm volatile ("bne 3f " :::"cc" ); \
513519 asm volatile ("cmp r0, #0" :::"cc" ); \
514520 asm volatile ("cmp r0, #0" :::"cc" ); \
515521 asm volatile ("cmp r0, #0" :::"cc" ); \
516- asm volatile ("bne pnope " ); \
522+ asm volatile ("bne 3f " ); \
517523 asm volatile ("cmp r0, #0" :::"cc" ); \
518524 asm volatile ("cmp r0, #0" :::"cc" ); \
519525 asm volatile ("cmp r0, #0" :::"cc" ); \
520- asm volatile ("bne pnope " ); \
526+ asm volatile ("bne 3f " ); \
521527 /* Repeat wc_RsaPSS_CheckPadding call */ \
522528 pss_res = wc_RsaPSS_CheckPadding (img -> sha_hash , WOLFBOOT_SHA_DIGEST_SIZE , \
523529 pss_data , pss_data_sz , hash_type ); \
@@ -526,22 +532,22 @@ static void __attribute__((noinline)) wolfBoot_image_clear_signature_ok(
526532 asm volatile ("cmp r0, #0" :::"cc" ); \
527533 asm volatile ("cmp r0, #0" :::"cc" ); \
528534 asm volatile ("cmp r0, #0" :::"cc" ); \
529- asm volatile ("bne pnope " ); \
535+ asm volatile ("bne 3f " ); \
530536 asm volatile ("cmp r0, #0" :::"cc" ); \
531537 asm volatile ("cmp r0, #0" :::"cc" ); \
532538 asm volatile ("cmp r0, #0" :::"cc" ); \
533- asm volatile ("bne pnope " ); \
539+ asm volatile ("bne 3f " ); \
534540 asm volatile ("cmp r0, #0" :::"cc" ); \
535541 asm volatile ("cmp r0, #0" :::"cc" ); \
536542 asm volatile ("cmp r0, #0" :::"cc" ); \
537- asm volatile ("bne pnope " ); \
543+ asm volatile ("bne 3f " ); \
538544 asm volatile ("cmp r0, #0" :::"cc" ); \
539545 asm volatile ("cmp r0, #0" :::"cc" ); \
540546 asm volatile ("cmp r0, #0" :::"cc" ); \
541- asm volatile ("bne pnope " ); \
547+ asm volatile ("bne 3f " ); \
542548 /* Confirm that the signature is OK */ \
543549 wolfBoot_image_confirm_signature_ok (img ); \
544- asm volatile ("pnope :" ); \
550+ asm volatile ("3 :" ); \
545551 asm volatile ("nop" ); \
546552 }
547553
@@ -554,6 +560,8 @@ static void __attribute__((noinline)) wolfBoot_image_clear_signature_ok(
554560 * set the return value accordingly.
555561 *
556562 * Double check by reading the value in p_res from memory a few times.
563+ *
564+ * Uses GAS local numeric labels (4f/4:) for safe multi-expansion.
557565 */
558566#if defined(__GNUC__ )
559567
@@ -568,63 +576,63 @@ static void __attribute__((noinline)) wolfBoot_image_clear_signature_ok(
568576 asm volatile ("cmp r0, #0" :::"cc" ); \
569577 asm volatile ("cmp r0, #0" :::"cc" ); \
570578 asm volatile ("cmp r0, #0" :::"cc" ); \
571- asm volatile ("bne nope " ); \
579+ asm volatile ("bne 4f " ); \
572580 asm volatile ("cmp r0, #0" :::"cc" ); \
573581 asm volatile ("cmp r0, #0" :::"cc" ); \
574582 asm volatile ("cmp r0, #0" :::"cc" ); \
575- asm volatile ("bne nope " ); \
583+ asm volatile ("bne 4f " ); \
576584 asm volatile ("cmp r0, #0" :::"cc" ); \
577585 asm volatile ("cmp r0, #0" :::"cc" ); \
578586 asm volatile ("cmp r0, #0" :::"cc" ); \
579- asm volatile ("bne nope " ); \
587+ asm volatile ("bne 4f " ); \
580588 asm volatile ("cmp r0, #0" :::"cc" ); \
581589 asm volatile ("cmp r0, #0" :::"cc" ); \
582590 asm volatile ("cmp r0, #0" :::"cc" ); \
583- asm volatile ("bne nope " ); \
591+ asm volatile ("bne 4f " ); \
584592 /* Check that res = 1, a few times, reading the value from memory */ \
585593 asm volatile ("ldr r2, [%0]" ::"r" (p_res )); \
586594 asm volatile ("cmp r2, #1" :::"cc" ); \
587595 asm volatile ("cmp r2, #1" :::"cc" ); \
588596 asm volatile ("cmp r2, #1" :::"cc" ); \
589- asm volatile ("bne nope " ); \
597+ asm volatile ("bne 4f " ); \
590598 asm volatile ("mvn r3, r2" :::"r3" ); \
591599 asm volatile ("cmp r3, #0xFFFFFFFE" :::"cc" ); \
592600 asm volatile ("cmp r3, #0xFFFFFFFE" :::"cc" ); \
593601 asm volatile ("cmp r3, #0xFFFFFFFE" :::"cc" ); \
594- asm volatile ("bne nope " ); \
602+ asm volatile ("bne 4f " ); \
595603 asm volatile ("ldr r2, [%0]" ::"r" (p_res )); \
596604 asm volatile ("cmp r2, #1" :::"cc" ); \
597605 asm volatile ("cmp r2, #1" :::"cc" ); \
598606 asm volatile ("cmp r2, #1" :::"cc" ); \
599- asm volatile ("bne nope " ); \
607+ asm volatile ("bne 4f " ); \
600608 asm volatile ("mvn r3, r2" :::"r3" ); \
601609 asm volatile ("cmp r3, #0xFFFFFFFE" :::"cc" ); \
602610 asm volatile ("cmp r3, #0xFFFFFFFE" :::"cc" ); \
603611 asm volatile ("cmp r3, #0xFFFFFFFE" :::"cc" ); \
604- asm volatile ("bne nope " ); \
612+ asm volatile ("bne 4f " ); \
605613 asm volatile ("ldr r2, [%0]" ::"r" (p_res )); \
606614 asm volatile ("cmp r2, #1" :::"cc" ); \
607615 asm volatile ("cmp r2, #1" :::"cc" ); \
608616 asm volatile ("cmp r2, #1" :::"cc" ); \
609- asm volatile ("bne nope " ); \
617+ asm volatile ("bne 4f " ); \
610618 asm volatile ("mvn r3, r2" :::"r3" ); \
611619 asm volatile ("cmp r3, #0xFFFFFFFE" :::"cc" ); \
612620 asm volatile ("cmp r3, #0xFFFFFFFE" :::"cc" ); \
613621 asm volatile ("cmp r3, #0xFFFFFFFE" :::"cc" ); \
614- asm volatile ("bne nope " ); \
622+ asm volatile ("bne 4f " ); \
615623 asm volatile ("ldr r2, [%0]" ::"r" (p_res )); \
616624 asm volatile ("cmp r2, #1" :::"cc" ); \
617625 asm volatile ("cmp r2, #1" :::"cc" ); \
618626 asm volatile ("cmp r2, #1" :::"cc" ); \
619- asm volatile ("bne nope " ); \
627+ asm volatile ("bne 4f " ); \
620628 asm volatile ("mvn r3, r2" :::"r3" ); \
621629 asm volatile ("cmp r3, #0xFFFFFFFE" :::"cc" ); \
622630 asm volatile ("cmp r3, #0xFFFFFFFE" :::"cc" ); \
623631 asm volatile ("cmp r3, #0xFFFFFFFE" :::"cc" ); \
624- asm volatile ("bne nope " ); \
632+ asm volatile ("bne 4f " ); \
625633 /* Confirm that the signature is OK */ \
626634 wolfBoot_image_confirm_signature_ok (img ); \
627- asm volatile ("nope :" ); \
635+ asm volatile ("4 :" ); \
628636 asm volatile ("nop" ) \
629637
630638#elif defined(__ICCARM__ ) && defined(__IAR_SYSTEMS_ICC__ )
0 commit comments