diff options
Diffstat (limited to 'net/bpf/test_run.c')
| -rw-r--r-- | net/bpf/test_run.c | 14 | 
1 files changed, 9 insertions, 5 deletions
| diff --git a/net/bpf/test_run.c b/net/bpf/test_run.c index 2eb0e55ef54d..b5f4ef35357c 100644 --- a/net/bpf/test_run.c +++ b/net/bpf/test_run.c @@ -552,6 +552,12 @@ static void convert_skb_to___skb(struct sk_buff *skb, struct __sk_buff *__skb)  	__skb->gso_segs = skb_shinfo(skb)->gso_segs;  } +static struct proto bpf_dummy_proto = { +	.name   = "bpf_dummy", +	.owner  = THIS_MODULE, +	.obj_size = sizeof(struct sock), +}; +  int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr,  			  union bpf_attr __user *uattr)  { @@ -596,20 +602,19 @@ int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr,  		break;  	} -	sk = kzalloc(sizeof(struct sock), GFP_USER); +	sk = sk_alloc(net, AF_UNSPEC, GFP_USER, &bpf_dummy_proto, 1);  	if (!sk) {  		kfree(data);  		kfree(ctx);  		return -ENOMEM;  	} -	sock_net_set(sk, net);  	sock_init_data(NULL, sk);  	skb = build_skb(data, 0);  	if (!skb) {  		kfree(data);  		kfree(ctx); -		kfree(sk); +		sk_free(sk);  		return -ENOMEM;  	}  	skb->sk = sk; @@ -682,8 +687,7 @@ out:  	if (dev && dev != net->loopback_dev)  		dev_put(dev);  	kfree_skb(skb); -	bpf_sk_storage_free(sk); -	kfree(sk); +	sk_free(sk);  	kfree(ctx);  	return ret;  } |