test_run.c (3430223d393dd23734cc87177d704449cfc294a8) | test_run.c (d800bad67d4c21aaf11722f04e0f7547fb915ab5) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* Copyright (c) 2017 Facebook 3 */ 4#include <linux/bpf.h> 5#include <linux/slab.h> 6#include <linux/vmalloc.h> 7#include <linux/etherdevice.h> 8#include <linux/filter.h> --- 146 unchanged lines hidden (view full) --- 155__diag_pop(); 156 157ALLOW_ERROR_INJECTION(bpf_modify_return_test, ERRNO); 158 159static void *bpf_test_init(const union bpf_attr *kattr, u32 size, 160 u32 headroom, u32 tailroom) 161{ 162 void __user *data_in = u64_to_user_ptr(kattr->test.data_in); | 1// SPDX-License-Identifier: GPL-2.0-only 2/* Copyright (c) 2017 Facebook 3 */ 4#include <linux/bpf.h> 5#include <linux/slab.h> 6#include <linux/vmalloc.h> 7#include <linux/etherdevice.h> 8#include <linux/filter.h> --- 146 unchanged lines hidden (view full) --- 155__diag_pop(); 156 157ALLOW_ERROR_INJECTION(bpf_modify_return_test, ERRNO); 158 159static void *bpf_test_init(const union bpf_attr *kattr, u32 size, 160 u32 headroom, u32 tailroom) 161{ 162 void __user *data_in = u64_to_user_ptr(kattr->test.data_in); |
163 u32 user_size = kattr->test.data_size_in; |
|
163 void *data; 164 165 if (size < ETH_HLEN || size > PAGE_SIZE - headroom - tailroom) 166 return ERR_PTR(-EINVAL); 167 | 164 void *data; 165 166 if (size < ETH_HLEN || size > PAGE_SIZE - headroom - tailroom) 167 return ERR_PTR(-EINVAL); 168 |
169 if (user_size > size) 170 return ERR_PTR(-EMSGSIZE); 171 |
|
168 data = kzalloc(size + headroom + tailroom, GFP_USER); 169 if (!data) 170 return ERR_PTR(-ENOMEM); 171 | 172 data = kzalloc(size + headroom + tailroom, GFP_USER); 173 if (!data) 174 return ERR_PTR(-ENOMEM); 175 |
172 if (copy_from_user(data + headroom, data_in, size)) { | 176 if (copy_from_user(data + headroom, data_in, user_size)) { |
173 kfree(data); 174 return ERR_PTR(-EFAULT); 175 } 176 177 return data; 178} 179 180int bpf_prog_test_run_tracing(struct bpf_prog *prog, --- 300 unchanged lines hidden (view full) --- 481 void *data; 482 int ret; 483 484 if (kattr->test.ctx_in || kattr->test.ctx_out) 485 return -EINVAL; 486 487 /* XDP have extra tailroom as (most) drivers use full page */ 488 max_data_sz = 4096 - headroom - tailroom; | 177 kfree(data); 178 return ERR_PTR(-EFAULT); 179 } 180 181 return data; 182} 183 184int bpf_prog_test_run_tracing(struct bpf_prog *prog, --- 300 unchanged lines hidden (view full) --- 485 void *data; 486 int ret; 487 488 if (kattr->test.ctx_in || kattr->test.ctx_out) 489 return -EINVAL; 490 491 /* XDP have extra tailroom as (most) drivers use full page */ 492 max_data_sz = 4096 - headroom - tailroom; |
489 if (size > max_data_sz) 490 return -EINVAL; | |
491 492 data = bpf_test_init(kattr, max_data_sz, headroom, tailroom); 493 if (IS_ERR(data)) 494 return PTR_ERR(data); 495 496 xdp.data_hard_start = data; 497 xdp.data = data + headroom; 498 xdp.data_meta = xdp.data; --- 126 unchanged lines hidden --- | 493 494 data = bpf_test_init(kattr, max_data_sz, headroom, tailroom); 495 if (IS_ERR(data)) 496 return PTR_ERR(data); 497 498 xdp.data_hard_start = data; 499 xdp.data = data + headroom; 500 xdp.data_meta = xdp.data; --- 126 unchanged lines hidden --- |