summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMichael Holzheu <holzheu@linux.vnet.ibm.com>2015-05-12 01:22:44 -0400
committerDavid S. Miller <davem@davemloft.net>2015-05-12 23:15:25 -0400
commitcffc642d93f9324a06dfbd7da9af29652952a248 (patch)
treeaff9454a155b39880d89e327ef40114cff9a776c /lib
parentb88c06e36dcb9b4ae285f7821f62d68dc34b25d3 (diff)
test_bpf: add 173 new testcases for eBPF
add an exhaustive set of eBPF tests bringing total to: test_bpf: Summary: 233 PASSED, 0 FAILED, [0/226 JIT'ed] Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com> Signed-off-by: Alexei Starovoitov <ast@plumgrid.com> Acked-by: Daniel Borkmann <daniel@iogearbox.net> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'lib')
-rw-r--r--lib/test_bpf.c2192
1 files changed, 2192 insertions, 0 deletions
diff --git a/lib/test_bpf.c b/lib/test_bpf.c
index 3c41049d72d8..8bca780e3613 100644
--- a/lib/test_bpf.c
+++ b/lib/test_bpf.c
@@ -1806,6 +1806,2198 @@ static struct bpf_test tests[] = {
1806 0x10, 0xbf, 0x48, 0xd6, 0x43, 0xd6}, 1806 0x10, 0xbf, 0x48, 0xd6, 0x43, 0xd6},
1807 { { 38, 256 } } 1807 { { 38, 256 } }
1808 }, 1808 },
1809 /* BPF_ALU | BPF_MOV | BPF_X */
1810 {
1811 "ALU_MOV_X: dst = 2",
1812 .u.insns_int = {
1813 BPF_ALU32_IMM(BPF_MOV, R1, 2),
1814 BPF_ALU32_REG(BPF_MOV, R0, R1),
1815 BPF_EXIT_INSN(),
1816 },
1817 INTERNAL,
1818 { },
1819 { { 0, 2 } },
1820 },
1821 {
1822 "ALU_MOV_X: dst = 4294967295",
1823 .u.insns_int = {
1824 BPF_ALU32_IMM(BPF_MOV, R1, 4294967295),
1825 BPF_ALU32_REG(BPF_MOV, R0, R1),
1826 BPF_EXIT_INSN(),
1827 },
1828 INTERNAL,
1829 { },
1830 { { 0, 4294967295 } },
1831 },
1832 {
1833 "ALU64_MOV_X: dst = 2",
1834 .u.insns_int = {
1835 BPF_ALU32_IMM(BPF_MOV, R1, 2),
1836 BPF_ALU64_REG(BPF_MOV, R0, R1),
1837 BPF_EXIT_INSN(),
1838 },
1839 INTERNAL,
1840 { },
1841 { { 0, 2 } },
1842 },
1843 {
1844 "ALU64_MOV_X: dst = 4294967295",
1845 .u.insns_int = {
1846 BPF_ALU32_IMM(BPF_MOV, R1, 4294967295),
1847 BPF_ALU64_REG(BPF_MOV, R0, R1),
1848 BPF_EXIT_INSN(),
1849 },
1850 INTERNAL,
1851 { },
1852 { { 0, 4294967295 } },
1853 },
1854 /* BPF_ALU | BPF_MOV | BPF_K */
1855 {
1856 "ALU_MOV_K: dst = 2",
1857 .u.insns_int = {
1858 BPF_ALU32_IMM(BPF_MOV, R0, 2),
1859 BPF_EXIT_INSN(),
1860 },
1861 INTERNAL,
1862 { },
1863 { { 0, 2 } },
1864 },
1865 {
1866 "ALU_MOV_K: dst = 4294967295",
1867 .u.insns_int = {
1868 BPF_ALU32_IMM(BPF_MOV, R0, 4294967295),
1869 BPF_EXIT_INSN(),
1870 },
1871 INTERNAL,
1872 { },
1873 { { 0, 4294967295 } },
1874 },
1875 {
1876 "ALU_MOV_K: 0x0000ffffffff0000 = 0x00000000ffffffff",
1877 .u.insns_int = {
1878 BPF_LD_IMM64(R2, 0x0000ffffffff0000),
1879 BPF_LD_IMM64(R3, 0x00000000ffffffff),
1880 BPF_ALU32_IMM(BPF_MOV, R2, 0xffffffff),
1881 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
1882 BPF_MOV32_IMM(R0, 2),
1883 BPF_EXIT_INSN(),
1884 BPF_MOV32_IMM(R0, 1),
1885 BPF_EXIT_INSN(),
1886 },
1887 INTERNAL,
1888 { },
1889 { { 0, 0x1 } },
1890 },
1891 {
1892 "ALU64_MOV_K: dst = 2",
1893 .u.insns_int = {
1894 BPF_ALU64_IMM(BPF_MOV, R0, 2),
1895 BPF_EXIT_INSN(),
1896 },
1897 INTERNAL,
1898 { },
1899 { { 0, 2 } },
1900 },
1901 {
1902 "ALU64_MOV_K: dst = 2147483647",
1903 .u.insns_int = {
1904 BPF_ALU64_IMM(BPF_MOV, R0, 2147483647),
1905 BPF_EXIT_INSN(),
1906 },
1907 INTERNAL,
1908 { },
1909 { { 0, 2147483647 } },
1910 },
1911 {
1912 "ALU64_OR_K: dst = 0x0",
1913 .u.insns_int = {
1914 BPF_LD_IMM64(R2, 0x0000ffffffff0000),
1915 BPF_LD_IMM64(R3, 0x0),
1916 BPF_ALU64_IMM(BPF_MOV, R2, 0x0),
1917 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
1918 BPF_MOV32_IMM(R0, 2),
1919 BPF_EXIT_INSN(),
1920 BPF_MOV32_IMM(R0, 1),
1921 BPF_EXIT_INSN(),
1922 },
1923 INTERNAL,
1924 { },
1925 { { 0, 0x1 } },
1926 },
1927 {
1928 "ALU64_MOV_K: dst = -1",
1929 .u.insns_int = {
1930 BPF_LD_IMM64(R2, 0x0000ffffffff0000),
1931 BPF_LD_IMM64(R3, 0xffffffffffffffff),
1932 BPF_ALU64_IMM(BPF_MOV, R2, 0xffffffff),
1933 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
1934 BPF_MOV32_IMM(R0, 2),
1935 BPF_EXIT_INSN(),
1936 BPF_MOV32_IMM(R0, 1),
1937 BPF_EXIT_INSN(),
1938 },
1939 INTERNAL,
1940 { },
1941 { { 0, 0x1 } },
1942 },
1943 /* BPF_ALU | BPF_ADD | BPF_X */
1944 {
1945 "ALU_ADD_X: 1 + 2 = 3",
1946 .u.insns_int = {
1947 BPF_LD_IMM64(R0, 1),
1948 BPF_ALU32_IMM(BPF_MOV, R1, 2),
1949 BPF_ALU32_REG(BPF_ADD, R0, R1),
1950 BPF_EXIT_INSN(),
1951 },
1952 INTERNAL,
1953 { },
1954 { { 0, 3 } },
1955 },
1956 {
1957 "ALU_ADD_X: 1 + 4294967294 = 4294967295",
1958 .u.insns_int = {
1959 BPF_LD_IMM64(R0, 1),
1960 BPF_ALU32_IMM(BPF_MOV, R1, 4294967294),
1961 BPF_ALU32_REG(BPF_ADD, R0, R1),
1962 BPF_EXIT_INSN(),
1963 },
1964 INTERNAL,
1965 { },
1966 { { 0, 4294967295 } },
1967 },
1968 {
1969 "ALU64_ADD_X: 1 + 2 = 3",
1970 .u.insns_int = {
1971 BPF_LD_IMM64(R0, 1),
1972 BPF_ALU32_IMM(BPF_MOV, R1, 2),
1973 BPF_ALU64_REG(BPF_ADD, R0, R1),
1974 BPF_EXIT_INSN(),
1975 },
1976 INTERNAL,
1977 { },
1978 { { 0, 3 } },
1979 },
1980 {
1981 "ALU64_ADD_X: 1 + 4294967294 = 4294967295",
1982 .u.insns_int = {
1983 BPF_LD_IMM64(R0, 1),
1984 BPF_ALU32_IMM(BPF_MOV, R1, 4294967294),
1985 BPF_ALU64_REG(BPF_ADD, R0, R1),
1986 BPF_EXIT_INSN(),
1987 },
1988 INTERNAL,
1989 { },
1990 { { 0, 4294967295 } },
1991 },
1992 /* BPF_ALU | BPF_ADD | BPF_K */
1993 {
1994 "ALU_ADD_K: 1 + 2 = 3",
1995 .u.insns_int = {
1996 BPF_LD_IMM64(R0, 1),
1997 BPF_ALU32_IMM(BPF_ADD, R0, 2),
1998 BPF_EXIT_INSN(),
1999 },
2000 INTERNAL,
2001 { },
2002 { { 0, 3 } },
2003 },
2004 {
2005 "ALU_ADD_K: 3 + 0 = 3",
2006 .u.insns_int = {
2007 BPF_LD_IMM64(R0, 3),
2008 BPF_ALU32_IMM(BPF_ADD, R0, 0),
2009 BPF_EXIT_INSN(),
2010 },
2011 INTERNAL,
2012 { },
2013 { { 0, 3 } },
2014 },
2015 {
2016 "ALU_ADD_K: 1 + 4294967294 = 4294967295",
2017 .u.insns_int = {
2018 BPF_LD_IMM64(R0, 1),
2019 BPF_ALU32_IMM(BPF_ADD, R0, 4294967294),
2020 BPF_EXIT_INSN(),
2021 },
2022 INTERNAL,
2023 { },
2024 { { 0, 4294967295 } },
2025 },
2026 {
2027 "ALU_ADD_K: 0 + (-1) = 0x00000000ffffffff",
2028 .u.insns_int = {
2029 BPF_LD_IMM64(R2, 0x0),
2030 BPF_LD_IMM64(R3, 0x00000000ffffffff),
2031 BPF_ALU32_IMM(BPF_ADD, R2, 0xffffffff),
2032 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
2033 BPF_MOV32_IMM(R0, 2),
2034 BPF_EXIT_INSN(),
2035 BPF_MOV32_IMM(R0, 1),
2036 BPF_EXIT_INSN(),
2037 },
2038 INTERNAL,
2039 { },
2040 { { 0, 0x1 } },
2041 },
2042 {
2043 "ALU64_ADD_K: 1 + 2 = 3",
2044 .u.insns_int = {
2045 BPF_LD_IMM64(R0, 1),
2046 BPF_ALU64_IMM(BPF_ADD, R0, 2),
2047 BPF_EXIT_INSN(),
2048 },
2049 INTERNAL,
2050 { },
2051 { { 0, 3 } },
2052 },
2053 {
2054 "ALU64_ADD_K: 3 + 0 = 3",
2055 .u.insns_int = {
2056 BPF_LD_IMM64(R0, 3),
2057 BPF_ALU64_IMM(BPF_ADD, R0, 0),
2058 BPF_EXIT_INSN(),
2059 },
2060 INTERNAL,
2061 { },
2062 { { 0, 3 } },
2063 },
2064 {
2065 "ALU64_ADD_K: 1 + 2147483646 = 2147483647",
2066 .u.insns_int = {
2067 BPF_LD_IMM64(R0, 1),
2068 BPF_ALU64_IMM(BPF_ADD, R0, 2147483646),
2069 BPF_EXIT_INSN(),
2070 },
2071 INTERNAL,
2072 { },
2073 { { 0, 2147483647 } },
2074 },
2075 {
2076 "ALU64_ADD_K: 2147483646 + -2147483647 = -1",
2077 .u.insns_int = {
2078 BPF_LD_IMM64(R0, 2147483646),
2079 BPF_ALU64_IMM(BPF_ADD, R0, -2147483647),
2080 BPF_EXIT_INSN(),
2081 },
2082 INTERNAL,
2083 { },
2084 { { 0, -1 } },
2085 },
2086 {
2087 "ALU64_ADD_K: 1 + 0 = 1",
2088 .u.insns_int = {
2089 BPF_LD_IMM64(R2, 0x1),
2090 BPF_LD_IMM64(R3, 0x1),
2091 BPF_ALU64_IMM(BPF_ADD, R2, 0x0),
2092 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
2093 BPF_MOV32_IMM(R0, 2),
2094 BPF_EXIT_INSN(),
2095 BPF_MOV32_IMM(R0, 1),
2096 BPF_EXIT_INSN(),
2097 },
2098 INTERNAL,
2099 { },
2100 { { 0, 0x1 } },
2101 },
2102 {
2103 "ALU64_ADD_K: 0 + (-1) = 0xffffffffffffffff",
2104 .u.insns_int = {
2105 BPF_LD_IMM64(R2, 0x0),
2106 BPF_LD_IMM64(R3, 0xffffffffffffffff),
2107 BPF_ALU64_IMM(BPF_ADD, R2, 0xffffffff),
2108 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
2109 BPF_MOV32_IMM(R0, 2),
2110 BPF_EXIT_INSN(),
2111 BPF_MOV32_IMM(R0, 1),
2112 BPF_EXIT_INSN(),
2113 },
2114 INTERNAL,
2115 { },
2116 { { 0, 0x1 } },
2117 },
2118 /* BPF_ALU | BPF_SUB | BPF_X */
2119 {
2120 "ALU_SUB_X: 3 - 1 = 2",
2121 .u.insns_int = {
2122 BPF_LD_IMM64(R0, 3),
2123 BPF_ALU32_IMM(BPF_MOV, R1, 1),
2124 BPF_ALU32_REG(BPF_SUB, R0, R1),
2125 BPF_EXIT_INSN(),
2126 },
2127 INTERNAL,
2128 { },
2129 { { 0, 2 } },
2130 },
2131 {
2132 "ALU_SUB_X: 4294967295 - 4294967294 = 1",
2133 .u.insns_int = {
2134 BPF_LD_IMM64(R0, 4294967295),
2135 BPF_ALU32_IMM(BPF_MOV, R1, 4294967294),
2136 BPF_ALU32_REG(BPF_SUB, R0, R1),
2137 BPF_EXIT_INSN(),
2138 },
2139 INTERNAL,
2140 { },
2141 { { 0, 1 } },
2142 },
2143 {
2144 "ALU64_SUB_X: 3 - 1 = 2",
2145 .u.insns_int = {
2146 BPF_LD_IMM64(R0, 3),
2147 BPF_ALU32_IMM(BPF_MOV, R1, 1),
2148 BPF_ALU64_REG(BPF_SUB, R0, R1),
2149 BPF_EXIT_INSN(),
2150 },
2151 INTERNAL,
2152 { },
2153 { { 0, 2 } },
2154 },
2155 {
2156 "ALU64_SUB_X: 4294967295 - 4294967294 = 1",
2157 .u.insns_int = {
2158 BPF_LD_IMM64(R0, 4294967295),
2159 BPF_ALU32_IMM(BPF_MOV, R1, 4294967294),
2160 BPF_ALU64_REG(BPF_SUB, R0, R1),
2161 BPF_EXIT_INSN(),
2162 },
2163 INTERNAL,
2164 { },
2165 { { 0, 1 } },
2166 },
2167 /* BPF_ALU | BPF_SUB | BPF_K */
2168 {
2169 "ALU_SUB_K: 3 - 1 = 2",
2170 .u.insns_int = {
2171 BPF_LD_IMM64(R0, 3),
2172 BPF_ALU32_IMM(BPF_SUB, R0, 1),
2173 BPF_EXIT_INSN(),
2174 },
2175 INTERNAL,
2176 { },
2177 { { 0, 2 } },
2178 },
2179 {
2180 "ALU_SUB_K: 3 - 0 = 3",
2181 .u.insns_int = {
2182 BPF_LD_IMM64(R0, 3),
2183 BPF_ALU32_IMM(BPF_SUB, R0, 0),
2184 BPF_EXIT_INSN(),
2185 },
2186 INTERNAL,
2187 { },
2188 { { 0, 3 } },
2189 },
2190 {
2191 "ALU_SUB_K: 4294967295 - 4294967294 = 1",
2192 .u.insns_int = {
2193 BPF_LD_IMM64(R0, 4294967295),
2194 BPF_ALU32_IMM(BPF_SUB, R0, 4294967294),
2195 BPF_EXIT_INSN(),
2196 },
2197 INTERNAL,
2198 { },
2199 { { 0, 1 } },
2200 },
2201 {
2202 "ALU64_SUB_K: 3 - 1 = 2",
2203 .u.insns_int = {
2204 BPF_LD_IMM64(R0, 3),
2205 BPF_ALU64_IMM(BPF_SUB, R0, 1),
2206 BPF_EXIT_INSN(),
2207 },
2208 INTERNAL,
2209 { },
2210 { { 0, 2 } },
2211 },
2212 {
2213 "ALU64_SUB_K: 3 - 0 = 3",
2214 .u.insns_int = {
2215 BPF_LD_IMM64(R0, 3),
2216 BPF_ALU64_IMM(BPF_SUB, R0, 0),
2217 BPF_EXIT_INSN(),
2218 },
2219 INTERNAL,
2220 { },
2221 { { 0, 3 } },
2222 },
2223 {
2224 "ALU64_SUB_K: 4294967294 - 4294967295 = -1",
2225 .u.insns_int = {
2226 BPF_LD_IMM64(R0, 4294967294),
2227 BPF_ALU64_IMM(BPF_SUB, R0, 4294967295),
2228 BPF_EXIT_INSN(),
2229 },
2230 INTERNAL,
2231 { },
2232 { { 0, -1 } },
2233 },
2234 {
2235 "ALU64_ADD_K: 2147483646 - 2147483647 = -1",
2236 .u.insns_int = {
2237 BPF_LD_IMM64(R0, 2147483646),
2238 BPF_ALU64_IMM(BPF_SUB, R0, 2147483647),
2239 BPF_EXIT_INSN(),
2240 },
2241 INTERNAL,
2242 { },
2243 { { 0, -1 } },
2244 },
2245 /* BPF_ALU | BPF_MUL | BPF_X */
2246 {
2247 "ALU_MUL_X: 2 * 3 = 6",
2248 .u.insns_int = {
2249 BPF_LD_IMM64(R0, 2),
2250 BPF_ALU32_IMM(BPF_MOV, R1, 3),
2251 BPF_ALU32_REG(BPF_MUL, R0, R1),
2252 BPF_EXIT_INSN(),
2253 },
2254 INTERNAL,
2255 { },
2256 { { 0, 6 } },
2257 },
2258 {
2259 "ALU_MUL_X: 2 * 0x7FFFFFF8 = 0xFFFFFFF0",
2260 .u.insns_int = {
2261 BPF_LD_IMM64(R0, 2),
2262 BPF_ALU32_IMM(BPF_MOV, R1, 0x7FFFFFF8),
2263 BPF_ALU32_REG(BPF_MUL, R0, R1),
2264 BPF_EXIT_INSN(),
2265 },
2266 INTERNAL,
2267 { },
2268 { { 0, 0xFFFFFFF0 } },
2269 },
2270 {
2271 "ALU_MUL_X: -1 * -1 = 1",
2272 .u.insns_int = {
2273 BPF_LD_IMM64(R0, -1),
2274 BPF_ALU32_IMM(BPF_MOV, R1, -1),
2275 BPF_ALU32_REG(BPF_MUL, R0, R1),
2276 BPF_EXIT_INSN(),
2277 },
2278 INTERNAL,
2279 { },
2280 { { 0, 1 } },
2281 },
2282 {
2283 "ALU64_MUL_X: 2 * 3 = 6",
2284 .u.insns_int = {
2285 BPF_LD_IMM64(R0, 2),
2286 BPF_ALU32_IMM(BPF_MOV, R1, 3),
2287 BPF_ALU64_REG(BPF_MUL, R0, R1),
2288 BPF_EXIT_INSN(),
2289 },
2290 INTERNAL,
2291 { },
2292 { { 0, 6 } },
2293 },
2294 {
2295 "ALU64_MUL_X: 1 * 2147483647 = 2147483647",
2296 .u.insns_int = {
2297 BPF_LD_IMM64(R0, 1),
2298 BPF_ALU32_IMM(BPF_MOV, R1, 2147483647),
2299 BPF_ALU64_REG(BPF_MUL, R0, R1),
2300 BPF_EXIT_INSN(),
2301 },
2302 INTERNAL,
2303 { },
2304 { { 0, 2147483647 } },
2305 },
2306 /* BPF_ALU | BPF_MUL | BPF_K */
2307 {
2308 "ALU_MUL_K: 2 * 3 = 6",
2309 .u.insns_int = {
2310 BPF_LD_IMM64(R0, 2),
2311 BPF_ALU32_IMM(BPF_MUL, R0, 3),
2312 BPF_EXIT_INSN(),
2313 },
2314 INTERNAL,
2315 { },
2316 { { 0, 6 } },
2317 },
2318 {
2319 "ALU_MUL_K: 3 * 1 = 3",
2320 .u.insns_int = {
2321 BPF_LD_IMM64(R0, 3),
2322 BPF_ALU32_IMM(BPF_MUL, R0, 1),
2323 BPF_EXIT_INSN(),
2324 },
2325 INTERNAL,
2326 { },
2327 { { 0, 3 } },
2328 },
2329 {
2330 "ALU_MUL_K: 2 * 0x7FFFFFF8 = 0xFFFFFFF0",
2331 .u.insns_int = {
2332 BPF_LD_IMM64(R0, 2),
2333 BPF_ALU32_IMM(BPF_MUL, R0, 0x7FFFFFF8),
2334 BPF_EXIT_INSN(),
2335 },
2336 INTERNAL,
2337 { },
2338 { { 0, 0xFFFFFFF0 } },
2339 },
2340 {
2341 "ALU_MUL_K: 1 * (-1) = 0x00000000ffffffff",
2342 .u.insns_int = {
2343 BPF_LD_IMM64(R2, 0x1),
2344 BPF_LD_IMM64(R3, 0x00000000ffffffff),
2345 BPF_ALU32_IMM(BPF_MUL, R2, 0xffffffff),
2346 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
2347 BPF_MOV32_IMM(R0, 2),
2348 BPF_EXIT_INSN(),
2349 BPF_MOV32_IMM(R0, 1),
2350 BPF_EXIT_INSN(),
2351 },
2352 INTERNAL,
2353 { },
2354 { { 0, 0x1 } },
2355 },
2356 {
2357 "ALU64_MUL_K: 2 * 3 = 6",
2358 .u.insns_int = {
2359 BPF_LD_IMM64(R0, 2),
2360 BPF_ALU64_IMM(BPF_MUL, R0, 3),
2361 BPF_EXIT_INSN(),
2362 },
2363 INTERNAL,
2364 { },
2365 { { 0, 6 } },
2366 },
2367 {
2368 "ALU64_MUL_K: 3 * 1 = 3",
2369 .u.insns_int = {
2370 BPF_LD_IMM64(R0, 3),
2371 BPF_ALU64_IMM(BPF_MUL, R0, 1),
2372 BPF_EXIT_INSN(),
2373 },
2374 INTERNAL,
2375 { },
2376 { { 0, 3 } },
2377 },
2378 {
2379 "ALU64_MUL_K: 1 * 2147483647 = 2147483647",
2380 .u.insns_int = {
2381 BPF_LD_IMM64(R0, 1),
2382 BPF_ALU64_IMM(BPF_MUL, R0, 2147483647),
2383 BPF_EXIT_INSN(),
2384 },
2385 INTERNAL,
2386 { },
2387 { { 0, 2147483647 } },
2388 },
2389 {
2390 "ALU64_MUL_K: 1 * -2147483647 = -2147483647",
2391 .u.insns_int = {
2392 BPF_LD_IMM64(R0, 1),
2393 BPF_ALU64_IMM(BPF_MUL, R0, -2147483647),
2394 BPF_EXIT_INSN(),
2395 },
2396 INTERNAL,
2397 { },
2398 { { 0, -2147483647 } },
2399 },
2400 {
2401 "ALU64_MUL_K: 1 * (-1) = 0xffffffffffffffff",
2402 .u.insns_int = {
2403 BPF_LD_IMM64(R2, 0x1),
2404 BPF_LD_IMM64(R3, 0xffffffffffffffff),
2405 BPF_ALU64_IMM(BPF_MUL, R2, 0xffffffff),
2406 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
2407 BPF_MOV32_IMM(R0, 2),
2408 BPF_EXIT_INSN(),
2409 BPF_MOV32_IMM(R0, 1),
2410 BPF_EXIT_INSN(),
2411 },
2412 INTERNAL,
2413 { },
2414 { { 0, 0x1 } },
2415 },
2416 /* BPF_ALU | BPF_DIV | BPF_X */
2417 {
2418 "ALU_DIV_X: 6 / 2 = 3",
2419 .u.insns_int = {
2420 BPF_LD_IMM64(R0, 6),
2421 BPF_ALU32_IMM(BPF_MOV, R1, 2),
2422 BPF_ALU32_REG(BPF_DIV, R0, R1),
2423 BPF_EXIT_INSN(),
2424 },
2425 INTERNAL,
2426 { },
2427 { { 0, 3 } },
2428 },
2429 {
2430 "ALU_DIV_X: 4294967295 / 4294967295 = 1",
2431 .u.insns_int = {
2432 BPF_LD_IMM64(R0, 4294967295),
2433 BPF_ALU32_IMM(BPF_MOV, R1, 4294967295),
2434 BPF_ALU32_REG(BPF_DIV, R0, R1),
2435 BPF_EXIT_INSN(),
2436 },
2437 INTERNAL,
2438 { },
2439 { { 0, 1 } },
2440 },
2441 {
2442 "ALU64_DIV_X: 6 / 2 = 3",
2443 .u.insns_int = {
2444 BPF_LD_IMM64(R0, 6),
2445 BPF_ALU32_IMM(BPF_MOV, R1, 2),
2446 BPF_ALU64_REG(BPF_DIV, R0, R1),
2447 BPF_EXIT_INSN(),
2448 },
2449 INTERNAL,
2450 { },
2451 { { 0, 3 } },
2452 },
2453 {
2454 "ALU64_DIV_X: 2147483647 / 2147483647 = 1",
2455 .u.insns_int = {
2456 BPF_LD_IMM64(R0, 2147483647),
2457 BPF_ALU32_IMM(BPF_MOV, R1, 2147483647),
2458 BPF_ALU64_REG(BPF_DIV, R0, R1),
2459 BPF_EXIT_INSN(),
2460 },
2461 INTERNAL,
2462 { },
2463 { { 0, 1 } },
2464 },
2465 {
2466 "ALU64_DIV_X: 0xffffffffffffffff / (-1) = 0x0000000000000001",
2467 .u.insns_int = {
2468 BPF_LD_IMM64(R2, 0xffffffffffffffffUL),
2469 BPF_LD_IMM64(R4, 0xffffffffffffffffUL),
2470 BPF_LD_IMM64(R3, 0x0000000000000001UL),
2471 BPF_ALU64_REG(BPF_DIV, R2, R4),
2472 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
2473 BPF_MOV32_IMM(R0, 2),
2474 BPF_EXIT_INSN(),
2475 BPF_MOV32_IMM(R0, 1),
2476 BPF_EXIT_INSN(),
2477 },
2478 INTERNAL,
2479 { },
2480 { { 0, 0x1 } },
2481 },
2482 /* BPF_ALU | BPF_DIV | BPF_K */
2483 {
2484 "ALU_DIV_K: 6 / 2 = 3",
2485 .u.insns_int = {
2486 BPF_LD_IMM64(R0, 6),
2487 BPF_ALU32_IMM(BPF_DIV, R0, 2),
2488 BPF_EXIT_INSN(),
2489 },
2490 INTERNAL,
2491 { },
2492 { { 0, 3 } },
2493 },
2494 {
2495 "ALU_DIV_K: 3 / 1 = 3",
2496 .u.insns_int = {
2497 BPF_LD_IMM64(R0, 3),
2498 BPF_ALU32_IMM(BPF_DIV, R0, 1),
2499 BPF_EXIT_INSN(),
2500 },
2501 INTERNAL,
2502 { },
2503 { { 0, 3 } },
2504 },
2505 {
2506 "ALU_DIV_K: 4294967295 / 4294967295 = 1",
2507 .u.insns_int = {
2508 BPF_LD_IMM64(R0, 4294967295),
2509 BPF_ALU32_IMM(BPF_DIV, R0, 4294967295),
2510 BPF_EXIT_INSN(),
2511 },
2512 INTERNAL,
2513 { },
2514 { { 0, 1 } },
2515 },
2516 {
2517 "ALU_DIV_K: 0xffffffffffffffff / (-1) = 0x1",
2518 .u.insns_int = {
2519 BPF_LD_IMM64(R2, 0xffffffffffffffffUL),
2520 BPF_LD_IMM64(R3, 0x1UL),
2521 BPF_ALU32_IMM(BPF_DIV, R2, 0xffffffff),
2522 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
2523 BPF_MOV32_IMM(R0, 2),
2524 BPF_EXIT_INSN(),
2525 BPF_MOV32_IMM(R0, 1),
2526 BPF_EXIT_INSN(),
2527 },
2528 INTERNAL,
2529 { },
2530 { { 0, 0x1 } },
2531 },
2532 {
2533 "ALU64_DIV_K: 6 / 2 = 3",
2534 .u.insns_int = {
2535 BPF_LD_IMM64(R0, 6),
2536 BPF_ALU64_IMM(BPF_DIV, R0, 2),
2537 BPF_EXIT_INSN(),
2538 },
2539 INTERNAL,
2540 { },
2541 { { 0, 3 } },
2542 },
2543 {
2544 "ALU64_DIV_K: 3 / 1 = 3",
2545 .u.insns_int = {
2546 BPF_LD_IMM64(R0, 3),
2547 BPF_ALU64_IMM(BPF_DIV, R0, 1),
2548 BPF_EXIT_INSN(),
2549 },
2550 INTERNAL,
2551 { },
2552 { { 0, 3 } },
2553 },
2554 {
2555 "ALU64_DIV_K: 2147483647 / 2147483647 = 1",
2556 .u.insns_int = {
2557 BPF_LD_IMM64(R0, 2147483647),
2558 BPF_ALU64_IMM(BPF_DIV, R0, 2147483647),
2559 BPF_EXIT_INSN(),
2560 },
2561 INTERNAL,
2562 { },
2563 { { 0, 1 } },
2564 },
2565 {
2566 "ALU64_DIV_K: 0xffffffffffffffff / (-1) = 0x0000000000000001",
2567 .u.insns_int = {
2568 BPF_LD_IMM64(R2, 0xffffffffffffffffUL),
2569 BPF_LD_IMM64(R3, 0x0000000000000001UL),
2570 BPF_ALU64_IMM(BPF_DIV, R2, 0xffffffff),
2571 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
2572 BPF_MOV32_IMM(R0, 2),
2573 BPF_EXIT_INSN(),
2574 BPF_MOV32_IMM(R0, 1),
2575 BPF_EXIT_INSN(),
2576 },
2577 INTERNAL,
2578 { },
2579 { { 0, 0x1 } },
2580 },
2581 /* BPF_ALU | BPF_MOD | BPF_X */
2582 {
2583 "ALU_MOD_X: 3 % 2 = 1",
2584 .u.insns_int = {
2585 BPF_LD_IMM64(R0, 3),
2586 BPF_ALU32_IMM(BPF_MOV, R1, 2),
2587 BPF_ALU32_REG(BPF_MOD, R0, R1),
2588 BPF_EXIT_INSN(),
2589 },
2590 INTERNAL,
2591 { },
2592 { { 0, 1 } },
2593 },
2594 {
2595 "ALU_MOD_X: 4294967295 % 4294967293 = 2",
2596 .u.insns_int = {
2597 BPF_LD_IMM64(R0, 4294967295),
2598 BPF_ALU32_IMM(BPF_MOV, R1, 4294967293),
2599 BPF_ALU32_REG(BPF_MOD, R0, R1),
2600 BPF_EXIT_INSN(),
2601 },
2602 INTERNAL,
2603 { },
2604 { { 0, 2 } },
2605 },
2606 {
2607 "ALU64_MOD_X: 3 % 2 = 1",
2608 .u.insns_int = {
2609 BPF_LD_IMM64(R0, 3),
2610 BPF_ALU32_IMM(BPF_MOV, R1, 2),
2611 BPF_ALU64_REG(BPF_MOD, R0, R1),
2612 BPF_EXIT_INSN(),
2613 },
2614 INTERNAL,
2615 { },
2616 { { 0, 1 } },
2617 },
2618 {
2619 "ALU64_MOD_X: 2147483647 % 2147483645 = 2",
2620 .u.insns_int = {
2621 BPF_LD_IMM64(R0, 2147483647),
2622 BPF_ALU32_IMM(BPF_MOV, R1, 2147483645),
2623 BPF_ALU64_REG(BPF_MOD, R0, R1),
2624 BPF_EXIT_INSN(),
2625 },
2626 INTERNAL,
2627 { },
2628 { { 0, 2 } },
2629 },
2630 /* BPF_ALU | BPF_MOD | BPF_K */
2631 {
2632 "ALU_MOD_K: 3 % 2 = 1",
2633 .u.insns_int = {
2634 BPF_LD_IMM64(R0, 3),
2635 BPF_ALU32_IMM(BPF_MOD, R0, 2),
2636 BPF_EXIT_INSN(),
2637 },
2638 INTERNAL,
2639 { },
2640 { { 0, 1 } },
2641 },
2642 {
2643 "ALU_MOD_K: 3 % 1 = 0",
2644 .u.insns_int = {
2645 BPF_LD_IMM64(R0, 3),
2646 BPF_ALU32_IMM(BPF_MOD, R0, 1),
2647 BPF_EXIT_INSN(),
2648 },
2649 INTERNAL,
2650 { },
2651 { { 0, 0 } },
2652 },
2653 {
2654 "ALU_MOD_K: 4294967295 % 4294967293 = 2",
2655 .u.insns_int = {
2656 BPF_LD_IMM64(R0, 4294967295),
2657 BPF_ALU32_IMM(BPF_MOD, R0, 4294967293),
2658 BPF_EXIT_INSN(),
2659 },
2660 INTERNAL,
2661 { },
2662 { { 0, 2 } },
2663 },
2664 {
2665 "ALU64_MOD_K: 3 % 2 = 1",
2666 .u.insns_int = {
2667 BPF_LD_IMM64(R0, 3),
2668 BPF_ALU64_IMM(BPF_MOD, R0, 2),
2669 BPF_EXIT_INSN(),
2670 },
2671 INTERNAL,
2672 { },
2673 { { 0, 1 } },
2674 },
2675 {
2676 "ALU64_MOD_K: 3 % 1 = 0",
2677 .u.insns_int = {
2678 BPF_LD_IMM64(R0, 3),
2679 BPF_ALU64_IMM(BPF_MOD, R0, 1),
2680 BPF_EXIT_INSN(),
2681 },
2682 INTERNAL,
2683 { },
2684 { { 0, 0 } },
2685 },
2686 {
2687 "ALU64_MOD_K: 2147483647 % 2147483645 = 2",
2688 .u.insns_int = {
2689 BPF_LD_IMM64(R0, 2147483647),
2690 BPF_ALU64_IMM(BPF_MOD, R0, 2147483645),
2691 BPF_EXIT_INSN(),
2692 },
2693 INTERNAL,
2694 { },
2695 { { 0, 2 } },
2696 },
2697 /* BPF_ALU | BPF_AND | BPF_X */
2698 {
2699 "ALU_AND_X: 3 & 2 = 2",
2700 .u.insns_int = {
2701 BPF_LD_IMM64(R0, 3),
2702 BPF_ALU32_IMM(BPF_MOV, R1, 2),
2703 BPF_ALU32_REG(BPF_AND, R0, R1),
2704 BPF_EXIT_INSN(),
2705 },
2706 INTERNAL,
2707 { },
2708 { { 0, 2 } },
2709 },
2710 {
2711 "ALU_AND_X: 0xffffffff & 0xffffffff = 0xffffffff",
2712 .u.insns_int = {
2713 BPF_LD_IMM64(R0, 0xffffffff),
2714 BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
2715 BPF_ALU32_REG(BPF_AND, R0, R1),
2716 BPF_EXIT_INSN(),
2717 },
2718 INTERNAL,
2719 { },
2720 { { 0, 0xffffffff } },
2721 },
2722 {
2723 "ALU64_AND_X: 3 & 2 = 2",
2724 .u.insns_int = {
2725 BPF_LD_IMM64(R0, 3),
2726 BPF_ALU32_IMM(BPF_MOV, R1, 2),
2727 BPF_ALU64_REG(BPF_AND, R0, R1),
2728 BPF_EXIT_INSN(),
2729 },
2730 INTERNAL,
2731 { },
2732 { { 0, 2 } },
2733 },
2734 {
2735 "ALU64_AND_X: 0xffffffff & 0xffffffff = 0xffffffff",
2736 .u.insns_int = {
2737 BPF_LD_IMM64(R0, 0xffffffff),
2738 BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
2739 BPF_ALU64_REG(BPF_AND, R0, R1),
2740 BPF_EXIT_INSN(),
2741 },
2742 INTERNAL,
2743 { },
2744 { { 0, 0xffffffff } },
2745 },
2746 /* BPF_ALU | BPF_AND | BPF_K */
2747 {
2748 "ALU_AND_K: 3 & 2 = 2",
2749 .u.insns_int = {
2750 BPF_LD_IMM64(R0, 3),
2751 BPF_ALU32_IMM(BPF_AND, R0, 2),
2752 BPF_EXIT_INSN(),
2753 },
2754 INTERNAL,
2755 { },
2756 { { 0, 2 } },
2757 },
2758 {
2759 "ALU_AND_K: 0xffffffff & 0xffffffff = 0xffffffff",
2760 .u.insns_int = {
2761 BPF_LD_IMM64(R0, 0xffffffff),
2762 BPF_ALU32_IMM(BPF_AND, R0, 0xffffffff),
2763 BPF_EXIT_INSN(),
2764 },
2765 INTERNAL,
2766 { },
2767 { { 0, 0xffffffff } },
2768 },
2769 {
2770 "ALU64_AND_K: 3 & 2 = 2",
2771 .u.insns_int = {
2772 BPF_LD_IMM64(R0, 3),
2773 BPF_ALU64_IMM(BPF_AND, R0, 2),
2774 BPF_EXIT_INSN(),
2775 },
2776 INTERNAL,
2777 { },
2778 { { 0, 2 } },
2779 },
2780 {
2781 "ALU64_AND_K: 0xffffffff & 0xffffffff = 0xffffffff",
2782 .u.insns_int = {
2783 BPF_LD_IMM64(R0, 0xffffffff),
2784 BPF_ALU64_IMM(BPF_AND, R0, 0xffffffff),
2785 BPF_EXIT_INSN(),
2786 },
2787 INTERNAL,
2788 { },
2789 { { 0, 0xffffffff } },
2790 },
2791 {
2792 "ALU64_AND_K: 0x0000ffffffff0000 & 0x0 = 0x0000ffff00000000",
2793 .u.insns_int = {
2794 BPF_LD_IMM64(R2, 0x0000ffffffff0000),
2795 BPF_LD_IMM64(R3, 0x0000000000000000),
2796 BPF_ALU64_IMM(BPF_AND, R2, 0x0),
2797 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
2798 BPF_MOV32_IMM(R0, 2),
2799 BPF_EXIT_INSN(),
2800 BPF_MOV32_IMM(R0, 1),
2801 BPF_EXIT_INSN(),
2802 },
2803 INTERNAL,
2804 { },
2805 { { 0, 0x1 } },
2806 },
2807 {
2808 "ALU64_AND_K: 0x0000ffffffff0000 & -1 = 0x0000ffffffffffff",
2809 .u.insns_int = {
2810 BPF_LD_IMM64(R2, 0x0000ffffffff0000),
2811 BPF_LD_IMM64(R3, 0x0000ffffffff0000),
2812 BPF_ALU64_IMM(BPF_AND, R2, 0xffffffff),
2813 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
2814 BPF_MOV32_IMM(R0, 2),
2815 BPF_EXIT_INSN(),
2816 BPF_MOV32_IMM(R0, 1),
2817 BPF_EXIT_INSN(),
2818 },
2819 INTERNAL,
2820 { },
2821 { { 0, 0x1 } },
2822 },
2823 {
2824 "ALU64_AND_K: 0xffffffffffffffff & -1 = 0xffffffffffffffff",
2825 .u.insns_int = {
2826 BPF_LD_IMM64(R2, 0xffffffffffffffff),
2827 BPF_LD_IMM64(R3, 0xffffffffffffffff),
2828 BPF_ALU64_IMM(BPF_AND, R2, 0xffffffff),
2829 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
2830 BPF_MOV32_IMM(R0, 2),
2831 BPF_EXIT_INSN(),
2832 BPF_MOV32_IMM(R0, 1),
2833 BPF_EXIT_INSN(),
2834 },
2835 INTERNAL,
2836 { },
2837 { { 0, 0x1 } },
2838 },
2839 /* BPF_ALU | BPF_OR | BPF_X */
2840 {
2841 "ALU_OR_X: 1 | 2 = 3",
2842 .u.insns_int = {
2843 BPF_LD_IMM64(R0, 1),
2844 BPF_ALU32_IMM(BPF_MOV, R1, 2),
2845 BPF_ALU32_REG(BPF_OR, R0, R1),
2846 BPF_EXIT_INSN(),
2847 },
2848 INTERNAL,
2849 { },
2850 { { 0, 3 } },
2851 },
2852 {
2853 "ALU_OR_X: 0x0 | 0xffffffff = 0xffffffff",
2854 .u.insns_int = {
2855 BPF_LD_IMM64(R0, 0),
2856 BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
2857 BPF_ALU32_REG(BPF_OR, R0, R1),
2858 BPF_EXIT_INSN(),
2859 },
2860 INTERNAL,
2861 { },
2862 { { 0, 0xffffffff } },
2863 },
2864 {
2865 "ALU64_OR_X: 1 | 2 = 3",
2866 .u.insns_int = {
2867 BPF_LD_IMM64(R0, 1),
2868 BPF_ALU32_IMM(BPF_MOV, R1, 2),
2869 BPF_ALU64_REG(BPF_OR, R0, R1),
2870 BPF_EXIT_INSN(),
2871 },
2872 INTERNAL,
2873 { },
2874 { { 0, 3 } },
2875 },
2876 {
2877 "ALU64_OR_X: 0 | 0xffffffff = 0xffffffff",
2878 .u.insns_int = {
2879 BPF_LD_IMM64(R0, 0),
2880 BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
2881 BPF_ALU64_REG(BPF_OR, R0, R1),
2882 BPF_EXIT_INSN(),
2883 },
2884 INTERNAL,
2885 { },
2886 { { 0, 0xffffffff } },
2887 },
2888 /* BPF_ALU | BPF_OR | BPF_K */
2889 {
2890 "ALU_OR_K: 1 | 2 = 3",
2891 .u.insns_int = {
2892 BPF_LD_IMM64(R0, 1),
2893 BPF_ALU32_IMM(BPF_OR, R0, 2),
2894 BPF_EXIT_INSN(),
2895 },
2896 INTERNAL,
2897 { },
2898 { { 0, 3 } },
2899 },
2900 {
2901 "ALU_OR_K: 0 & 0xffffffff = 0xffffffff",
2902 .u.insns_int = {
2903 BPF_LD_IMM64(R0, 0),
2904 BPF_ALU32_IMM(BPF_OR, R0, 0xffffffff),
2905 BPF_EXIT_INSN(),
2906 },
2907 INTERNAL,
2908 { },
2909 { { 0, 0xffffffff } },
2910 },
2911 {
2912 "ALU64_OR_K: 1 | 2 = 3",
2913 .u.insns_int = {
2914 BPF_LD_IMM64(R0, 1),
2915 BPF_ALU64_IMM(BPF_OR, R0, 2),
2916 BPF_EXIT_INSN(),
2917 },
2918 INTERNAL,
2919 { },
2920 { { 0, 3 } },
2921 },
2922 {
2923 "ALU64_OR_K: 0 & 0xffffffff = 0xffffffff",
2924 .u.insns_int = {
2925 BPF_LD_IMM64(R0, 0),
2926 BPF_ALU64_IMM(BPF_OR, R0, 0xffffffff),
2927 BPF_EXIT_INSN(),
2928 },
2929 INTERNAL,
2930 { },
2931 { { 0, 0xffffffff } },
2932 },
2933 {
2934 "ALU64_OR_K: 0x0000ffffffff0000 | 0x0 = 0x0000ffff00000000",
2935 .u.insns_int = {
2936 BPF_LD_IMM64(R2, 0x0000ffffffff0000),
2937 BPF_LD_IMM64(R3, 0x0000ffffffff0000),
2938 BPF_ALU64_IMM(BPF_OR, R2, 0x0),
2939 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
2940 BPF_MOV32_IMM(R0, 2),
2941 BPF_EXIT_INSN(),
2942 BPF_MOV32_IMM(R0, 1),
2943 BPF_EXIT_INSN(),
2944 },
2945 INTERNAL,
2946 { },
2947 { { 0, 0x1 } },
2948 },
2949 {
2950 "ALU64_OR_K: 0x0000ffffffff0000 | -1 = 0xffffffffffffffff",
2951 .u.insns_int = {
2952 BPF_LD_IMM64(R2, 0x0000ffffffff0000),
2953 BPF_LD_IMM64(R3, 0xffffffffffffffff),
2954 BPF_ALU64_IMM(BPF_OR, R2, 0xffffffff),
2955 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
2956 BPF_MOV32_IMM(R0, 2),
2957 BPF_EXIT_INSN(),
2958 BPF_MOV32_IMM(R0, 1),
2959 BPF_EXIT_INSN(),
2960 },
2961 INTERNAL,
2962 { },
2963 { { 0, 0x1 } },
2964 },
2965 {
2966 "ALU64_OR_K: 0x000000000000000 | -1 = 0xffffffffffffffff",
2967 .u.insns_int = {
2968 BPF_LD_IMM64(R2, 0x0000000000000000),
2969 BPF_LD_IMM64(R3, 0xffffffffffffffff),
2970 BPF_ALU64_IMM(BPF_OR, R2, 0xffffffff),
2971 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
2972 BPF_MOV32_IMM(R0, 2),
2973 BPF_EXIT_INSN(),
2974 BPF_MOV32_IMM(R0, 1),
2975 BPF_EXIT_INSN(),
2976 },
2977 INTERNAL,
2978 { },
2979 { { 0, 0x1 } },
2980 },
2981 /* BPF_ALU | BPF_XOR | BPF_X */
2982 {
2983 "ALU_XOR_X: 5 ^ 6 = 3",
2984 .u.insns_int = {
2985 BPF_LD_IMM64(R0, 5),
2986 BPF_ALU32_IMM(BPF_MOV, R1, 6),
2987 BPF_ALU32_REG(BPF_XOR, R0, R1),
2988 BPF_EXIT_INSN(),
2989 },
2990 INTERNAL,
2991 { },
2992 { { 0, 3 } },
2993 },
2994 {
2995 "ALU_XOR_X: 0x1 ^ 0xffffffff = 0xfffffffe",
2996 .u.insns_int = {
2997 BPF_LD_IMM64(R0, 1),
2998 BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
2999 BPF_ALU32_REG(BPF_XOR, R0, R1),
3000 BPF_EXIT_INSN(),
3001 },
3002 INTERNAL,
3003 { },
3004 { { 0, 0xfffffffe } },
3005 },
3006 {
3007 "ALU64_XOR_X: 5 ^ 6 = 3",
3008 .u.insns_int = {
3009 BPF_LD_IMM64(R0, 5),
3010 BPF_ALU32_IMM(BPF_MOV, R1, 6),
3011 BPF_ALU64_REG(BPF_XOR, R0, R1),
3012 BPF_EXIT_INSN(),
3013 },
3014 INTERNAL,
3015 { },
3016 { { 0, 3 } },
3017 },
3018 {
3019 "ALU64_XOR_X: 1 ^ 0xffffffff = 0xfffffffe",
3020 .u.insns_int = {
3021 BPF_LD_IMM64(R0, 1),
3022 BPF_ALU32_IMM(BPF_MOV, R1, 0xffffffff),
3023 BPF_ALU64_REG(BPF_XOR, R0, R1),
3024 BPF_EXIT_INSN(),
3025 },
3026 INTERNAL,
3027 { },
3028 { { 0, 0xfffffffe } },
3029 },
3030 /* BPF_ALU | BPF_XOR | BPF_K */
3031 {
3032 "ALU_XOR_K: 5 ^ 6 = 3",
3033 .u.insns_int = {
3034 BPF_LD_IMM64(R0, 5),
3035 BPF_ALU32_IMM(BPF_XOR, R0, 6),
3036 BPF_EXIT_INSN(),
3037 },
3038 INTERNAL,
3039 { },
3040 { { 0, 3 } },
3041 },
3042 {
3043 "ALU_XOR_K: 1 ^ 0xffffffff = 0xfffffffe",
3044 .u.insns_int = {
3045 BPF_LD_IMM64(R0, 1),
3046 BPF_ALU32_IMM(BPF_XOR, R0, 0xffffffff),
3047 BPF_EXIT_INSN(),
3048 },
3049 INTERNAL,
3050 { },
3051 { { 0, 0xfffffffe } },
3052 },
3053 {
3054 "ALU64_XOR_K: 5 ^ 6 = 3",
3055 .u.insns_int = {
3056 BPF_LD_IMM64(R0, 5),
3057 BPF_ALU64_IMM(BPF_XOR, R0, 6),
3058 BPF_EXIT_INSN(),
3059 },
3060 INTERNAL,
3061 { },
3062 { { 0, 3 } },
3063 },
3064 {
3065 "ALU64_XOR_K: 1 & 0xffffffff = 0xfffffffe",
3066 .u.insns_int = {
3067 BPF_LD_IMM64(R0, 1),
3068 BPF_ALU64_IMM(BPF_XOR, R0, 0xffffffff),
3069 BPF_EXIT_INSN(),
3070 },
3071 INTERNAL,
3072 { },
3073 { { 0, 0xfffffffe } },
3074 },
3075 {
3076 "ALU64_XOR_K: 0x0000ffffffff0000 ^ 0x0 = 0x0000ffffffff0000",
3077 .u.insns_int = {
3078 BPF_LD_IMM64(R2, 0x0000ffffffff0000),
3079 BPF_LD_IMM64(R3, 0x0000ffffffff0000),
3080 BPF_ALU64_IMM(BPF_XOR, R2, 0x0),
3081 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
3082 BPF_MOV32_IMM(R0, 2),
3083 BPF_EXIT_INSN(),
3084 BPF_MOV32_IMM(R0, 1),
3085 BPF_EXIT_INSN(),
3086 },
3087 INTERNAL,
3088 { },
3089 { { 0, 0x1 } },
3090 },
3091 {
3092 "ALU64_XOR_K: 0x0000ffffffff0000 ^ -1 = 0xffff00000000ffff",
3093 .u.insns_int = {
3094 BPF_LD_IMM64(R2, 0x0000ffffffff0000),
3095 BPF_LD_IMM64(R3, 0xffff00000000ffff),
3096 BPF_ALU64_IMM(BPF_XOR, R2, 0xffffffff),
3097 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
3098 BPF_MOV32_IMM(R0, 2),
3099 BPF_EXIT_INSN(),
3100 BPF_MOV32_IMM(R0, 1),
3101 BPF_EXIT_INSN(),
3102 },
3103 INTERNAL,
3104 { },
3105 { { 0, 0x1 } },
3106 },
3107 {
3108 "ALU64_XOR_K: 0x000000000000000 ^ -1 = 0xffffffffffffffff",
3109 .u.insns_int = {
3110 BPF_LD_IMM64(R2, 0x0000000000000000),
3111 BPF_LD_IMM64(R3, 0xffffffffffffffff),
3112 BPF_ALU64_IMM(BPF_XOR, R2, 0xffffffff),
3113 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
3114 BPF_MOV32_IMM(R0, 2),
3115 BPF_EXIT_INSN(),
3116 BPF_MOV32_IMM(R0, 1),
3117 BPF_EXIT_INSN(),
3118 },
3119 INTERNAL,
3120 { },
3121 { { 0, 0x1 } },
3122 },
3123 /* BPF_ALU | BPF_LSH | BPF_X */
3124 {
3125 "ALU_LSH_X: 1 << 1 = 2",
3126 .u.insns_int = {
3127 BPF_LD_IMM64(R0, 1),
3128 BPF_ALU32_IMM(BPF_MOV, R1, 1),
3129 BPF_ALU32_REG(BPF_LSH, R0, R1),
3130 BPF_EXIT_INSN(),
3131 },
3132 INTERNAL,
3133 { },
3134 { { 0, 2 } },
3135 },
3136 {
3137 "ALU_LSH_X: 1 << 31 = 0x80000000",
3138 .u.insns_int = {
3139 BPF_LD_IMM64(R0, 1),
3140 BPF_ALU32_IMM(BPF_MOV, R1, 31),
3141 BPF_ALU32_REG(BPF_LSH, R0, R1),
3142 BPF_EXIT_INSN(),
3143 },
3144 INTERNAL,
3145 { },
3146 { { 0, 0x80000000 } },
3147 },
3148 {
3149 "ALU64_LSH_X: 1 << 1 = 2",
3150 .u.insns_int = {
3151 BPF_LD_IMM64(R0, 1),
3152 BPF_ALU32_IMM(BPF_MOV, R1, 1),
3153 BPF_ALU64_REG(BPF_LSH, R0, R1),
3154 BPF_EXIT_INSN(),
3155 },
3156 INTERNAL,
3157 { },
3158 { { 0, 2 } },
3159 },
3160 {
3161 "ALU64_LSH_X: 1 << 31 = 0x80000000",
3162 .u.insns_int = {
3163 BPF_LD_IMM64(R0, 1),
3164 BPF_ALU32_IMM(BPF_MOV, R1, 31),
3165 BPF_ALU64_REG(BPF_LSH, R0, R1),
3166 BPF_EXIT_INSN(),
3167 },
3168 INTERNAL,
3169 { },
3170 { { 0, 0x80000000 } },
3171 },
3172 /* BPF_ALU | BPF_LSH | BPF_K */
3173 {
3174 "ALU_LSH_K: 1 << 1 = 2",
3175 .u.insns_int = {
3176 BPF_LD_IMM64(R0, 1),
3177 BPF_ALU32_IMM(BPF_LSH, R0, 1),
3178 BPF_EXIT_INSN(),
3179 },
3180 INTERNAL,
3181 { },
3182 { { 0, 2 } },
3183 },
3184 {
3185 "ALU_LSH_K: 1 << 31 = 0x80000000",
3186 .u.insns_int = {
3187 BPF_LD_IMM64(R0, 1),
3188 BPF_ALU32_IMM(BPF_LSH, R0, 31),
3189 BPF_EXIT_INSN(),
3190 },
3191 INTERNAL,
3192 { },
3193 { { 0, 0x80000000 } },
3194 },
3195 {
3196 "ALU64_LSH_K: 1 << 1 = 2",
3197 .u.insns_int = {
3198 BPF_LD_IMM64(R0, 1),
3199 BPF_ALU64_IMM(BPF_LSH, R0, 1),
3200 BPF_EXIT_INSN(),
3201 },
3202 INTERNAL,
3203 { },
3204 { { 0, 2 } },
3205 },
3206 {
3207 "ALU64_LSH_K: 1 << 31 = 0x80000000",
3208 .u.insns_int = {
3209 BPF_LD_IMM64(R0, 1),
3210 BPF_ALU64_IMM(BPF_LSH, R0, 31),
3211 BPF_EXIT_INSN(),
3212 },
3213 INTERNAL,
3214 { },
3215 { { 0, 0x80000000 } },
3216 },
3217 /* BPF_ALU | BPF_RSH | BPF_X */
3218 {
3219 "ALU_RSH_X: 2 >> 1 = 1",
3220 .u.insns_int = {
3221 BPF_LD_IMM64(R0, 2),
3222 BPF_ALU32_IMM(BPF_MOV, R1, 1),
3223 BPF_ALU32_REG(BPF_RSH, R0, R1),
3224 BPF_EXIT_INSN(),
3225 },
3226 INTERNAL,
3227 { },
3228 { { 0, 1 } },
3229 },
3230 {
3231 "ALU_RSH_X: 0x80000000 >> 31 = 1",
3232 .u.insns_int = {
3233 BPF_LD_IMM64(R0, 0x80000000),
3234 BPF_ALU32_IMM(BPF_MOV, R1, 31),
3235 BPF_ALU32_REG(BPF_RSH, R0, R1),
3236 BPF_EXIT_INSN(),
3237 },
3238 INTERNAL,
3239 { },
3240 { { 0, 1 } },
3241 },
3242 {
3243 "ALU64_RSH_X: 2 >> 1 = 1",
3244 .u.insns_int = {
3245 BPF_LD_IMM64(R0, 2),
3246 BPF_ALU32_IMM(BPF_MOV, R1, 1),
3247 BPF_ALU64_REG(BPF_RSH, R0, R1),
3248 BPF_EXIT_INSN(),
3249 },
3250 INTERNAL,
3251 { },
3252 { { 0, 1 } },
3253 },
3254 {
3255 "ALU64_RSH_X: 0x80000000 >> 31 = 1",
3256 .u.insns_int = {
3257 BPF_LD_IMM64(R0, 0x80000000),
3258 BPF_ALU32_IMM(BPF_MOV, R1, 31),
3259 BPF_ALU64_REG(BPF_RSH, R0, R1),
3260 BPF_EXIT_INSN(),
3261 },
3262 INTERNAL,
3263 { },
3264 { { 0, 1 } },
3265 },
3266 /* BPF_ALU | BPF_RSH | BPF_K */
3267 {
3268 "ALU_RSH_K: 2 >> 1 = 1",
3269 .u.insns_int = {
3270 BPF_LD_IMM64(R0, 2),
3271 BPF_ALU32_IMM(BPF_RSH, R0, 1),
3272 BPF_EXIT_INSN(),
3273 },
3274 INTERNAL,
3275 { },
3276 { { 0, 1 } },
3277 },
3278 {
3279 "ALU_RSH_K: 0x80000000 >> 31 = 1",
3280 .u.insns_int = {
3281 BPF_LD_IMM64(R0, 0x80000000),
3282 BPF_ALU32_IMM(BPF_RSH, R0, 31),
3283 BPF_EXIT_INSN(),
3284 },
3285 INTERNAL,
3286 { },
3287 { { 0, 1 } },
3288 },
3289 {
3290 "ALU64_RSH_K: 2 >> 1 = 1",
3291 .u.insns_int = {
3292 BPF_LD_IMM64(R0, 2),
3293 BPF_ALU64_IMM(BPF_RSH, R0, 1),
3294 BPF_EXIT_INSN(),
3295 },
3296 INTERNAL,
3297 { },
3298 { { 0, 1 } },
3299 },
3300 {
3301 "ALU64_RSH_K: 0x80000000 >> 31 = 1",
3302 .u.insns_int = {
3303 BPF_LD_IMM64(R0, 0x80000000),
3304 BPF_ALU64_IMM(BPF_RSH, R0, 31),
3305 BPF_EXIT_INSN(),
3306 },
3307 INTERNAL,
3308 { },
3309 { { 0, 1 } },
3310 },
3311 /* BPF_ALU | BPF_ARSH | BPF_X */
3312 {
3313 "ALU_ARSH_X: 0xff00ff0000000000 >> 40 = 0xffffffffffff00ff",
3314 .u.insns_int = {
3315 BPF_LD_IMM64(R0, 0xff00ff0000000000LL),
3316 BPF_ALU32_IMM(BPF_MOV, R1, 40),
3317 BPF_ALU64_REG(BPF_ARSH, R0, R1),
3318 BPF_EXIT_INSN(),
3319 },
3320 INTERNAL,
3321 { },
3322 { { 0, 0xffff00ff } },
3323 },
3324 /* BPF_ALU | BPF_ARSH | BPF_K */
3325 {
3326 "ALU_ARSH_K: 0xff00ff0000000000 >> 40 = 0xffffffffffff00ff",
3327 .u.insns_int = {
3328 BPF_LD_IMM64(R0, 0xff00ff0000000000LL),
3329 BPF_ALU64_IMM(BPF_ARSH, R0, 40),
3330 BPF_EXIT_INSN(),
3331 },
3332 INTERNAL,
3333 { },
3334 { { 0, 0xffff00ff } },
3335 },
3336 /* BPF_ALU | BPF_NEG */
3337 {
3338 "ALU_NEG: -(3) = -3",
3339 .u.insns_int = {
3340 BPF_ALU32_IMM(BPF_MOV, R0, 3),
3341 BPF_ALU32_IMM(BPF_NEG, R0, 0),
3342 BPF_EXIT_INSN(),
3343 },
3344 INTERNAL,
3345 { },
3346 { { 0, -3 } },
3347 },
3348 {
3349 "ALU_NEG: -(-3) = 3",
3350 .u.insns_int = {
3351 BPF_ALU32_IMM(BPF_MOV, R0, -3),
3352 BPF_ALU32_IMM(BPF_NEG, R0, 0),
3353 BPF_EXIT_INSN(),
3354 },
3355 INTERNAL,
3356 { },
3357 { { 0, 3 } },
3358 },
3359 {
3360 "ALU64_NEG: -(3) = -3",
3361 .u.insns_int = {
3362 BPF_LD_IMM64(R0, 3),
3363 BPF_ALU64_IMM(BPF_NEG, R0, 0),
3364 BPF_EXIT_INSN(),
3365 },
3366 INTERNAL,
3367 { },
3368 { { 0, -3 } },
3369 },
3370 {
3371 "ALU64_NEG: -(-3) = 3",
3372 .u.insns_int = {
3373 BPF_LD_IMM64(R0, -3),
3374 BPF_ALU64_IMM(BPF_NEG, R0, 0),
3375 BPF_EXIT_INSN(),
3376 },
3377 INTERNAL,
3378 { },
3379 { { 0, 3 } },
3380 },
3381 /* BPF_ALU | BPF_END | BPF_FROM_BE */
3382 {
3383 "ALU_END_FROM_BE 16: 0x0123456789abcdef -> 0xcdef",
3384 .u.insns_int = {
3385 BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
3386 BPF_ENDIAN(BPF_FROM_BE, R0, 16),
3387 BPF_EXIT_INSN(),
3388 },
3389 INTERNAL,
3390 { },
3391 { { 0, cpu_to_be16(0xcdef) } },
3392 },
3393 {
3394 "ALU_END_FROM_BE 32: 0x0123456789abcdef -> 0x89abcdef",
3395 .u.insns_int = {
3396 BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
3397 BPF_ENDIAN(BPF_FROM_BE, R0, 32),
3398 BPF_EXIT_INSN(),
3399 },
3400 INTERNAL,
3401 { },
3402 { { 0, cpu_to_be32(0x89abcdef) } },
3403 },
3404 {
3405 "ALU_END_FROM_BE 64: 0x0123456789abcdef -> 0x89abcdef",
3406 .u.insns_int = {
3407 BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
3408 BPF_ENDIAN(BPF_FROM_BE, R0, 64),
3409 BPF_EXIT_INSN(),
3410 },
3411 INTERNAL,
3412 { },
3413 { { 0, (u32) cpu_to_be64(0x0123456789abcdefLL) } },
3414 },
3415 /* BPF_ALU | BPF_END | BPF_FROM_LE */
3416 {
3417 "ALU_END_FROM_LE 16: 0x0123456789abcdef -> 0xefcd",
3418 .u.insns_int = {
3419 BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
3420 BPF_ENDIAN(BPF_FROM_LE, R0, 16),
3421 BPF_EXIT_INSN(),
3422 },
3423 INTERNAL,
3424 { },
3425 { { 0, cpu_to_le16(0xcdef) } },
3426 },
3427 {
3428 "ALU_END_FROM_LE 32: 0x0123456789abcdef -> 0xefcdab89",
3429 .u.insns_int = {
3430 BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
3431 BPF_ENDIAN(BPF_FROM_LE, R0, 32),
3432 BPF_EXIT_INSN(),
3433 },
3434 INTERNAL,
3435 { },
3436 { { 0, cpu_to_le32(0x89abcdef) } },
3437 },
3438 {
3439 "ALU_END_FROM_LE 64: 0x0123456789abcdef -> 0x67452301",
3440 .u.insns_int = {
3441 BPF_LD_IMM64(R0, 0x0123456789abcdefLL),
3442 BPF_ENDIAN(BPF_FROM_LE, R0, 64),
3443 BPF_EXIT_INSN(),
3444 },
3445 INTERNAL,
3446 { },
3447 { { 0, (u32) cpu_to_le64(0x0123456789abcdefLL) } },
3448 },
3449 /* BPF_ST(X) | BPF_MEM | BPF_B/H/W/DW */
3450 {
3451 "ST_MEM_B: Store/Load byte: max negative",
3452 .u.insns_int = {
3453 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3454 BPF_ST_MEM(BPF_B, R10, -40, 0xff),
3455 BPF_LDX_MEM(BPF_B, R0, R10, -40),
3456 BPF_EXIT_INSN(),
3457 },
3458 INTERNAL,
3459 { },
3460 { { 0, 0xff } },
3461 },
3462 {
3463 "ST_MEM_B: Store/Load byte: max positive",
3464 .u.insns_int = {
3465 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3466 BPF_ST_MEM(BPF_H, R10, -40, 0x7f),
3467 BPF_LDX_MEM(BPF_H, R0, R10, -40),
3468 BPF_EXIT_INSN(),
3469 },
3470 INTERNAL,
3471 { },
3472 { { 0, 0x7f } },
3473 },
3474 {
3475 "STX_MEM_B: Store/Load byte: max negative",
3476 .u.insns_int = {
3477 BPF_LD_IMM64(R0, 0),
3478 BPF_LD_IMM64(R1, 0xffLL),
3479 BPF_STX_MEM(BPF_B, R10, R1, -40),
3480 BPF_LDX_MEM(BPF_B, R0, R10, -40),
3481 BPF_EXIT_INSN(),
3482 },
3483 INTERNAL,
3484 { },
3485 { { 0, 0xff } },
3486 },
3487 {
3488 "ST_MEM_H: Store/Load half word: max negative",
3489 .u.insns_int = {
3490 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3491 BPF_ST_MEM(BPF_H, R10, -40, 0xffff),
3492 BPF_LDX_MEM(BPF_H, R0, R10, -40),
3493 BPF_EXIT_INSN(),
3494 },
3495 INTERNAL,
3496 { },
3497 { { 0, 0xffff } },
3498 },
3499 {
3500 "ST_MEM_H: Store/Load half word: max positive",
3501 .u.insns_int = {
3502 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3503 BPF_ST_MEM(BPF_H, R10, -40, 0x7fff),
3504 BPF_LDX_MEM(BPF_H, R0, R10, -40),
3505 BPF_EXIT_INSN(),
3506 },
3507 INTERNAL,
3508 { },
3509 { { 0, 0x7fff } },
3510 },
3511 {
3512 "STX_MEM_H: Store/Load half word: max negative",
3513 .u.insns_int = {
3514 BPF_LD_IMM64(R0, 0),
3515 BPF_LD_IMM64(R1, 0xffffLL),
3516 BPF_STX_MEM(BPF_H, R10, R1, -40),
3517 BPF_LDX_MEM(BPF_H, R0, R10, -40),
3518 BPF_EXIT_INSN(),
3519 },
3520 INTERNAL,
3521 { },
3522 { { 0, 0xffff } },
3523 },
3524 {
3525 "ST_MEM_W: Store/Load word: max negative",
3526 .u.insns_int = {
3527 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3528 BPF_ST_MEM(BPF_W, R10, -40, 0xffffffff),
3529 BPF_LDX_MEM(BPF_W, R0, R10, -40),
3530 BPF_EXIT_INSN(),
3531 },
3532 INTERNAL,
3533 { },
3534 { { 0, 0xffffffff } },
3535 },
3536 {
3537 "ST_MEM_W: Store/Load word: max positive",
3538 .u.insns_int = {
3539 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3540 BPF_ST_MEM(BPF_W, R10, -40, 0x7fffffff),
3541 BPF_LDX_MEM(BPF_W, R0, R10, -40),
3542 BPF_EXIT_INSN(),
3543 },
3544 INTERNAL,
3545 { },
3546 { { 0, 0x7fffffff } },
3547 },
3548 {
3549 "STX_MEM_W: Store/Load word: max negative",
3550 .u.insns_int = {
3551 BPF_LD_IMM64(R0, 0),
3552 BPF_LD_IMM64(R1, 0xffffffffLL),
3553 BPF_STX_MEM(BPF_W, R10, R1, -40),
3554 BPF_LDX_MEM(BPF_W, R0, R10, -40),
3555 BPF_EXIT_INSN(),
3556 },
3557 INTERNAL,
3558 { },
3559 { { 0, 0xffffffff } },
3560 },
3561 {
3562 "ST_MEM_DW: Store/Load double word: max negative",
3563 .u.insns_int = {
3564 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3565 BPF_ST_MEM(BPF_DW, R10, -40, 0xffffffff),
3566 BPF_LDX_MEM(BPF_DW, R0, R10, -40),
3567 BPF_EXIT_INSN(),
3568 },
3569 INTERNAL,
3570 { },
3571 { { 0, 0xffffffff } },
3572 },
3573 {
3574 "ST_MEM_DW: Store/Load double word: max negative 2",
3575 .u.insns_int = {
3576 BPF_LD_IMM64(R2, 0xffff00000000ffff),
3577 BPF_LD_IMM64(R3, 0xffffffffffffffff),
3578 BPF_ST_MEM(BPF_DW, R10, -40, 0xffffffff),
3579 BPF_LDX_MEM(BPF_DW, R2, R10, -40),
3580 BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
3581 BPF_MOV32_IMM(R0, 2),
3582 BPF_EXIT_INSN(),
3583 BPF_MOV32_IMM(R0, 1),
3584 BPF_EXIT_INSN(),
3585 },
3586 INTERNAL,
3587 { },
3588 { { 0, 0x1 } },
3589 },
3590 {
3591 "ST_MEM_DW: Store/Load double word: max positive",
3592 .u.insns_int = {
3593 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3594 BPF_ST_MEM(BPF_DW, R10, -40, 0x7fffffff),
3595 BPF_LDX_MEM(BPF_DW, R0, R10, -40),
3596 BPF_EXIT_INSN(),
3597 },
3598 INTERNAL,
3599 { },
3600 { { 0, 0x7fffffff } },
3601 },
3602 {
3603 "STX_MEM_DW: Store/Load double word: max negative",
3604 .u.insns_int = {
3605 BPF_LD_IMM64(R0, 0),
3606 BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
3607 BPF_STX_MEM(BPF_W, R10, R1, -40),
3608 BPF_LDX_MEM(BPF_W, R0, R10, -40),
3609 BPF_EXIT_INSN(),
3610 },
3611 INTERNAL,
3612 { },
3613 { { 0, 0xffffffff } },
3614 },
3615 /* BPF_STX | BPF_XADD | BPF_W/DW */
3616 {
3617 "STX_XADD_W: Test: 0x12 + 0x10 = 0x22",
3618 .u.insns_int = {
3619 BPF_ALU32_IMM(BPF_MOV, R0, 0x12),
3620 BPF_ST_MEM(BPF_W, R10, -40, 0x10),
3621 BPF_STX_XADD(BPF_W, R10, R0, -40),
3622 BPF_LDX_MEM(BPF_W, R0, R10, -40),
3623 BPF_EXIT_INSN(),
3624 },
3625 INTERNAL,
3626 { },
3627 { { 0, 0x22 } },
3628 },
3629 {
3630 "STX_XADD_DW: Test: 0x12 + 0x10 = 0x22",
3631 .u.insns_int = {
3632 BPF_ALU32_IMM(BPF_MOV, R0, 0x12),
3633 BPF_ST_MEM(BPF_DW, R10, -40, 0x10),
3634 BPF_STX_XADD(BPF_DW, R10, R0, -40),
3635 BPF_LDX_MEM(BPF_DW, R0, R10, -40),
3636 BPF_EXIT_INSN(),
3637 },
3638 INTERNAL,
3639 { },
3640 { { 0, 0x22 } },
3641 },
3642 /* BPF_JMP | BPF_EXIT */
3643 {
3644 "JMP_EXIT",
3645 .u.insns_int = {
3646 BPF_ALU32_IMM(BPF_MOV, R0, 0x4711),
3647 BPF_EXIT_INSN(),
3648 BPF_ALU32_IMM(BPF_MOV, R0, 0x4712),
3649 },
3650 INTERNAL,
3651 { },
3652 { { 0, 0x4711 } },
3653 },
3654 /* BPF_JMP | BPF_JA */
3655 {
3656 "JMP_JA: Unconditional jump: if (true) return 1",
3657 .u.insns_int = {
3658 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3659 BPF_JMP_IMM(BPF_JA, 0, 0, 1),
3660 BPF_EXIT_INSN(),
3661 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3662 BPF_EXIT_INSN(),
3663 },
3664 INTERNAL,
3665 { },
3666 { { 0, 1 } },
3667 },
3668 /* BPF_JMP | BPF_JSGT | BPF_K */
3669 {
3670 "JMP_JSGT_K: Signed jump: if (-1 > -2) return 1",
3671 .u.insns_int = {
3672 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3673 BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
3674 BPF_JMP_IMM(BPF_JSGT, R1, -2, 1),
3675 BPF_EXIT_INSN(),
3676 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3677 BPF_EXIT_INSN(),
3678 },
3679 INTERNAL,
3680 { },
3681 { { 0, 1 } },
3682 },
3683 {
3684 "JMP_JSGT_K: Signed jump: if (-1 > -1) return 0",
3685 .u.insns_int = {
3686 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3687 BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
3688 BPF_JMP_IMM(BPF_JSGT, R1, -1, 1),
3689 BPF_EXIT_INSN(),
3690 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3691 BPF_EXIT_INSN(),
3692 },
3693 INTERNAL,
3694 { },
3695 { { 0, 1 } },
3696 },
3697 /* BPF_JMP | BPF_JSGE | BPF_K */
3698 {
3699 "JMP_JSGE_K: Signed jump: if (-1 >= -2) return 1",
3700 .u.insns_int = {
3701 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3702 BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
3703 BPF_JMP_IMM(BPF_JSGE, R1, -2, 1),
3704 BPF_EXIT_INSN(),
3705 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3706 BPF_EXIT_INSN(),
3707 },
3708 INTERNAL,
3709 { },
3710 { { 0, 1 } },
3711 },
3712 {
3713 "JMP_JSGE_K: Signed jump: if (-1 >= -1) return 1",
3714 .u.insns_int = {
3715 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3716 BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
3717 BPF_JMP_IMM(BPF_JSGE, R1, -1, 1),
3718 BPF_EXIT_INSN(),
3719 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3720 BPF_EXIT_INSN(),
3721 },
3722 INTERNAL,
3723 { },
3724 { { 0, 1 } },
3725 },
3726 /* BPF_JMP | BPF_JGT | BPF_K */
3727 {
3728 "JMP_JGT_K: if (3 > 2) return 1",
3729 .u.insns_int = {
3730 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3731 BPF_LD_IMM64(R1, 3),
3732 BPF_JMP_IMM(BPF_JGT, R1, 2, 1),
3733 BPF_EXIT_INSN(),
3734 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3735 BPF_EXIT_INSN(),
3736 },
3737 INTERNAL,
3738 { },
3739 { { 0, 1 } },
3740 },
3741 /* BPF_JMP | BPF_JGE | BPF_K */
3742 {
3743 "JMP_JGE_K: if (3 >= 2) return 1",
3744 .u.insns_int = {
3745 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3746 BPF_LD_IMM64(R1, 3),
3747 BPF_JMP_IMM(BPF_JGE, R1, 2, 1),
3748 BPF_EXIT_INSN(),
3749 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3750 BPF_EXIT_INSN(),
3751 },
3752 INTERNAL,
3753 { },
3754 { { 0, 1 } },
3755 },
3756 {
3757 "JMP_JGE_K: if (3 >= 3) return 1",
3758 .u.insns_int = {
3759 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3760 BPF_LD_IMM64(R1, 3),
3761 BPF_JMP_IMM(BPF_JGE, R1, 3, 1),
3762 BPF_EXIT_INSN(),
3763 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3764 BPF_EXIT_INSN(),
3765 },
3766 INTERNAL,
3767 { },
3768 { { 0, 1 } },
3769 },
3770 /* BPF_JMP | BPF_JNE | BPF_K */
3771 {
3772 "JMP_JNE_K: if (3 != 2) return 1",
3773 .u.insns_int = {
3774 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3775 BPF_LD_IMM64(R1, 3),
3776 BPF_JMP_IMM(BPF_JNE, R1, 2, 1),
3777 BPF_EXIT_INSN(),
3778 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3779 BPF_EXIT_INSN(),
3780 },
3781 INTERNAL,
3782 { },
3783 { { 0, 1 } },
3784 },
3785 /* BPF_JMP | BPF_JEQ | BPF_K */
3786 {
3787 "JMP_JEQ_K: if (3 == 3) return 1",
3788 .u.insns_int = {
3789 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3790 BPF_LD_IMM64(R1, 3),
3791 BPF_JMP_IMM(BPF_JEQ, R1, 3, 1),
3792 BPF_EXIT_INSN(),
3793 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3794 BPF_EXIT_INSN(),
3795 },
3796 INTERNAL,
3797 { },
3798 { { 0, 1 } },
3799 },
3800 /* BPF_JMP | BPF_JSET | BPF_K */
3801 {
3802 "JMP_JSET_K: if (0x3 & 0x2) return 1",
3803 .u.insns_int = {
3804 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3805 BPF_LD_IMM64(R1, 3),
3806 BPF_JMP_IMM(BPF_JNE, R1, 2, 1),
3807 BPF_EXIT_INSN(),
3808 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3809 BPF_EXIT_INSN(),
3810 },
3811 INTERNAL,
3812 { },
3813 { { 0, 1 } },
3814 },
3815 {
3816 "JMP_JSET_K: if (0x3 & 0xffffffff) return 1",
3817 .u.insns_int = {
3818 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3819 BPF_LD_IMM64(R1, 3),
3820 BPF_JMP_IMM(BPF_JNE, R1, 0xffffffff, 1),
3821 BPF_EXIT_INSN(),
3822 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3823 BPF_EXIT_INSN(),
3824 },
3825 INTERNAL,
3826 { },
3827 { { 0, 1 } },
3828 },
3829 /* BPF_JMP | BPF_JSGT | BPF_X */
3830 {
3831 "JMP_JSGT_X: Signed jump: if (-1 > -2) return 1",
3832 .u.insns_int = {
3833 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3834 BPF_LD_IMM64(R1, -1),
3835 BPF_LD_IMM64(R2, -2),
3836 BPF_JMP_REG(BPF_JSGT, R1, R2, 1),
3837 BPF_EXIT_INSN(),
3838 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3839 BPF_EXIT_INSN(),
3840 },
3841 INTERNAL,
3842 { },
3843 { { 0, 1 } },
3844 },
3845 {
3846 "JMP_JSGT_X: Signed jump: if (-1 > -1) return 0",
3847 .u.insns_int = {
3848 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3849 BPF_LD_IMM64(R1, -1),
3850 BPF_LD_IMM64(R2, -1),
3851 BPF_JMP_REG(BPF_JSGT, R1, R2, 1),
3852 BPF_EXIT_INSN(),
3853 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3854 BPF_EXIT_INSN(),
3855 },
3856 INTERNAL,
3857 { },
3858 { { 0, 1 } },
3859 },
3860 /* BPF_JMP | BPF_JSGE | BPF_X */
3861 {
3862 "JMP_JSGE_X: Signed jump: if (-1 >= -2) return 1",
3863 .u.insns_int = {
3864 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3865 BPF_LD_IMM64(R1, -1),
3866 BPF_LD_IMM64(R2, -2),
3867 BPF_JMP_REG(BPF_JSGE, R1, R2, 1),
3868 BPF_EXIT_INSN(),
3869 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3870 BPF_EXIT_INSN(),
3871 },
3872 INTERNAL,
3873 { },
3874 { { 0, 1 } },
3875 },
3876 {
3877 "JMP_JSGE_X: Signed jump: if (-1 >= -1) return 1",
3878 .u.insns_int = {
3879 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3880 BPF_LD_IMM64(R1, -1),
3881 BPF_LD_IMM64(R2, -1),
3882 BPF_JMP_REG(BPF_JSGE, R1, R2, 1),
3883 BPF_EXIT_INSN(),
3884 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3885 BPF_EXIT_INSN(),
3886 },
3887 INTERNAL,
3888 { },
3889 { { 0, 1 } },
3890 },
3891 /* BPF_JMP | BPF_JGT | BPF_X */
3892 {
3893 "JMP_JGT_X: if (3 > 2) return 1",
3894 .u.insns_int = {
3895 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3896 BPF_LD_IMM64(R1, 3),
3897 BPF_LD_IMM64(R2, 2),
3898 BPF_JMP_REG(BPF_JGT, R1, R2, 1),
3899 BPF_EXIT_INSN(),
3900 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3901 BPF_EXIT_INSN(),
3902 },
3903 INTERNAL,
3904 { },
3905 { { 0, 1 } },
3906 },
3907 /* BPF_JMP | BPF_JGE | BPF_X */
3908 {
3909 "JMP_JGE_X: if (3 >= 2) return 1",
3910 .u.insns_int = {
3911 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3912 BPF_LD_IMM64(R1, 3),
3913 BPF_LD_IMM64(R2, 2),
3914 BPF_JMP_REG(BPF_JGE, R1, R2, 1),
3915 BPF_EXIT_INSN(),
3916 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3917 BPF_EXIT_INSN(),
3918 },
3919 INTERNAL,
3920 { },
3921 { { 0, 1 } },
3922 },
3923 {
3924 "JMP_JGE_X: if (3 >= 3) return 1",
3925 .u.insns_int = {
3926 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3927 BPF_LD_IMM64(R1, 3),
3928 BPF_LD_IMM64(R2, 3),
3929 BPF_JMP_REG(BPF_JGE, R1, R2, 1),
3930 BPF_EXIT_INSN(),
3931 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3932 BPF_EXIT_INSN(),
3933 },
3934 INTERNAL,
3935 { },
3936 { { 0, 1 } },
3937 },
3938 /* BPF_JMP | BPF_JNE | BPF_X */
3939 {
3940 "JMP_JNE_X: if (3 != 2) return 1",
3941 .u.insns_int = {
3942 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3943 BPF_LD_IMM64(R1, 3),
3944 BPF_LD_IMM64(R2, 2),
3945 BPF_JMP_REG(BPF_JNE, R1, R2, 1),
3946 BPF_EXIT_INSN(),
3947 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3948 BPF_EXIT_INSN(),
3949 },
3950 INTERNAL,
3951 { },
3952 { { 0, 1 } },
3953 },
3954 /* BPF_JMP | BPF_JEQ | BPF_X */
3955 {
3956 "JMP_JEQ_X: if (3 == 3) return 1",
3957 .u.insns_int = {
3958 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3959 BPF_LD_IMM64(R1, 3),
3960 BPF_LD_IMM64(R2, 3),
3961 BPF_JMP_REG(BPF_JEQ, R1, R2, 1),
3962 BPF_EXIT_INSN(),
3963 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3964 BPF_EXIT_INSN(),
3965 },
3966 INTERNAL,
3967 { },
3968 { { 0, 1 } },
3969 },
3970 /* BPF_JMP | BPF_JSET | BPF_X */
3971 {
3972 "JMP_JSET_X: if (0x3 & 0x2) return 1",
3973 .u.insns_int = {
3974 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3975 BPF_LD_IMM64(R1, 3),
3976 BPF_LD_IMM64(R2, 2),
3977 BPF_JMP_REG(BPF_JNE, R1, R2, 1),
3978 BPF_EXIT_INSN(),
3979 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3980 BPF_EXIT_INSN(),
3981 },
3982 INTERNAL,
3983 { },
3984 { { 0, 1 } },
3985 },
3986 {
3987 "JMP_JSET_X: if (0x3 & 0xffffffff) return 1",
3988 .u.insns_int = {
3989 BPF_ALU32_IMM(BPF_MOV, R0, 0),
3990 BPF_LD_IMM64(R1, 3),
3991 BPF_LD_IMM64(R2, 0xffffffff),
3992 BPF_JMP_REG(BPF_JNE, R1, R2, 1),
3993 BPF_EXIT_INSN(),
3994 BPF_ALU32_IMM(BPF_MOV, R0, 1),
3995 BPF_EXIT_INSN(),
3996 },
3997 INTERNAL,
3998 { },
3999 { { 0, 1 } },
4000 },
1809}; 4001};
1810 4002
1811static struct net_device dev; 4003static struct net_device dev;