Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf
Alexei Starovoitov says: ==================== pull-request: bpf 2018-12-05 The following pull-request contains BPF updates for your *net* tree. The main changes are: 1) fix bpf uapi pointers for 32-bit architectures, from Daniel. 2) improve verifer ability to handle progs with a lot of branches, from Alexei. 3) strict btf checks, from Yonghong. 4) bpf_sk_lookup api cleanup, from Joe. 5) other misc fixes ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -4890,22 +4890,23 @@ bpf_sk_lookup(struct sk_buff *skb, struct bpf_sock_tuple *tuple, u32 len,
|
||||
struct net *net;
|
||||
|
||||
family = len == sizeof(tuple->ipv4) ? AF_INET : AF_INET6;
|
||||
if (unlikely(family == AF_UNSPEC || netns_id > U32_MAX || flags))
|
||||
if (unlikely(family == AF_UNSPEC || flags ||
|
||||
!((s32)netns_id < 0 || netns_id <= S32_MAX)))
|
||||
goto out;
|
||||
|
||||
if (skb->dev)
|
||||
caller_net = dev_net(skb->dev);
|
||||
else
|
||||
caller_net = sock_net(skb->sk);
|
||||
if (netns_id) {
|
||||
if ((s32)netns_id < 0) {
|
||||
net = caller_net;
|
||||
sk = sk_lookup(net, tuple, skb, family, proto);
|
||||
} else {
|
||||
net = get_net_ns_by_id(caller_net, netns_id);
|
||||
if (unlikely(!net))
|
||||
goto out;
|
||||
sk = sk_lookup(net, tuple, skb, family, proto);
|
||||
put_net(net);
|
||||
} else {
|
||||
net = caller_net;
|
||||
sk = sk_lookup(net, tuple, skb, family, proto);
|
||||
}
|
||||
|
||||
if (sk)
|
||||
@@ -5435,8 +5436,8 @@ static bool bpf_skb_is_valid_access(int off, int size, enum bpf_access_type type
|
||||
if (size != size_default)
|
||||
return false;
|
||||
break;
|
||||
case bpf_ctx_range(struct __sk_buff, flow_keys):
|
||||
if (size != sizeof(struct bpf_flow_keys *))
|
||||
case bpf_ctx_range_ptr(struct __sk_buff, flow_keys):
|
||||
if (size != sizeof(__u64))
|
||||
return false;
|
||||
break;
|
||||
default:
|
||||
@@ -5464,7 +5465,7 @@ static bool sk_filter_is_valid_access(int off, int size,
|
||||
case bpf_ctx_range(struct __sk_buff, data):
|
||||
case bpf_ctx_range(struct __sk_buff, data_meta):
|
||||
case bpf_ctx_range(struct __sk_buff, data_end):
|
||||
case bpf_ctx_range(struct __sk_buff, flow_keys):
|
||||
case bpf_ctx_range_ptr(struct __sk_buff, flow_keys):
|
||||
case bpf_ctx_range_till(struct __sk_buff, family, local_port):
|
||||
return false;
|
||||
}
|
||||
@@ -5489,7 +5490,7 @@ static bool cg_skb_is_valid_access(int off, int size,
|
||||
switch (off) {
|
||||
case bpf_ctx_range(struct __sk_buff, tc_classid):
|
||||
case bpf_ctx_range(struct __sk_buff, data_meta):
|
||||
case bpf_ctx_range(struct __sk_buff, flow_keys):
|
||||
case bpf_ctx_range_ptr(struct __sk_buff, flow_keys):
|
||||
return false;
|
||||
case bpf_ctx_range(struct __sk_buff, data):
|
||||
case bpf_ctx_range(struct __sk_buff, data_end):
|
||||
@@ -5530,7 +5531,7 @@ static bool lwt_is_valid_access(int off, int size,
|
||||
case bpf_ctx_range(struct __sk_buff, tc_classid):
|
||||
case bpf_ctx_range_till(struct __sk_buff, family, local_port):
|
||||
case bpf_ctx_range(struct __sk_buff, data_meta):
|
||||
case bpf_ctx_range(struct __sk_buff, flow_keys):
|
||||
case bpf_ctx_range_ptr(struct __sk_buff, flow_keys):
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -5756,7 +5757,7 @@ static bool tc_cls_act_is_valid_access(int off, int size,
|
||||
case bpf_ctx_range(struct __sk_buff, data_end):
|
||||
info->reg_type = PTR_TO_PACKET_END;
|
||||
break;
|
||||
case bpf_ctx_range(struct __sk_buff, flow_keys):
|
||||
case bpf_ctx_range_ptr(struct __sk_buff, flow_keys):
|
||||
case bpf_ctx_range_till(struct __sk_buff, family, local_port):
|
||||
return false;
|
||||
}
|
||||
@@ -5958,7 +5959,7 @@ static bool sk_skb_is_valid_access(int off, int size,
|
||||
switch (off) {
|
||||
case bpf_ctx_range(struct __sk_buff, tc_classid):
|
||||
case bpf_ctx_range(struct __sk_buff, data_meta):
|
||||
case bpf_ctx_range(struct __sk_buff, flow_keys):
|
||||
case bpf_ctx_range_ptr(struct __sk_buff, flow_keys):
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -6039,7 +6040,7 @@ static bool flow_dissector_is_valid_access(int off, int size,
|
||||
case bpf_ctx_range(struct __sk_buff, data_end):
|
||||
info->reg_type = PTR_TO_PACKET_END;
|
||||
break;
|
||||
case bpf_ctx_range(struct __sk_buff, flow_keys):
|
||||
case bpf_ctx_range_ptr(struct __sk_buff, flow_keys):
|
||||
info->reg_type = PTR_TO_FLOW_KEYS;
|
||||
break;
|
||||
case bpf_ctx_range(struct __sk_buff, tc_classid):
|
||||
|
||||
Reference in New Issue
Block a user