0001 {
0002 "BPF_ATOMIC XOR without fetch",
0003 .insns = {
0004
0005 BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0x110),
0006
0007 BPF_MOV64_IMM(BPF_REG_1, 0x011),
0008 BPF_ATOMIC_OP(BPF_DW, BPF_XOR, BPF_REG_10, BPF_REG_1, -8),
0009
0010 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_10, -8),
0011 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0x101, 2),
0012 BPF_MOV64_IMM(BPF_REG_0, 2),
0013 BPF_EXIT_INSN(),
0014
0015 BPF_MOV64_IMM(BPF_REG_0, 0),
0016 BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0x011, 1),
0017 BPF_MOV64_IMM(BPF_REG_0, 1),
0018 BPF_EXIT_INSN(),
0019 },
0020 .result = ACCEPT,
0021 },
0022 {
0023 "BPF_ATOMIC XOR with fetch",
0024 .insns = {
0025 BPF_MOV64_IMM(BPF_REG_0, 123),
0026
0027 BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0x110),
0028
0029 BPF_MOV64_IMM(BPF_REG_1, 0x011),
0030 BPF_ATOMIC_OP(BPF_DW, BPF_XOR | BPF_FETCH, BPF_REG_10, BPF_REG_1, -8),
0031
0032 BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0x110, 2),
0033 BPF_MOV64_IMM(BPF_REG_0, 3),
0034 BPF_EXIT_INSN(),
0035
0036 BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_10, -8),
0037 BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0x101, 2),
0038 BPF_MOV64_IMM(BPF_REG_1, 2),
0039 BPF_EXIT_INSN(),
0040
0041 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 123, 2),
0042 BPF_MOV64_IMM(BPF_REG_0, 1),
0043 BPF_EXIT_INSN(),
0044
0045 BPF_MOV64_IMM(BPF_REG_0, 0),
0046 BPF_EXIT_INSN(),
0047 },
0048 .result = ACCEPT,
0049 },
0050 {
0051 "BPF_ATOMIC XOR with fetch 32bit",
0052 .insns = {
0053
0054 BPF_MOV64_IMM(BPF_REG_0, 0),
0055 BPF_ALU64_IMM(BPF_SUB, BPF_REG_0, 1),
0056
0057 BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 0x110),
0058
0059 BPF_MOV32_IMM(BPF_REG_1, 0x011),
0060 BPF_ATOMIC_OP(BPF_W, BPF_XOR | BPF_FETCH, BPF_REG_10, BPF_REG_1, -4),
0061
0062 BPF_JMP32_IMM(BPF_JEQ, BPF_REG_1, 0x110, 2),
0063 BPF_MOV32_IMM(BPF_REG_0, 3),
0064 BPF_EXIT_INSN(),
0065
0066 BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_10, -4),
0067 BPF_JMP32_IMM(BPF_JEQ, BPF_REG_1, 0x101, 2),
0068 BPF_MOV32_IMM(BPF_REG_1, 2),
0069 BPF_EXIT_INSN(),
0070
0071
0072
0073 BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 1),
0074 BPF_EXIT_INSN(),
0075 },
0076 .result = ACCEPT,
0077 },