Commit 6c17a88
bpf, arm64: JIT support for private stack
The private stack is allocated in bpf_int_jit_compile() with 16-byte
alignment. It includes additional guard regions to detect stack
overflows and underflows at runtime.
Memory layout:
+------------------------------------------------------+
| |
| 16 bytes padding (overflow guard - stack top) |
| [ detects writes beyond top of stack ] |
BPF FP ->+------------------------------------------------------+
| |
| BPF private stack (sized by verifier) |
| [ 16-byte aligned ] |
| |
BPF PRIV SP ->+------------------------------------------------------+
| |
| 16 bytes padding (underflow guard - stack bottom) |
| [ detects accesses before start of stack ] |
| |
+------------------------------------------------------+
On detection of an overflow or underflow, the kernel emits messages
like:
BPF private stack overflow/underflow detected for prog <prog_name>
After commit bd737fc ("bpf, arm64: Get rid of fpb"), Jited BPF
programs use the stack in two ways:
1. Via the BPF frame pointer (top of stack), using negative offsets.
2. Via the stack pointer (bottom of stack), using positive offsets in
LDR/STR instructions.
When a private stack is used, ARM64 callee-saved register x27 replaces
the stack pointer. The BPF frame pointer usage remains unchanged; but
it now points to the top of the private stack.
Relevant tests (Enabled in following patch):
torvalds#415/1 struct_ops_private_stack/private_stack:OK
torvalds#415/2 struct_ops_private_stack/private_stack_fail:OK
torvalds#415/3 struct_ops_private_stack/private_stack_recur:OK
torvalds#415 struct_ops_private_stack:OK
torvalds#549/1 verifier_private_stack/Private stack, single prog:OK
torvalds#549/2 verifier_private_stack/Private stack, subtree > MAX_BPF_STACK:OK
torvalds#549/3 verifier_private_stack/No private stack:OK
torvalds#549/4 verifier_private_stack/Private stack, callback:OK
torvalds#549/5 verifier_private_stack/Private stack, exception in main prog:OK
torvalds#549/6 verifier_private_stack/Private stack, exception in subprog:OK
torvalds#549/7 verifier_private_stack/Private stack, async callback, not nested:OK
torvalds#549/8 verifier_private_stack/Private stack, async callback, potential nesting:OK
torvalds#549 verifier_private_stack:OK
Summary: 2/11 PASSED, 0 SKIPPED, 0 FAILED
Signed-off-by: Puranjay Mohan <[email protected]>
Signed-off-by: Daniel Borkmann <[email protected]>
Acked-by: Yonghong Song <[email protected]>
Link: https://lore.kernel.org/bpf/[email protected]1 parent 3ba5831 commit 6c17a88
1 file changed
+121
-12
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| 33 | + | |
33 | 34 | | |
34 | 35 | | |
35 | 36 | | |
| |||
68 | 69 | | |
69 | 70 | | |
70 | 71 | | |
| 72 | + | |
| 73 | + | |
71 | 74 | | |
72 | 75 | | |
73 | 76 | | |
| |||
86 | 89 | | |
87 | 90 | | |
88 | 91 | | |
| 92 | + | |
89 | 93 | | |
90 | 94 | | |
91 | 95 | | |
| |||
98 | 102 | | |
99 | 103 | | |
100 | 104 | | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
101 | 109 | | |
102 | 110 | | |
103 | 111 | | |
| |||
387 | 395 | | |
388 | 396 | | |
389 | 397 | | |
390 | | - | |
| 398 | + | |
391 | 399 | | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
392 | 403 | | |
393 | 404 | | |
394 | 405 | | |
| |||
462 | 473 | | |
463 | 474 | | |
464 | 475 | | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
465 | 489 | | |
466 | 490 | | |
467 | 491 | | |
| |||
477 | 501 | | |
478 | 502 | | |
479 | 503 | | |
| 504 | + | |
| 505 | + | |
480 | 506 | | |
481 | 507 | | |
482 | 508 | | |
| |||
552 | 578 | | |
553 | 579 | | |
554 | 580 | | |
555 | | - | |
556 | | - | |
557 | | - | |
558 | | - | |
559 | 581 | | |
560 | 582 | | |
561 | 583 | | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
562 | 596 | | |
563 | | - | |
| 597 | + | |
564 | 598 | | |
565 | 599 | | |
566 | 600 | | |
| |||
624 | 658 | | |
625 | 659 | | |
626 | 660 | | |
627 | | - | |
| 661 | + | |
628 | 662 | | |
629 | 663 | | |
630 | 664 | | |
| |||
992 | 1026 | | |
993 | 1027 | | |
994 | 1028 | | |
995 | | - | |
| 1029 | + | |
996 | 1030 | | |
997 | 1031 | | |
998 | 1032 | | |
| |||
1121 | 1155 | | |
1122 | 1156 | | |
1123 | 1157 | | |
| 1158 | + | |
1124 | 1159 | | |
1125 | 1160 | | |
1126 | 1161 | | |
| |||
1565 | 1600 | | |
1566 | 1601 | | |
1567 | 1602 | | |
1568 | | - | |
| 1603 | + | |
1569 | 1604 | | |
1570 | 1605 | | |
1571 | 1606 | | |
| |||
1655 | 1690 | | |
1656 | 1691 | | |
1657 | 1692 | | |
1658 | | - | |
| 1693 | + | |
1659 | 1694 | | |
1660 | 1695 | | |
1661 | 1696 | | |
| |||
1717 | 1752 | | |
1718 | 1753 | | |
1719 | 1754 | | |
1720 | | - | |
| 1755 | + | |
1721 | 1756 | | |
1722 | 1757 | | |
1723 | 1758 | | |
| |||
1860 | 1895 | | |
1861 | 1896 | | |
1862 | 1897 | | |
| 1898 | + | |
| 1899 | + | |
| 1900 | + | |
| 1901 | + | |
| 1902 | + | |
| 1903 | + | |
| 1904 | + | |
| 1905 | + | |
| 1906 | + | |
| 1907 | + | |
| 1908 | + | |
| 1909 | + | |
| 1910 | + | |
| 1911 | + | |
| 1912 | + | |
| 1913 | + | |
| 1914 | + | |
| 1915 | + | |
| 1916 | + | |
| 1917 | + | |
| 1918 | + | |
| 1919 | + | |
| 1920 | + | |
| 1921 | + | |
| 1922 | + | |
| 1923 | + | |
| 1924 | + | |
| 1925 | + | |
| 1926 | + | |
| 1927 | + | |
| 1928 | + | |
| 1929 | + | |
| 1930 | + | |
1863 | 1931 | | |
1864 | 1932 | | |
1865 | 1933 | | |
| |||
1872 | 1940 | | |
1873 | 1941 | | |
1874 | 1942 | | |
1875 | | - | |
| 1943 | + | |
1876 | 1944 | | |
| 1945 | + | |
1877 | 1946 | | |
| 1947 | + | |
1878 | 1948 | | |
1879 | 1949 | | |
1880 | 1950 | | |
| |||
1906 | 1976 | | |
1907 | 1977 | | |
1908 | 1978 | | |
| 1979 | + | |
| 1980 | + | |
| 1981 | + | |
| 1982 | + | |
| 1983 | + | |
| 1984 | + | |
| 1985 | + | |
| 1986 | + | |
| 1987 | + | |
| 1988 | + | |
| 1989 | + | |
| 1990 | + | |
| 1991 | + | |
| 1992 | + | |
| 1993 | + | |
| 1994 | + | |
| 1995 | + | |
1909 | 1996 | | |
1910 | 1997 | | |
1911 | 1998 | | |
| |||
1929 | 2016 | | |
1930 | 2017 | | |
1931 | 2018 | | |
| 2019 | + | |
| 2020 | + | |
| 2021 | + | |
1932 | 2022 | | |
1933 | 2023 | | |
1934 | 2024 | | |
| |||
2068 | 2158 | | |
2069 | 2159 | | |
2070 | 2160 | | |
| 2161 | + | |
| 2162 | + | |
| 2163 | + | |
| 2164 | + | |
2071 | 2165 | | |
| 2166 | + | |
2072 | 2167 | | |
2073 | 2168 | | |
2074 | 2169 | | |
| |||
2087 | 2182 | | |
2088 | 2183 | | |
2089 | 2184 | | |
| 2185 | + | |
| 2186 | + | |
| 2187 | + | |
| 2188 | + | |
| 2189 | + | |
2090 | 2190 | | |
2091 | 2191 | | |
2092 | 2192 | | |
| |||
2932 | 3032 | | |
2933 | 3033 | | |
2934 | 3034 | | |
| 3035 | + | |
| 3036 | + | |
2935 | 3037 | | |
2936 | 3038 | | |
2937 | 3039 | | |
| |||
2945 | 3047 | | |
2946 | 3048 | | |
2947 | 3049 | | |
| 3050 | + | |
| 3051 | + | |
| 3052 | + | |
| 3053 | + | |
| 3054 | + | |
| 3055 | + | |
| 3056 | + | |
2948 | 3057 | | |
2949 | 3058 | | |
2950 | 3059 | | |
| |||
0 commit comments