1 // SPDX-License-Identifier: GPL-2.0 2 3 #include <linux/bpf.h> 4 #include <bpf/bpf_helpers.h> 5 #include "bpf_misc.h" 6 7 #if (defined(__TARGET_ARCH_arm64) || defined(__TARGET_ARCH_x86) || \ 8 (defined(__TARGET_ARCH_riscv) && __riscv_xlen == 64) || defined(__TARGET_ARCH_arm)) && \ 9 __clang_major__ >= 18 10 11 SEC("socket") 12 __description("SDIV32, non-zero imm divisor, check 1") 13 __success __success_unpriv __retval(-20) 14 __naked void sdiv32_non_zero_imm_1(void) 15 { 16 asm volatile (" \ 17 w0 = -41; \ 18 w0 s/= 2; \ 19 exit; \ 20 " ::: __clobber_all); 21 } 22 23 SEC("socket") 24 __description("SDIV32, non-zero imm divisor, check 2") 25 __success __success_unpriv __retval(-20) 26 __naked void sdiv32_non_zero_imm_2(void) 27 { 28 asm volatile (" \ 29 w0 = 41; \ 30 w0 s/= -2; \ 31 exit; \ 32 " ::: __clobber_all); 33 } 34 35 SEC("socket") 36 __description("SDIV32, non-zero imm divisor, check 3") 37 __success __success_unpriv __retval(20) 38 __naked void sdiv32_non_zero_imm_3(void) 39 { 40 asm volatile (" \ 41 w0 = -41; \ 42 w0 s/= -2; \ 43 exit; \ 44 " ::: __clobber_all); 45 } 46 47 SEC("socket") 48 __description("SDIV32, non-zero imm divisor, check 4") 49 __success __success_unpriv __retval(-21) 50 __naked void sdiv32_non_zero_imm_4(void) 51 { 52 asm volatile (" \ 53 w0 = -42; \ 54 w0 s/= 2; \ 55 exit; \ 56 " ::: __clobber_all); 57 } 58 59 SEC("socket") 60 __description("SDIV32, non-zero imm divisor, check 5") 61 __success __success_unpriv __retval(-21) 62 __naked void sdiv32_non_zero_imm_5(void) 63 { 64 asm volatile (" \ 65 w0 = 42; \ 66 w0 s/= -2; \ 67 exit; \ 68 " ::: __clobber_all); 69 } 70 71 SEC("socket") 72 __description("SDIV32, non-zero imm divisor, check 6") 73 __success __success_unpriv __retval(21) 74 __naked void sdiv32_non_zero_imm_6(void) 75 { 76 asm volatile (" \ 77 w0 = -42; \ 78 w0 s/= -2; \ 79 exit; \ 80 " ::: __clobber_all); 81 } 82 83 SEC("socket") 84 __description("SDIV32, non-zero imm divisor, check 7") 85 __success __success_unpriv __retval(21) 86 __naked void sdiv32_non_zero_imm_7(void) 87 { 88 asm volatile (" \ 89 w0 = 42; \ 90 w0 s/= 2; \ 91 exit; \ 92 " ::: __clobber_all); 93 } 94 95 SEC("socket") 96 __description("SDIV32, non-zero imm divisor, check 8") 97 __success __success_unpriv __retval(20) 98 __naked void sdiv32_non_zero_imm_8(void) 99 { 100 asm volatile (" \ 101 w0 = 41; \ 102 w0 s/= 2; \ 103 exit; \ 104 " ::: __clobber_all); 105 } 106 107 SEC("socket") 108 __description("SDIV32, non-zero reg divisor, check 1") 109 __success __success_unpriv __retval(-20) 110 __naked void sdiv32_non_zero_reg_1(void) 111 { 112 asm volatile (" \ 113 w0 = -41; \ 114 w1 = 2; \ 115 w0 s/= w1; \ 116 exit; \ 117 " ::: __clobber_all); 118 } 119 120 SEC("socket") 121 __description("SDIV32, non-zero reg divisor, check 2") 122 __success __success_unpriv __retval(-20) 123 __naked void sdiv32_non_zero_reg_2(void) 124 { 125 asm volatile (" \ 126 w0 = 41; \ 127 w1 = -2; \ 128 w0 s/= w1; \ 129 exit; \ 130 " ::: __clobber_all); 131 } 132 133 SEC("socket") 134 __description("SDIV32, non-zero reg divisor, check 3") 135 __success __success_unpriv __retval(20) 136 __naked void sdiv32_non_zero_reg_3(void) 137 { 138 asm volatile (" \ 139 w0 = -41; \ 140 w1 = -2; \ 141 w0 s/= w1; \ 142 exit; \ 143 " ::: __clobber_all); 144 } 145 146 SEC("socket") 147 __description("SDIV32, non-zero reg divisor, check 4") 148 __success __success_unpriv __retval(-21) 149 __naked void sdiv32_non_zero_reg_4(void) 150 { 151 asm volatile (" \ 152 w0 = -42; \ 153 w1 = 2; \ 154 w0 s/= w1; \ 155 exit; \ 156 " ::: __clobber_all); 157 } 158 159 SEC("socket") 160 __description("SDIV32, non-zero reg divisor, check 5") 161 __success __success_unpriv __retval(-21) 162 __naked void sdiv32_non_zero_reg_5(void) 163 { 164 asm volatile (" \ 165 w0 = 42; \ 166 w1 = -2; \ 167 w0 s/= w1; \ 168 exit; \ 169 " ::: __clobber_all); 170 } 171 172 SEC("socket") 173 __description("SDIV32, non-zero reg divisor, check 6") 174 __success __success_unpriv __retval(21) 175 __naked void sdiv32_non_zero_reg_6(void) 176 { 177 asm volatile (" \ 178 w0 = -42; \ 179 w1 = -2; \ 180 w0 s/= w1; \ 181 exit; \ 182 " ::: __clobber_all); 183 } 184 185 SEC("socket") 186 __description("SDIV32, non-zero reg divisor, check 7") 187 __success __success_unpriv __retval(21) 188 __naked void sdiv32_non_zero_reg_7(void) 189 { 190 asm volatile (" \ 191 w0 = 42; \ 192 w1 = 2; \ 193 w0 s/= w1; \ 194 exit; \ 195 " ::: __clobber_all); 196 } 197 198 SEC("socket") 199 __description("SDIV32, non-zero reg divisor, check 8") 200 __success __success_unpriv __retval(20) 201 __naked void sdiv32_non_zero_reg_8(void) 202 { 203 asm volatile (" \ 204 w0 = 41; \ 205 w1 = 2; \ 206 w0 s/= w1; \ 207 exit; \ 208 " ::: __clobber_all); 209 } 210 211 SEC("socket") 212 __description("SDIV64, non-zero imm divisor, check 1") 213 __success __success_unpriv __retval(-20) 214 __naked void sdiv64_non_zero_imm_1(void) 215 { 216 asm volatile (" \ 217 r0 = -41; \ 218 r0 s/= 2; \ 219 exit; \ 220 " ::: __clobber_all); 221 } 222 223 SEC("socket") 224 __description("SDIV64, non-zero imm divisor, check 2") 225 __success __success_unpriv __retval(-20) 226 __naked void sdiv64_non_zero_imm_2(void) 227 { 228 asm volatile (" \ 229 r0 = 41; \ 230 r0 s/= -2; \ 231 exit; \ 232 " ::: __clobber_all); 233 } 234 235 SEC("socket") 236 __description("SDIV64, non-zero imm divisor, check 3") 237 __success __success_unpriv __retval(20) 238 __naked void sdiv64_non_zero_imm_3(void) 239 { 240 asm volatile (" \ 241 r0 = -41; \ 242 r0 s/= -2; \ 243 exit; \ 244 " ::: __clobber_all); 245 } 246 247 SEC("socket") 248 __description("SDIV64, non-zero imm divisor, check 4") 249 __success __success_unpriv __retval(-21) 250 __naked void sdiv64_non_zero_imm_4(void) 251 { 252 asm volatile (" \ 253 r0 = -42; \ 254 r0 s/= 2; \ 255 exit; \ 256 " ::: __clobber_all); 257 } 258 259 SEC("socket") 260 __description("SDIV64, non-zero imm divisor, check 5") 261 __success __success_unpriv __retval(-21) 262 __naked void sdiv64_non_zero_imm_5(void) 263 { 264 asm volatile (" \ 265 r0 = 42; \ 266 r0 s/= -2; \ 267 exit; \ 268 " ::: __clobber_all); 269 } 270 271 SEC("socket") 272 __description("SDIV64, non-zero imm divisor, check 6") 273 __success __success_unpriv __retval(21) 274 __naked void sdiv64_non_zero_imm_6(void) 275 { 276 asm volatile (" \ 277 r0 = -42; \ 278 r0 s/= -2; \ 279 exit; \ 280 " ::: __clobber_all); 281 } 282 283 SEC("socket") 284 __description("SDIV64, non-zero reg divisor, check 1") 285 __success __success_unpriv __retval(-20) 286 __naked void sdiv64_non_zero_reg_1(void) 287 { 288 asm volatile (" \ 289 r0 = -41; \ 290 r1 = 2; \ 291 r0 s/= r1; \ 292 exit; \ 293 " ::: __clobber_all); 294 } 295 296 SEC("socket") 297 __description("SDIV64, non-zero reg divisor, check 2") 298 __success __success_unpriv __retval(-20) 299 __naked void sdiv64_non_zero_reg_2(void) 300 { 301 asm volatile (" \ 302 r0 = 41; \ 303 r1 = -2; \ 304 r0 s/= r1; \ 305 exit; \ 306 " ::: __clobber_all); 307 } 308 309 SEC("socket") 310 __description("SDIV64, non-zero reg divisor, check 3") 311 __success __success_unpriv __retval(20) 312 __naked void sdiv64_non_zero_reg_3(void) 313 { 314 asm volatile (" \ 315 r0 = -41; \ 316 r1 = -2; \ 317 r0 s/= r1; \ 318 exit; \ 319 " ::: __clobber_all); 320 } 321 322 SEC("socket") 323 __description("SDIV64, non-zero reg divisor, check 4") 324 __success __success_unpriv __retval(-21) 325 __naked void sdiv64_non_zero_reg_4(void) 326 { 327 asm volatile (" \ 328 r0 = -42; \ 329 r1 = 2; \ 330 r0 s/= r1; \ 331 exit; \ 332 " ::: __clobber_all); 333 } 334 335 SEC("socket") 336 __description("SDIV64, non-zero reg divisor, check 5") 337 __success __success_unpriv __retval(-21) 338 __naked void sdiv64_non_zero_reg_5(void) 339 { 340 asm volatile (" \ 341 r0 = 42; \ 342 r1 = -2; \ 343 r0 s/= r1; \ 344 exit; \ 345 " ::: __clobber_all); 346 } 347 348 SEC("socket") 349 __description("SDIV64, non-zero reg divisor, check 6") 350 __success __success_unpriv __retval(21) 351 __naked void sdiv64_non_zero_reg_6(void) 352 { 353 asm volatile (" \ 354 r0 = -42; \ 355 r1 = -2; \ 356 r0 s/= r1; \ 357 exit; \ 358 " ::: __clobber_all); 359 } 360 361 SEC("socket") 362 __description("SMOD32, non-zero imm divisor, check 1") 363 __success __success_unpriv __retval(-1) 364 __naked void smod32_non_zero_imm_1(void) 365 { 366 asm volatile (" \ 367 w0 = -41; \ 368 w0 s%%= 2; \ 369 exit; \ 370 " ::: __clobber_all); 371 } 372 373 SEC("socket") 374 __description("SMOD32, non-zero imm divisor, check 2") 375 __success __success_unpriv __retval(1) 376 __naked void smod32_non_zero_imm_2(void) 377 { 378 asm volatile (" \ 379 w0 = 41; \ 380 w0 s%%= -2; \ 381 exit; \ 382 " ::: __clobber_all); 383 } 384 385 SEC("socket") 386 __description("SMOD32, non-zero imm divisor, check 3") 387 __success __success_unpriv __retval(-1) 388 __naked void smod32_non_zero_imm_3(void) 389 { 390 asm volatile (" \ 391 w0 = -41; \ 392 w0 s%%= -2; \ 393 exit; \ 394 " ::: __clobber_all); 395 } 396 397 SEC("socket") 398 __description("SMOD32, non-zero imm divisor, check 4") 399 __success __success_unpriv __retval(0) 400 __naked void smod32_non_zero_imm_4(void) 401 { 402 asm volatile (" \ 403 w0 = -42; \ 404 w0 s%%= 2; \ 405 exit; \ 406 " ::: __clobber_all); 407 } 408 409 SEC("socket") 410 __description("SMOD32, non-zero imm divisor, check 5") 411 __success __success_unpriv __retval(0) 412 __naked void smod32_non_zero_imm_5(void) 413 { 414 asm volatile (" \ 415 w0 = 42; \ 416 w0 s%%= -2; \ 417 exit; \ 418 " ::: __clobber_all); 419 } 420 421 SEC("socket") 422 __description("SMOD32, non-zero imm divisor, check 6") 423 __success __success_unpriv __retval(0) 424 __naked void smod32_non_zero_imm_6(void) 425 { 426 asm volatile (" \ 427 w0 = -42; \ 428 w0 s%%= -2; \ 429 exit; \ 430 " ::: __clobber_all); 431 } 432 433 SEC("socket") 434 __description("SMOD32, non-zero reg divisor, check 1") 435 __success __success_unpriv __retval(-1) 436 __naked void smod32_non_zero_reg_1(void) 437 { 438 asm volatile (" \ 439 w0 = -41; \ 440 w1 = 2; \ 441 w0 s%%= w1; \ 442 exit; \ 443 " ::: __clobber_all); 444 } 445 446 SEC("socket") 447 __description("SMOD32, non-zero reg divisor, check 2") 448 __success __success_unpriv __retval(1) 449 __naked void smod32_non_zero_reg_2(void) 450 { 451 asm volatile (" \ 452 w0 = 41; \ 453 w1 = -2; \ 454 w0 s%%= w1; \ 455 exit; \ 456 " ::: __clobber_all); 457 } 458 459 SEC("socket") 460 __description("SMOD32, non-zero reg divisor, check 3") 461 __success __success_unpriv __retval(-1) 462 __naked void smod32_non_zero_reg_3(void) 463 { 464 asm volatile (" \ 465 w0 = -41; \ 466 w1 = -2; \ 467 w0 s%%= w1; \ 468 exit; \ 469 " ::: __clobber_all); 470 } 471 472 SEC("socket") 473 __description("SMOD32, non-zero reg divisor, check 4") 474 __success __success_unpriv __retval(0) 475 __naked void smod32_non_zero_reg_4(void) 476 { 477 asm volatile (" \ 478 w0 = -42; \ 479 w1 = 2; \ 480 w0 s%%= w1; \ 481 exit; \ 482 " ::: __clobber_all); 483 } 484 485 SEC("socket") 486 __description("SMOD32, non-zero reg divisor, check 5") 487 __success __success_unpriv __retval(0) 488 __naked void smod32_non_zero_reg_5(void) 489 { 490 asm volatile (" \ 491 w0 = 42; \ 492 w1 = -2; \ 493 w0 s%%= w1; \ 494 exit; \ 495 " ::: __clobber_all); 496 } 497 498 SEC("socket") 499 __description("SMOD32, non-zero reg divisor, check 6") 500 __success __success_unpriv __retval(0) 501 __naked void smod32_non_zero_reg_6(void) 502 { 503 asm volatile (" \ 504 w0 = -42; \ 505 w1 = -2; \ 506 w0 s%%= w1; \ 507 exit; \ 508 " ::: __clobber_all); 509 } 510 511 SEC("socket") 512 __description("SMOD64, non-zero imm divisor, check 1") 513 __success __success_unpriv __retval(-1) 514 __naked void smod64_non_zero_imm_1(void) 515 { 516 asm volatile (" \ 517 r0 = -41; \ 518 r0 s%%= 2; \ 519 exit; \ 520 " ::: __clobber_all); 521 } 522 523 SEC("socket") 524 __description("SMOD64, non-zero imm divisor, check 2") 525 __success __success_unpriv __retval(1) 526 __naked void smod64_non_zero_imm_2(void) 527 { 528 asm volatile (" \ 529 r0 = 41; \ 530 r0 s%%= -2; \ 531 exit; \ 532 " ::: __clobber_all); 533 } 534 535 SEC("socket") 536 __description("SMOD64, non-zero imm divisor, check 3") 537 __success __success_unpriv __retval(-1) 538 __naked void smod64_non_zero_imm_3(void) 539 { 540 asm volatile (" \ 541 r0 = -41; \ 542 r0 s%%= -2; \ 543 exit; \ 544 " ::: __clobber_all); 545 } 546 547 SEC("socket") 548 __description("SMOD64, non-zero imm divisor, check 4") 549 __success __success_unpriv __retval(0) 550 __naked void smod64_non_zero_imm_4(void) 551 { 552 asm volatile (" \ 553 r0 = -42; \ 554 r0 s%%= 2; \ 555 exit; \ 556 " ::: __clobber_all); 557 } 558 559 SEC("socket") 560 __description("SMOD64, non-zero imm divisor, check 5") 561 __success __success_unpriv __retval(-0) 562 __naked void smod64_non_zero_imm_5(void) 563 { 564 asm volatile (" \ 565 r0 = 42; \ 566 r0 s%%= -2; \ 567 exit; \ 568 " ::: __clobber_all); 569 } 570 571 SEC("socket") 572 __description("SMOD64, non-zero imm divisor, check 6") 573 __success __success_unpriv __retval(0) 574 __naked void smod64_non_zero_imm_6(void) 575 { 576 asm volatile (" \ 577 r0 = -42; \ 578 r0 s%%= -2; \ 579 exit; \ 580 " ::: __clobber_all); 581 } 582 583 SEC("socket") 584 __description("SMOD64, non-zero imm divisor, check 7") 585 __success __success_unpriv __retval(0) 586 __naked void smod64_non_zero_imm_7(void) 587 { 588 asm volatile (" \ 589 r0 = 42; \ 590 r0 s%%= 2; \ 591 exit; \ 592 " ::: __clobber_all); 593 } 594 595 SEC("socket") 596 __description("SMOD64, non-zero imm divisor, check 8") 597 __success __success_unpriv __retval(1) 598 __naked void smod64_non_zero_imm_8(void) 599 { 600 asm volatile (" \ 601 r0 = 41; \ 602 r0 s%%= 2; \ 603 exit; \ 604 " ::: __clobber_all); 605 } 606 607 SEC("socket") 608 __description("SMOD64, non-zero reg divisor, check 1") 609 __success __success_unpriv __retval(-1) 610 __naked void smod64_non_zero_reg_1(void) 611 { 612 asm volatile (" \ 613 r0 = -41; \ 614 r1 = 2; \ 615 r0 s%%= r1; \ 616 exit; \ 617 " ::: __clobber_all); 618 } 619 620 SEC("socket") 621 __description("SMOD64, non-zero reg divisor, check 2") 622 __success __success_unpriv __retval(1) 623 __naked void smod64_non_zero_reg_2(void) 624 { 625 asm volatile (" \ 626 r0 = 41; \ 627 r1 = -2; \ 628 r0 s%%= r1; \ 629 exit; \ 630 " ::: __clobber_all); 631 } 632 633 SEC("socket") 634 __description("SMOD64, non-zero reg divisor, check 3") 635 __success __success_unpriv __retval(-1) 636 __naked void smod64_non_zero_reg_3(void) 637 { 638 asm volatile (" \ 639 r0 = -41; \ 640 r1 = -2; \ 641 r0 s%%= r1; \ 642 exit; \ 643 " ::: __clobber_all); 644 } 645 646 SEC("socket") 647 __description("SMOD64, non-zero reg divisor, check 4") 648 __success __success_unpriv __retval(0) 649 __naked void smod64_non_zero_reg_4(void) 650 { 651 asm volatile (" \ 652 r0 = -42; \ 653 r1 = 2; \ 654 r0 s%%= r1; \ 655 exit; \ 656 " ::: __clobber_all); 657 } 658 659 SEC("socket") 660 __description("SMOD64, non-zero reg divisor, check 5") 661 __success __success_unpriv __retval(0) 662 __naked void smod64_non_zero_reg_5(void) 663 { 664 asm volatile (" \ 665 r0 = 42; \ 666 r1 = -2; \ 667 r0 s%%= r1; \ 668 exit; \ 669 " ::: __clobber_all); 670 } 671 672 SEC("socket") 673 __description("SMOD64, non-zero reg divisor, check 6") 674 __success __success_unpriv __retval(0) 675 __naked void smod64_non_zero_reg_6(void) 676 { 677 asm volatile (" \ 678 r0 = -42; \ 679 r1 = -2; \ 680 r0 s%%= r1; \ 681 exit; \ 682 " ::: __clobber_all); 683 } 684 685 SEC("socket") 686 __description("SMOD64, non-zero reg divisor, check 7") 687 __success __success_unpriv __retval(0) 688 __naked void smod64_non_zero_reg_7(void) 689 { 690 asm volatile (" \ 691 r0 = 42; \ 692 r1 = 2; \ 693 r0 s%%= r1; \ 694 exit; \ 695 " ::: __clobber_all); 696 } 697 698 SEC("socket") 699 __description("SMOD64, non-zero reg divisor, check 8") 700 __success __success_unpriv __retval(1) 701 __naked void smod64_non_zero_reg_8(void) 702 { 703 asm volatile (" \ 704 r0 = 41; \ 705 r1 = 2; \ 706 r0 s%%= r1; \ 707 exit; \ 708 " ::: __clobber_all); 709 } 710 711 SEC("socket") 712 __description("SDIV32, zero divisor") 713 __success __success_unpriv __retval(0) 714 __naked void sdiv32_zero_divisor(void) 715 { 716 asm volatile (" \ 717 w0 = 42; \ 718 w1 = 0; \ 719 w2 = -1; \ 720 w2 s/= w1; \ 721 w0 = w2; \ 722 exit; \ 723 " ::: __clobber_all); 724 } 725 726 SEC("socket") 727 __description("SDIV64, zero divisor") 728 __success __success_unpriv __retval(0) 729 __naked void sdiv64_zero_divisor(void) 730 { 731 asm volatile (" \ 732 r0 = 42; \ 733 r1 = 0; \ 734 r2 = -1; \ 735 r2 s/= r1; \ 736 r0 = r2; \ 737 exit; \ 738 " ::: __clobber_all); 739 } 740 741 SEC("socket") 742 __description("SMOD32, zero divisor") 743 __success __success_unpriv __retval(-1) 744 __naked void smod32_zero_divisor(void) 745 { 746 asm volatile (" \ 747 w0 = 42; \ 748 w1 = 0; \ 749 w2 = -1; \ 750 w2 s%%= w1; \ 751 w0 = w2; \ 752 exit; \ 753 " ::: __clobber_all); 754 } 755 756 SEC("socket") 757 __description("SMOD64, zero divisor") 758 __success __success_unpriv __retval(-1) 759 __naked void smod64_zero_divisor(void) 760 { 761 asm volatile (" \ 762 r0 = 42; \ 763 r1 = 0; \ 764 r2 = -1; \ 765 r2 s%%= r1; \ 766 r0 = r2; \ 767 exit; \ 768 " ::: __clobber_all); 769 } 770 771 #else 772 773 SEC("socket") 774 __description("cpuv4 is not supported by compiler or jit, use a dummy test") 775 __success 776 int dummy_test(void) 777 { 778 return 0; 779 } 780 781 #endif 782 783 char _license[] SEC("license") = "GPL"; 784