@@ -4862,6 +4862,177 @@ static struct bpf_test tests[] = {
48624862 .result = REJECT ,
48634863 .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS ,
48644864 },
4865+ {
4866+ "direct packet read test#1 for CGROUP_SKB" ,
4867+ .insns = {
4868+ BPF_LDX_MEM (BPF_W , BPF_REG_2 , BPF_REG_1 ,
4869+ offsetof(struct __sk_buff , data )),
4870+ BPF_LDX_MEM (BPF_W , BPF_REG_3 , BPF_REG_1 ,
4871+ offsetof(struct __sk_buff , data_end )),
4872+ BPF_LDX_MEM (BPF_W , BPF_REG_4 , BPF_REG_1 ,
4873+ offsetof(struct __sk_buff , len )),
4874+ BPF_LDX_MEM (BPF_W , BPF_REG_5 , BPF_REG_1 ,
4875+ offsetof(struct __sk_buff , pkt_type )),
4876+ BPF_LDX_MEM (BPF_W , BPF_REG_6 , BPF_REG_1 ,
4877+ offsetof(struct __sk_buff , mark )),
4878+ BPF_STX_MEM (BPF_W , BPF_REG_1 , BPF_REG_6 ,
4879+ offsetof(struct __sk_buff , mark )),
4880+ BPF_LDX_MEM (BPF_W , BPF_REG_7 , BPF_REG_1 ,
4881+ offsetof(struct __sk_buff , queue_mapping )),
4882+ BPF_LDX_MEM (BPF_W , BPF_REG_8 , BPF_REG_1 ,
4883+ offsetof(struct __sk_buff , protocol )),
4884+ BPF_LDX_MEM (BPF_W , BPF_REG_9 , BPF_REG_1 ,
4885+ offsetof(struct __sk_buff , vlan_present )),
4886+ BPF_MOV64_REG (BPF_REG_0 , BPF_REG_2 ),
4887+ BPF_ALU64_IMM (BPF_ADD , BPF_REG_0 , 8 ),
4888+ BPF_JMP_REG (BPF_JGT , BPF_REG_0 , BPF_REG_3 , 1 ),
4889+ BPF_LDX_MEM (BPF_B , BPF_REG_0 , BPF_REG_2 , 0 ),
4890+ BPF_MOV64_IMM (BPF_REG_0 , 0 ),
4891+ BPF_EXIT_INSN (),
4892+ },
4893+ .result = ACCEPT ,
4894+ .prog_type = BPF_PROG_TYPE_CGROUP_SKB ,
4895+ },
4896+ {
4897+ "direct packet read test#2 for CGROUP_SKB" ,
4898+ .insns = {
4899+ BPF_LDX_MEM (BPF_W , BPF_REG_4 , BPF_REG_1 ,
4900+ offsetof(struct __sk_buff , vlan_tci )),
4901+ BPF_LDX_MEM (BPF_W , BPF_REG_5 , BPF_REG_1 ,
4902+ offsetof(struct __sk_buff , vlan_proto )),
4903+ BPF_LDX_MEM (BPF_W , BPF_REG_6 , BPF_REG_1 ,
4904+ offsetof(struct __sk_buff , priority )),
4905+ BPF_STX_MEM (BPF_W , BPF_REG_1 , BPF_REG_6 ,
4906+ offsetof(struct __sk_buff , priority )),
4907+ BPF_LDX_MEM (BPF_W , BPF_REG_7 , BPF_REG_1 ,
4908+ offsetof(struct __sk_buff ,
4909+ ingress_ifindex )),
4910+ BPF_LDX_MEM (BPF_W , BPF_REG_8 , BPF_REG_1 ,
4911+ offsetof(struct __sk_buff , tc_index )),
4912+ BPF_LDX_MEM (BPF_W , BPF_REG_9 , BPF_REG_1 ,
4913+ offsetof(struct __sk_buff , hash )),
4914+ BPF_MOV64_IMM (BPF_REG_0 , 0 ),
4915+ BPF_EXIT_INSN (),
4916+ },
4917+ .result = ACCEPT ,
4918+ .prog_type = BPF_PROG_TYPE_CGROUP_SKB ,
4919+ },
4920+ {
4921+ "direct packet read test#3 for CGROUP_SKB" ,
4922+ .insns = {
4923+ BPF_LDX_MEM (BPF_W , BPF_REG_4 , BPF_REG_1 ,
4924+ offsetof(struct __sk_buff , cb [0 ])),
4925+ BPF_LDX_MEM (BPF_W , BPF_REG_5 , BPF_REG_1 ,
4926+ offsetof(struct __sk_buff , cb [1 ])),
4927+ BPF_LDX_MEM (BPF_W , BPF_REG_6 , BPF_REG_1 ,
4928+ offsetof(struct __sk_buff , cb [2 ])),
4929+ BPF_LDX_MEM (BPF_W , BPF_REG_7 , BPF_REG_1 ,
4930+ offsetof(struct __sk_buff , cb [3 ])),
4931+ BPF_LDX_MEM (BPF_W , BPF_REG_8 , BPF_REG_1 ,
4932+ offsetof(struct __sk_buff , cb [4 ])),
4933+ BPF_LDX_MEM (BPF_W , BPF_REG_9 , BPF_REG_1 ,
4934+ offsetof(struct __sk_buff , napi_id )),
4935+ BPF_STX_MEM (BPF_W , BPF_REG_1 , BPF_REG_4 ,
4936+ offsetof(struct __sk_buff , cb [0 ])),
4937+ BPF_STX_MEM (BPF_W , BPF_REG_1 , BPF_REG_5 ,
4938+ offsetof(struct __sk_buff , cb [1 ])),
4939+ BPF_STX_MEM (BPF_W , BPF_REG_1 , BPF_REG_6 ,
4940+ offsetof(struct __sk_buff , cb [2 ])),
4941+ BPF_STX_MEM (BPF_W , BPF_REG_1 , BPF_REG_7 ,
4942+ offsetof(struct __sk_buff , cb [3 ])),
4943+ BPF_STX_MEM (BPF_W , BPF_REG_1 , BPF_REG_8 ,
4944+ offsetof(struct __sk_buff , cb [4 ])),
4945+ BPF_MOV64_IMM (BPF_REG_0 , 0 ),
4946+ BPF_EXIT_INSN (),
4947+ },
4948+ .result = ACCEPT ,
4949+ .prog_type = BPF_PROG_TYPE_CGROUP_SKB ,
4950+ },
4951+ {
4952+ "direct packet read test#4 for CGROUP_SKB" ,
4953+ .insns = {
4954+ BPF_LDX_MEM (BPF_W , BPF_REG_2 , BPF_REG_1 ,
4955+ offsetof(struct __sk_buff , family )),
4956+ BPF_LDX_MEM (BPF_W , BPF_REG_3 , BPF_REG_1 ,
4957+ offsetof(struct __sk_buff , remote_ip4 )),
4958+ BPF_LDX_MEM (BPF_W , BPF_REG_4 , BPF_REG_1 ,
4959+ offsetof(struct __sk_buff , local_ip4 )),
4960+ BPF_LDX_MEM (BPF_W , BPF_REG_5 , BPF_REG_1 ,
4961+ offsetof(struct __sk_buff , remote_ip6 [0 ])),
4962+ BPF_LDX_MEM (BPF_W , BPF_REG_5 , BPF_REG_1 ,
4963+ offsetof(struct __sk_buff , remote_ip6 [1 ])),
4964+ BPF_LDX_MEM (BPF_W , BPF_REG_5 , BPF_REG_1 ,
4965+ offsetof(struct __sk_buff , remote_ip6 [2 ])),
4966+ BPF_LDX_MEM (BPF_W , BPF_REG_5 , BPF_REG_1 ,
4967+ offsetof(struct __sk_buff , remote_ip6 [3 ])),
4968+ BPF_LDX_MEM (BPF_W , BPF_REG_6 , BPF_REG_1 ,
4969+ offsetof(struct __sk_buff , local_ip6 [0 ])),
4970+ BPF_LDX_MEM (BPF_W , BPF_REG_6 , BPF_REG_1 ,
4971+ offsetof(struct __sk_buff , local_ip6 [1 ])),
4972+ BPF_LDX_MEM (BPF_W , BPF_REG_6 , BPF_REG_1 ,
4973+ offsetof(struct __sk_buff , local_ip6 [2 ])),
4974+ BPF_LDX_MEM (BPF_W , BPF_REG_6 , BPF_REG_1 ,
4975+ offsetof(struct __sk_buff , local_ip6 [3 ])),
4976+ BPF_LDX_MEM (BPF_W , BPF_REG_7 , BPF_REG_1 ,
4977+ offsetof(struct __sk_buff , remote_port )),
4978+ BPF_LDX_MEM (BPF_W , BPF_REG_8 , BPF_REG_1 ,
4979+ offsetof(struct __sk_buff , local_port )),
4980+ BPF_MOV64_IMM (BPF_REG_0 , 0 ),
4981+ BPF_EXIT_INSN (),
4982+ },
4983+ .result = ACCEPT ,
4984+ .prog_type = BPF_PROG_TYPE_CGROUP_SKB ,
4985+ },
4986+ {
4987+ "invalid access of tc_classid for CGROUP_SKB" ,
4988+ .insns = {
4989+ BPF_LDX_MEM (BPF_W , BPF_REG_0 , BPF_REG_1 ,
4990+ offsetof(struct __sk_buff , tc_classid )),
4991+ BPF_MOV64_IMM (BPF_REG_0 , 0 ),
4992+ BPF_EXIT_INSN (),
4993+ },
4994+ .result = REJECT ,
4995+ .errstr = "invalid bpf_context access" ,
4996+ .prog_type = BPF_PROG_TYPE_CGROUP_SKB ,
4997+ },
4998+ {
4999+ "invalid access of data_meta for CGROUP_SKB" ,
5000+ .insns = {
5001+ BPF_LDX_MEM (BPF_W , BPF_REG_0 , BPF_REG_1 ,
5002+ offsetof(struct __sk_buff , data_meta )),
5003+ BPF_MOV64_IMM (BPF_REG_0 , 0 ),
5004+ BPF_EXIT_INSN (),
5005+ },
5006+ .result = REJECT ,
5007+ .errstr = "invalid bpf_context access" ,
5008+ .prog_type = BPF_PROG_TYPE_CGROUP_SKB ,
5009+ },
5010+ {
5011+ "invalid access of flow_keys for CGROUP_SKB" ,
5012+ .insns = {
5013+ BPF_LDX_MEM (BPF_W , BPF_REG_0 , BPF_REG_1 ,
5014+ offsetof(struct __sk_buff , flow_keys )),
5015+ BPF_MOV64_IMM (BPF_REG_0 , 0 ),
5016+ BPF_EXIT_INSN (),
5017+ },
5018+ .result = REJECT ,
5019+ .errstr = "invalid bpf_context access" ,
5020+ .prog_type = BPF_PROG_TYPE_CGROUP_SKB ,
5021+ },
5022+ {
5023+ "invalid write access to napi_id for CGROUP_SKB" ,
5024+ .insns = {
5025+ BPF_LDX_MEM (BPF_W , BPF_REG_9 , BPF_REG_1 ,
5026+ offsetof(struct __sk_buff , napi_id )),
5027+ BPF_STX_MEM (BPF_W , BPF_REG_1 , BPF_REG_9 ,
5028+ offsetof(struct __sk_buff , napi_id )),
5029+ BPF_MOV64_IMM (BPF_REG_0 , 0 ),
5030+ BPF_EXIT_INSN (),
5031+ },
5032+ .result = REJECT ,
5033+ .errstr = "invalid bpf_context access" ,
5034+ .prog_type = BPF_PROG_TYPE_CGROUP_SKB ,
5035+ },
48655036 {
48665037 "valid cgroup storage access" ,
48675038 .insns = {
0 commit comments