@@ -3579,7 +3579,7 @@ static struct bpf_test tests[] = {
3579
3579
.prog_type = BPF_PROG_TYPE_SCHED_CLS ,
3580
3580
},
3581
3581
{
3582
- "helper access to packet: test19, cls helper fail range zero" ,
3582
+ "helper access to packet: test19, cls helper range zero" ,
3583
3583
.insns = {
3584
3584
BPF_LDX_MEM (BPF_W , BPF_REG_6 , BPF_REG_1 ,
3585
3585
offsetof(struct __sk_buff , data )),
@@ -3599,8 +3599,7 @@ static struct bpf_test tests[] = {
3599
3599
BPF_MOV64_IMM (BPF_REG_0 , 0 ),
3600
3600
BPF_EXIT_INSN (),
3601
3601
},
3602
- .result = REJECT ,
3603
- .errstr = "invalid access to packet" ,
3602
+ .result = ACCEPT ,
3604
3603
.prog_type = BPF_PROG_TYPE_SCHED_CLS ,
3605
3604
},
3606
3605
{
@@ -4379,10 +4378,10 @@ static struct bpf_test tests[] = {
4379
4378
BPF_LD_MAP_FD (BPF_REG_1 , 0 ),
4380
4379
BPF_EMIT_CALL (BPF_FUNC_map_lookup_elem ),
4381
4380
BPF_JMP_IMM (BPF_JEQ , BPF_REG_0 , 0 , 4 ),
4382
- BPF_MOV64_REG (BPF_REG_1 , BPF_REG_0 ),
4383
- BPF_MOV64_IMM (BPF_REG_2 , 0 ),
4381
+ BPF_MOV64_IMM (BPF_REG_1 , 0 ),
4382
+ BPF_MOV64_REG (BPF_REG_2 , BPF_REG_0 ),
4384
4383
BPF_MOV64_IMM (BPF_REG_3 , 0 ),
4385
- BPF_EMIT_CALL (BPF_FUNC_probe_read ),
4384
+ BPF_EMIT_CALL (BPF_FUNC_probe_write_user ),
4386
4385
BPF_EXIT_INSN (),
4387
4386
},
4388
4387
.fixup_map2 = { 3 },
@@ -4486,9 +4485,10 @@ static struct bpf_test tests[] = {
4486
4485
BPF_MOV64_REG (BPF_REG_1 , BPF_REG_0 ),
4487
4486
BPF_ALU64_IMM (BPF_ADD , BPF_REG_1 ,
4488
4487
offsetof(struct test_val , foo )),
4489
- BPF_MOV64_IMM (BPF_REG_2 , 0 ),
4488
+ BPF_MOV64_REG (BPF_REG_2 , BPF_REG_1 ),
4489
+ BPF_MOV64_IMM (BPF_REG_1 , 0 ),
4490
4490
BPF_MOV64_IMM (BPF_REG_3 , 0 ),
4491
- BPF_EMIT_CALL (BPF_FUNC_probe_read ),
4491
+ BPF_EMIT_CALL (BPF_FUNC_probe_write_user ),
4492
4492
BPF_EXIT_INSN (),
4493
4493
},
4494
4494
.fixup_map2 = { 3 },
@@ -4622,13 +4622,14 @@ static struct bpf_test tests[] = {
4622
4622
BPF_MOV64_REG (BPF_REG_1 , BPF_REG_0 ),
4623
4623
BPF_MOV64_IMM (BPF_REG_3 , 0 ),
4624
4624
BPF_ALU64_REG (BPF_ADD , BPF_REG_1 , BPF_REG_3 ),
4625
- BPF_MOV64_IMM (BPF_REG_2 , 0 ),
4625
+ BPF_MOV64_REG (BPF_REG_2 , BPF_REG_1 ),
4626
+ BPF_MOV64_IMM (BPF_REG_1 , 0 ),
4626
4627
BPF_MOV64_IMM (BPF_REG_3 , 0 ),
4627
- BPF_EMIT_CALL (BPF_FUNC_probe_read ),
4628
+ BPF_EMIT_CALL (BPF_FUNC_probe_write_user ),
4628
4629
BPF_EXIT_INSN (),
4629
4630
},
4630
4631
.fixup_map2 = { 3 },
4631
- .errstr = "R1 min value is outside of the array range" ,
4632
+ .errstr = "R2 min value is outside of the array range" ,
4632
4633
.result = REJECT ,
4633
4634
.prog_type = BPF_PROG_TYPE_TRACEPOINT ,
4634
4635
},
@@ -4765,13 +4766,14 @@ static struct bpf_test tests[] = {
4765
4766
BPF_JMP_IMM (BPF_JGT , BPF_REG_3 ,
4766
4767
offsetof(struct test_val , foo ), 4 ),
4767
4768
BPF_ALU64_REG (BPF_ADD , BPF_REG_1 , BPF_REG_3 ),
4768
- BPF_MOV64_IMM (BPF_REG_2 , 0 ),
4769
+ BPF_MOV64_REG (BPF_REG_2 , BPF_REG_1 ),
4770
+ BPF_MOV64_IMM (BPF_REG_1 , 0 ),
4769
4771
BPF_MOV64_IMM (BPF_REG_3 , 0 ),
4770
- BPF_EMIT_CALL (BPF_FUNC_probe_read ),
4772
+ BPF_EMIT_CALL (BPF_FUNC_probe_write_user ),
4771
4773
BPF_EXIT_INSN (),
4772
4774
},
4773
4775
.fixup_map2 = { 3 },
4774
- .errstr = "R1 min value is outside of the array range" ,
4776
+ .errstr = "R2 min value is outside of the array range" ,
4775
4777
.result = REJECT ,
4776
4778
.prog_type = BPF_PROG_TYPE_TRACEPOINT ,
4777
4779
},
@@ -5350,7 +5352,7 @@ static struct bpf_test tests[] = {
5350
5352
BPF_EMIT_CALL (BPF_FUNC_probe_read ),
5351
5353
BPF_EXIT_INSN (),
5352
5354
},
5353
- .errstr = "invalid stack type R1 off= -64 access_size=0 " ,
5355
+ .errstr = "invalid indirect read from stack off -64+0 size 64 " ,
5354
5356
.result = REJECT ,
5355
5357
.prog_type = BPF_PROG_TYPE_TRACEPOINT ,
5356
5358
},
@@ -5505,7 +5507,7 @@ static struct bpf_test tests[] = {
5505
5507
BPF_MOV64_IMM (BPF_REG_0 , 0 ),
5506
5508
BPF_EXIT_INSN (),
5507
5509
},
5508
- .errstr = "invalid stack type R1 off= -64 access_size=0 " ,
5510
+ .errstr = "invalid indirect read from stack off -64+0 size 64 " ,
5509
5511
.result = REJECT ,
5510
5512
.prog_type = BPF_PROG_TYPE_TRACEPOINT ,
5511
5513
},
@@ -5668,7 +5670,7 @@ static struct bpf_test tests[] = {
5668
5670
.prog_type = BPF_PROG_TYPE_SCHED_CLS ,
5669
5671
},
5670
5672
{
5671
- "helper access to variable memory: size = 0 not allowed on != NULL" ,
5673
+ "helper access to variable memory: size = 0 allowed on != NULL stack pointer " ,
5672
5674
.insns = {
5673
5675
BPF_MOV64_REG (BPF_REG_1 , BPF_REG_10 ),
5674
5676
BPF_ALU64_IMM (BPF_ADD , BPF_REG_1 , -8 ),
@@ -5681,8 +5683,99 @@ static struct bpf_test tests[] = {
5681
5683
BPF_EMIT_CALL (BPF_FUNC_csum_diff ),
5682
5684
BPF_EXIT_INSN (),
5683
5685
},
5684
- .errstr = "invalid stack type R1 off=-8 access_size=0" ,
5685
- .result = REJECT ,
5686
+ .result = ACCEPT ,
5687
+ .prog_type = BPF_PROG_TYPE_SCHED_CLS ,
5688
+ },
5689
+ {
5690
+ "helper access to variable memory: size = 0 allowed on != NULL map pointer" ,
5691
+ .insns = {
5692
+ BPF_ST_MEM (BPF_DW , BPF_REG_10 , -8 , 0 ),
5693
+ BPF_MOV64_REG (BPF_REG_2 , BPF_REG_10 ),
5694
+ BPF_ALU64_IMM (BPF_ADD , BPF_REG_2 , -8 ),
5695
+ BPF_LD_MAP_FD (BPF_REG_1 , 0 ),
5696
+ BPF_RAW_INSN (BPF_JMP | BPF_CALL , 0 , 0 , 0 ,
5697
+ BPF_FUNC_map_lookup_elem ),
5698
+ BPF_JMP_IMM (BPF_JEQ , BPF_REG_0 , 0 , 6 ),
5699
+ BPF_MOV64_REG (BPF_REG_1 , BPF_REG_0 ),
5700
+ BPF_MOV64_IMM (BPF_REG_2 , 0 ),
5701
+ BPF_MOV64_IMM (BPF_REG_3 , 0 ),
5702
+ BPF_MOV64_IMM (BPF_REG_4 , 0 ),
5703
+ BPF_MOV64_IMM (BPF_REG_5 , 0 ),
5704
+ BPF_EMIT_CALL (BPF_FUNC_csum_diff ),
5705
+ BPF_EXIT_INSN (),
5706
+ },
5707
+ .fixup_map1 = { 3 },
5708
+ .result = ACCEPT ,
5709
+ .prog_type = BPF_PROG_TYPE_SCHED_CLS ,
5710
+ },
5711
+ {
5712
+ "helper access to variable memory: size possible = 0 allowed on != NULL stack pointer" ,
5713
+ .insns = {
5714
+ BPF_ST_MEM (BPF_DW , BPF_REG_10 , -8 , 0 ),
5715
+ BPF_MOV64_REG (BPF_REG_2 , BPF_REG_10 ),
5716
+ BPF_ALU64_IMM (BPF_ADD , BPF_REG_2 , -8 ),
5717
+ BPF_LD_MAP_FD (BPF_REG_1 , 0 ),
5718
+ BPF_RAW_INSN (BPF_JMP | BPF_CALL , 0 , 0 , 0 ,
5719
+ BPF_FUNC_map_lookup_elem ),
5720
+ BPF_JMP_IMM (BPF_JEQ , BPF_REG_0 , 0 , 9 ),
5721
+ BPF_LDX_MEM (BPF_DW , BPF_REG_2 , BPF_REG_0 , 0 ),
5722
+ BPF_JMP_IMM (BPF_JGT , BPF_REG_2 , 8 , 7 ),
5723
+ BPF_MOV64_REG (BPF_REG_1 , BPF_REG_10 ),
5724
+ BPF_ALU64_IMM (BPF_ADD , BPF_REG_1 , -8 ),
5725
+ BPF_STX_MEM (BPF_DW , BPF_REG_1 , BPF_REG_2 , 0 ),
5726
+ BPF_MOV64_IMM (BPF_REG_3 , 0 ),
5727
+ BPF_MOV64_IMM (BPF_REG_4 , 0 ),
5728
+ BPF_MOV64_IMM (BPF_REG_5 , 0 ),
5729
+ BPF_EMIT_CALL (BPF_FUNC_csum_diff ),
5730
+ BPF_EXIT_INSN (),
5731
+ },
5732
+ .fixup_map1 = { 3 },
5733
+ .result = ACCEPT ,
5734
+ .prog_type = BPF_PROG_TYPE_SCHED_CLS ,
5735
+ },
5736
+ {
5737
+ "helper access to variable memory: size possible = 0 allowed on != NULL map pointer" ,
5738
+ .insns = {
5739
+ BPF_ST_MEM (BPF_DW , BPF_REG_10 , -8 , 0 ),
5740
+ BPF_MOV64_REG (BPF_REG_2 , BPF_REG_10 ),
5741
+ BPF_ALU64_IMM (BPF_ADD , BPF_REG_2 , -8 ),
5742
+ BPF_LD_MAP_FD (BPF_REG_1 , 0 ),
5743
+ BPF_RAW_INSN (BPF_JMP | BPF_CALL , 0 , 0 , 0 ,
5744
+ BPF_FUNC_map_lookup_elem ),
5745
+ BPF_JMP_IMM (BPF_JEQ , BPF_REG_0 , 0 , 7 ),
5746
+ BPF_MOV64_REG (BPF_REG_1 , BPF_REG_0 ),
5747
+ BPF_LDX_MEM (BPF_DW , BPF_REG_2 , BPF_REG_0 , 0 ),
5748
+ BPF_JMP_IMM (BPF_JGT , BPF_REG_2 , 8 , 4 ),
5749
+ BPF_MOV64_IMM (BPF_REG_3 , 0 ),
5750
+ BPF_MOV64_IMM (BPF_REG_4 , 0 ),
5751
+ BPF_MOV64_IMM (BPF_REG_5 , 0 ),
5752
+ BPF_EMIT_CALL (BPF_FUNC_csum_diff ),
5753
+ BPF_EXIT_INSN (),
5754
+ },
5755
+ .fixup_map1 = { 3 },
5756
+ .result = ACCEPT ,
5757
+ .prog_type = BPF_PROG_TYPE_SCHED_CLS ,
5758
+ },
5759
+ {
5760
+ "helper access to variable memory: size possible = 0 allowed on != NULL packet pointer" ,
5761
+ .insns = {
5762
+ BPF_LDX_MEM (BPF_W , BPF_REG_6 , BPF_REG_1 ,
5763
+ offsetof(struct __sk_buff , data )),
5764
+ BPF_LDX_MEM (BPF_W , BPF_REG_3 , BPF_REG_1 ,
5765
+ offsetof(struct __sk_buff , data_end )),
5766
+ BPF_MOV64_REG (BPF_REG_0 , BPF_REG_6 ),
5767
+ BPF_ALU64_IMM (BPF_ADD , BPF_REG_0 , 8 ),
5768
+ BPF_JMP_REG (BPF_JGT , BPF_REG_0 , BPF_REG_3 , 7 ),
5769
+ BPF_MOV64_REG (BPF_REG_1 , BPF_REG_6 ),
5770
+ BPF_LDX_MEM (BPF_DW , BPF_REG_2 , BPF_REG_6 , 0 ),
5771
+ BPF_JMP_IMM (BPF_JGT , BPF_REG_2 , 8 , 4 ),
5772
+ BPF_MOV64_IMM (BPF_REG_3 , 0 ),
5773
+ BPF_MOV64_IMM (BPF_REG_4 , 0 ),
5774
+ BPF_MOV64_IMM (BPF_REG_5 , 0 ),
5775
+ BPF_EMIT_CALL (BPF_FUNC_csum_diff ),
5776
+ BPF_EXIT_INSN (),
5777
+ },
5778
+ .result = ACCEPT ,
5686
5779
.prog_type = BPF_PROG_TYPE_SCHED_CLS ,
5687
5780
},
5688
5781
{
0 commit comments