Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/bpf: add "any alignment" annotation for some tests

RISC-V does, in-general, not have "efficient unaligned access". When
testing the RISC-V BPF JIT, some selftests failed in the verification
due to misaligned access. Annotate these tests with the
F_NEEDS_EFFICIENT_UNALIGNED_ACCESS flag.

Signed-off-by: Björn Töpel <bjorn.topel@gmail.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>

authored by

Björn Töpel and committed by
Daniel Borkmann
e2c6f50e e8cb0167

+33
+1
tools/testing/selftests/bpf/verifier/ctx_sk_msg.c
··· 100 100 .errstr = "invalid bpf_context access", 101 101 .result = REJECT, 102 102 .prog_type = BPF_PROG_TYPE_SK_MSG, 103 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 103 104 }, 104 105 { 105 106 "invalid read past end of SK_MSG",
+1
tools/testing/selftests/bpf/verifier/ctx_skb.c
··· 687 687 }, 688 688 .errstr = "invalid bpf_context access", 689 689 .result = REJECT, 690 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 690 691 }, 691 692 { 692 693 "check skb->hash half load not permitted, unaligned 3",
+22
tools/testing/selftests/bpf/verifier/jmp32.c
··· 27 27 .data64 = { 1ULL << 63 | 1, } 28 28 }, 29 29 }, 30 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 30 31 }, 31 32 { 32 33 "jset32: BPF_X", ··· 59 58 .data64 = { 1ULL << 63 | 1, } 60 59 }, 61 60 }, 61 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 62 62 }, 63 63 { 64 64 "jset32: min/max deduction", ··· 95 93 .data64 = { -1, } 96 94 }, 97 95 }, 96 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 98 97 }, 99 98 { 100 99 "jeq32: BPF_X", ··· 122 119 .data64 = { 1ULL << 63 | 1, } 123 120 }, 124 121 }, 122 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 125 123 }, 126 124 { 127 125 "jeq32: min/max deduction", ··· 158 154 .data64 = { -1, } 159 155 }, 160 156 }, 157 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 161 158 }, 162 159 { 163 160 "jne32: BPF_X", ··· 185 180 .data64 = { 1ULL << 63 | 2, } 186 181 }, 187 182 }, 183 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 188 184 }, 189 185 { 190 186 "jne32: min/max deduction", ··· 224 218 .data64 = { 0, } 225 219 }, 226 220 }, 221 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 227 222 }, 228 223 { 229 224 "jge32: BPF_X", ··· 251 244 .data64 = { (UINT_MAX - 1) | 2ULL << 32, } 252 245 }, 253 246 }, 247 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 254 248 }, 255 249 { 256 250 "jge32: min/max deduction", ··· 292 284 .data64 = { 0, } 293 285 }, 294 286 }, 287 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 295 288 }, 296 289 { 297 290 "jgt32: BPF_X", ··· 319 310 .data64 = { (UINT_MAX - 1) | 2ULL << 32, } 320 311 }, 321 312 }, 313 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 322 314 }, 323 315 { 324 316 "jgt32: min/max deduction", ··· 360 350 .data64 = { INT_MAX, } 361 351 }, 362 352 }, 353 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 363 354 }, 364 355 { 365 356 "jle32: BPF_X", ··· 387 376 .data64 = { UINT_MAX, } 388 377 }, 389 378 }, 379 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 390 380 }, 391 381 { 392 382 "jle32: min/max deduction", ··· 428 416 .data64 = { INT_MAX - 1, } 429 417 }, 430 418 }, 419 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 431 420 }, 432 421 { 433 422 "jlt32: BPF_X", ··· 455 442 .data64 = { (INT_MAX - 1) | 3ULL << 32, } 456 443 }, 457 444 }, 445 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 458 446 }, 459 447 { 460 448 "jlt32: min/max deduction", ··· 496 482 .data64 = { -2, } 497 483 }, 498 484 }, 485 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 499 486 }, 500 487 { 501 488 "jsge32: BPF_X", ··· 523 508 .data64 = { -2, } 524 509 }, 525 510 }, 511 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 526 512 }, 527 513 { 528 514 "jsge32: min/max deduction", ··· 564 548 .data64 = { 1, } 565 549 }, 566 550 }, 551 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 567 552 }, 568 553 { 569 554 "jsgt32: BPF_X", ··· 591 574 .data64 = { 0x7fffffff, } 592 575 }, 593 576 }, 577 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 594 578 }, 595 579 { 596 580 "jsgt32: min/max deduction", ··· 632 614 .data64 = { 1, } 633 615 }, 634 616 }, 617 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 635 618 }, 636 619 { 637 620 "jsle32: BPF_X", ··· 659 640 .data64 = { 0x7fffffff | 2ULL << 32, } 660 641 }, 661 642 }, 643 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 662 644 }, 663 645 { 664 646 "jsle32: min/max deduction", ··· 700 680 .data64 = { 1, } 701 681 }, 702 682 }, 683 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 703 684 }, 704 685 { 705 686 "jslt32: BPF_X", ··· 727 706 .data64 = { 0x7fffffff | 2ULL << 32, } 728 707 }, 729 708 }, 709 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 730 710 }, 731 711 { 732 712 "jslt32: min/max deduction",
+2
tools/testing/selftests/bpf/verifier/jset.c
··· 53 53 .data64 = { ~0ULL, } 54 54 }, 55 55 }, 56 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 56 57 }, 57 58 { 58 59 "jset: sign-extend", ··· 71 70 .result = ACCEPT, 72 71 .retval = 2, 73 72 .data = { 1, 0, 0, 0, 0, 0, 0, 1, }, 73 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 74 74 }, 75 75 { 76 76 "jset: known const compare",
+1
tools/testing/selftests/bpf/verifier/spill_fill.c
··· 46 46 .errstr_unpriv = "attempt to corrupt spilled", 47 47 .errstr = "R0 invalid mem access 'inv", 48 48 .result = REJECT, 49 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 49 50 }, 50 51 { 51 52 "check corrupted spill/fill, LSB",
+2
tools/testing/selftests/bpf/verifier/spin_lock.c
··· 83 83 .result_unpriv = REJECT, 84 84 .errstr_unpriv = "", 85 85 .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 86 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 86 87 }, 87 88 { 88 89 "spin_lock: test4 direct ld/st", ··· 113 112 .result_unpriv = REJECT, 114 113 .errstr_unpriv = "", 115 114 .prog_type = BPF_PROG_TYPE_CGROUP_SKB, 115 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 116 116 }, 117 117 { 118 118 "spin_lock: test5 call within a locked region",
+4
tools/testing/selftests/bpf/verifier/value_ptr_arith.c
··· 512 512 .fixup_map_array_48b = { 3 }, 513 513 .result = ACCEPT, 514 514 .retval = 0xabcdef12, 515 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 515 516 }, 516 517 { 517 518 "map access: unknown scalar += value_ptr, 3", ··· 538 537 .result_unpriv = REJECT, 539 538 .errstr_unpriv = "R0 pointer arithmetic of map value goes out of range", 540 539 .retval = 0xabcdef12, 540 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 541 541 }, 542 542 { 543 543 "map access: unknown scalar += value_ptr, 4", ··· 561 559 .result = REJECT, 562 560 .errstr = "R1 max value is outside of the array range", 563 561 .errstr_unpriv = "R1 pointer arithmetic of map value goes out of range", 562 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 564 563 }, 565 564 { 566 565 "map access: value_ptr += unknown scalar, 1", ··· 601 598 .fixup_map_array_48b = { 3 }, 602 599 .result = ACCEPT, 603 600 .retval = 0xabcdef12, 601 + .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, 604 602 }, 605 603 { 606 604 "map access: value_ptr += unknown scalar, 3",