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 ---