All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH bpf-next] Add support for tracing programs in BPF_PROG_RUN
@ 2023-01-27 21:43 Grant Seltzer
  2023-01-28  8:16 ` kernel test robot
  2023-01-28  8:37 ` kernel test robot
  0 siblings, 2 replies; 4+ messages in thread
From: Grant Seltzer @ 2023-01-27 21:43 UTC (permalink / raw)
  To: bpf; +Cc: andrii, grantseltzer

This patch changes the behavior of how BPF_PROG_RUN treats tracing
(fentry/fexit) programs. Previously only a return value is injected
but the actual program was not run. New behavior mirrors that of
running raw tracepoint BPF programs which actually runs the
instructions of the program via `bpf_prog_run()`

Tracing programs only needs to support an input context so we validate
that non-relevant attributes are not set.

Signed-off-by: Grant Seltzer <grantseltzer@gmail.com>
---
 net/bpf/test_run.c | 72 ++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 67 insertions(+), 5 deletions(-)

diff --git a/net/bpf/test_run.c b/net/bpf/test_run.c
index 8da0d73b368e..e4023c7b3bc7 100644
--- a/net/bpf/test_run.c
+++ b/net/bpf/test_run.c
@@ -794,14 +794,34 @@ static void *bpf_test_init(const union bpf_attr *kattr, u32 user_size,
 	return data;
 }
 
+struct bpf_tracing_test_run_info {
+	struct bpf_prog *prog;
+	void *ctx;
+	u32 retval;
+};
+
+static void
+__bpf_prog_test_run_tracing(void *data)
+{
+	struct bpf_tracing_test_run_info *info = data;
+
+	rcu_read_lock();
+	info->retval = bpf_prog_run(info->prog, info->ctx);
+	rcu_read_unlock();
+}
+
 int bpf_prog_test_run_tracing(struct bpf_prog *prog,
 			      const union bpf_attr *kattr,
 			      union bpf_attr __user *uattr)
 {
 	struct bpf_fentry_test_t arg = {};
 	u16 side_effect = 0, ret = 0;
-	int b = 2, err = -EFAULT;
-	u32 retval = 0;
+	int b = 2, err = -EFAULT, current_cpu;
+
+	void __user *ctx_in = u64_to_user_ptr(kattr->test.ctx_in);
+	__u32 ctx_size_in = kattr->test.ctx_size_in;
+	struct bpf_tracing_test_run_info info;
+	int cpu = kattr->test.cpu;
 
 	if (kattr->test.flags || kattr->test.cpu || kattr->test.batch_size)
 		return -EINVAL;
@@ -828,11 +848,53 @@ int bpf_prog_test_run_tracing(struct bpf_prog *prog,
 		goto out;
 	}
 
-	retval = ((u32)side_effect << 16) | ret;
-	if (copy_to_user(&uattr->test.retval, &retval, sizeof(retval)))
-		goto out;
+	/* doesn't support data_in/out, ctx_out, duration, or repeat */
+	if (kattr->test.data_in || kattr->test.data_out ||
+	    kattr->test.ctx_out || kattr->test.duration ||
+	    kattr->test.repeat || kattr->test.batch_size)
+		return -EINVAL;
+
+	if (ctx_size_in < prog->aux->max_ctx_offset ||
+	    ctx_size_in > MAX_BPF_FUNC_ARGS * sizeof(u64))
+		return -EINVAL;
+
+	if ((kattr->test.flags & BPF_F_TEST_RUN_ON_CPU) == 0 && cpu != 0)
+		return -EINVAL;
+
+	if (ctx_size_in) {
+		info.ctx = memdup_user(ctx_in, ctx_size_in);
+		if (IS_ERR(info.ctx))
+			return PTR_ERR(info.ctx);
+	} else {
+		info.ctx = NULL;
+	}
 
 	err = 0;
+	info.prog = prog;
+
+	current_cpu = get_cpu();
+	if ((kattr->test.flags & BPF_F_TEST_RUN_ON_CPU) == 0 ||
+	    cpu == current_cpu) {
+		__bpf_prog_test_run_tracing(&info);
+	} else if (cpu >= nr_cpu_ids || !cpu_online(cpu)) {
+		/* smp_call_function_single() also checks cpu_online()
+		 * after csd_lock(). However, since cpu is from user
+		 * space, let's do an extra quick check to filter out
+		 * invalid value before smp_call_function_single().
+		 */
+		err = -ENXIO;
+	} else {
+		err = smp_call_function_single(cpu, __bpf_prog_test_run_tracing,
+					       &info, 1);
+	}
+	put_cpu();
+
+	if (!err &&
+	    copy_to_user(&uattr->test.retval, &info.retval, sizeof(u32)))
+		err = -EFAULT;
+
+	kfree(info.ctx);
+
 out:
 	trace_bpf_test_finish(&err);
 	return err;
-- 
2.39.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH bpf-next] Add support for tracing programs in BPF_PROG_RUN
  2023-01-27 21:43 [PATCH bpf-next] Add support for tracing programs in BPF_PROG_RUN Grant Seltzer
@ 2023-01-28  8:16 ` kernel test robot
  2023-01-28  8:37 ` kernel test robot
  1 sibling, 0 replies; 4+ messages in thread
From: kernel test robot @ 2023-01-28  8:16 UTC (permalink / raw)
  To: Grant Seltzer, bpf; +Cc: oe-kbuild-all, andrii, grantseltzer

Hi Grant,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on bpf-next/master]

url:    https://github.com/intel-lab-lkp/linux/commits/Grant-Seltzer/Add-support-for-tracing-programs-in-BPF_PROG_RUN/20230128-130222
base:   https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
patch link:    https://lore.kernel.org/r/20230127214353.628551-1-grantseltzer%40gmail.com
patch subject: [PATCH bpf-next] Add support for tracing programs in BPF_PROG_RUN
config: powerpc-allmodconfig (https://download.01.org/0day-ci/archive/20230128/202301281606.OPSk1bci-lkp@intel.com/config)
compiler: powerpc-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/990088d6233eb15a4a42a83a998f47432305d4d7
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Grant-Seltzer/Add-support-for-tracing-programs-in-BPF_PROG_RUN/20230128-130222
        git checkout 990088d6233eb15a4a42a83a998f47432305d4d7
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=powerpc olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=powerpc SHELL=/bin/bash net/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   net/bpf/test_run.c: In function 'bpf_prog_test_run_tracing':
>> net/bpf/test_run.c:818:30: warning: variable 'ret' set but not used [-Wunused-but-set-variable]
     818 |         u16 side_effect = 0, ret = 0;
         |                              ^~~
>> net/bpf/test_run.c:818:13: warning: variable 'side_effect' set but not used [-Wunused-but-set-variable]
     818 |         u16 side_effect = 0, ret = 0;
         |             ^~~~~~~~~~~


vim +/ret +818 net/bpf/test_run.c

990088d6233eb1 Grant Seltzer          2023-01-27  812  
da00d2f117a08f KP Singh               2020-03-04  813  int bpf_prog_test_run_tracing(struct bpf_prog *prog,
da00d2f117a08f KP Singh               2020-03-04  814  			      const union bpf_attr *kattr,
da00d2f117a08f KP Singh               2020-03-04  815  			      union bpf_attr __user *uattr)
da00d2f117a08f KP Singh               2020-03-04  816  {
d923021c2ce12a Yonghong Song          2020-06-30  817  	struct bpf_fentry_test_t arg = {};
3d08b6f29cf33a KP Singh               2020-03-04 @818  	u16 side_effect = 0, ret = 0;
990088d6233eb1 Grant Seltzer          2023-01-27  819  	int b = 2, err = -EFAULT, current_cpu;
990088d6233eb1 Grant Seltzer          2023-01-27  820  
990088d6233eb1 Grant Seltzer          2023-01-27  821  	void __user *ctx_in = u64_to_user_ptr(kattr->test.ctx_in);
990088d6233eb1 Grant Seltzer          2023-01-27  822  	__u32 ctx_size_in = kattr->test.ctx_size_in;
990088d6233eb1 Grant Seltzer          2023-01-27  823  	struct bpf_tracing_test_run_info info;
990088d6233eb1 Grant Seltzer          2023-01-27  824  	int cpu = kattr->test.cpu;
da00d2f117a08f KP Singh               2020-03-04  825  
b530e9e1063ed2 Toke Høiland-Jørgensen 2022-03-09  826  	if (kattr->test.flags || kattr->test.cpu || kattr->test.batch_size)
1b4d60ec162f82 Song Liu               2020-09-25  827  		return -EINVAL;
1b4d60ec162f82 Song Liu               2020-09-25  828  
da00d2f117a08f KP Singh               2020-03-04  829  	switch (prog->expected_attach_type) {
da00d2f117a08f KP Singh               2020-03-04  830  	case BPF_TRACE_FENTRY:
da00d2f117a08f KP Singh               2020-03-04  831  	case BPF_TRACE_FEXIT:
faeb2dce084aff Alexei Starovoitov     2019-11-14  832  		if (bpf_fentry_test1(1) != 2 ||
faeb2dce084aff Alexei Starovoitov     2019-11-14  833  		    bpf_fentry_test2(2, 3) != 5 ||
faeb2dce084aff Alexei Starovoitov     2019-11-14  834  		    bpf_fentry_test3(4, 5, 6) != 15 ||
faeb2dce084aff Alexei Starovoitov     2019-11-14  835  		    bpf_fentry_test4((void *)7, 8, 9, 10) != 34 ||
faeb2dce084aff Alexei Starovoitov     2019-11-14  836  		    bpf_fentry_test5(11, (void *)12, 13, 14, 15) != 65 ||
d923021c2ce12a Yonghong Song          2020-06-30  837  		    bpf_fentry_test6(16, (void *)17, 18, 19, (void *)20, 21) != 111 ||
d923021c2ce12a Yonghong Song          2020-06-30  838  		    bpf_fentry_test7((struct bpf_fentry_test_t *)0) != 0 ||
d923021c2ce12a Yonghong Song          2020-06-30  839  		    bpf_fentry_test8(&arg) != 0)
da00d2f117a08f KP Singh               2020-03-04  840  			goto out;
da00d2f117a08f KP Singh               2020-03-04  841  		break;
3d08b6f29cf33a KP Singh               2020-03-04  842  	case BPF_MODIFY_RETURN:
3d08b6f29cf33a KP Singh               2020-03-04  843  		ret = bpf_modify_return_test(1, &b);
3d08b6f29cf33a KP Singh               2020-03-04  844  		if (b != 2)
3d08b6f29cf33a KP Singh               2020-03-04  845  			side_effect = 1;
3d08b6f29cf33a KP Singh               2020-03-04  846  		break;
da00d2f117a08f KP Singh               2020-03-04  847  	default:
da00d2f117a08f KP Singh               2020-03-04  848  		goto out;
a25ecd9d1e6024 Colin Ian King         2019-11-18  849  	}
da00d2f117a08f KP Singh               2020-03-04  850  
990088d6233eb1 Grant Seltzer          2023-01-27  851  	/* doesn't support data_in/out, ctx_out, duration, or repeat */
990088d6233eb1 Grant Seltzer          2023-01-27  852  	if (kattr->test.data_in || kattr->test.data_out ||
990088d6233eb1 Grant Seltzer          2023-01-27  853  	    kattr->test.ctx_out || kattr->test.duration ||
990088d6233eb1 Grant Seltzer          2023-01-27  854  	    kattr->test.repeat || kattr->test.batch_size)
990088d6233eb1 Grant Seltzer          2023-01-27  855  		return -EINVAL;
990088d6233eb1 Grant Seltzer          2023-01-27  856  
990088d6233eb1 Grant Seltzer          2023-01-27  857  	if (ctx_size_in < prog->aux->max_ctx_offset ||
990088d6233eb1 Grant Seltzer          2023-01-27  858  	    ctx_size_in > MAX_BPF_FUNC_ARGS * sizeof(u64))
990088d6233eb1 Grant Seltzer          2023-01-27  859  		return -EINVAL;
990088d6233eb1 Grant Seltzer          2023-01-27  860  
990088d6233eb1 Grant Seltzer          2023-01-27  861  	if ((kattr->test.flags & BPF_F_TEST_RUN_ON_CPU) == 0 && cpu != 0)
990088d6233eb1 Grant Seltzer          2023-01-27  862  		return -EINVAL;
990088d6233eb1 Grant Seltzer          2023-01-27  863  
990088d6233eb1 Grant Seltzer          2023-01-27  864  	if (ctx_size_in) {
990088d6233eb1 Grant Seltzer          2023-01-27  865  		info.ctx = memdup_user(ctx_in, ctx_size_in);
990088d6233eb1 Grant Seltzer          2023-01-27  866  		if (IS_ERR(info.ctx))
990088d6233eb1 Grant Seltzer          2023-01-27  867  			return PTR_ERR(info.ctx);
990088d6233eb1 Grant Seltzer          2023-01-27  868  	} else {
990088d6233eb1 Grant Seltzer          2023-01-27  869  		info.ctx = NULL;
990088d6233eb1 Grant Seltzer          2023-01-27  870  	}
3d08b6f29cf33a KP Singh               2020-03-04  871  
da00d2f117a08f KP Singh               2020-03-04  872  	err = 0;
990088d6233eb1 Grant Seltzer          2023-01-27  873  	info.prog = prog;
990088d6233eb1 Grant Seltzer          2023-01-27  874  
990088d6233eb1 Grant Seltzer          2023-01-27  875  	current_cpu = get_cpu();
990088d6233eb1 Grant Seltzer          2023-01-27  876  	if ((kattr->test.flags & BPF_F_TEST_RUN_ON_CPU) == 0 ||
990088d6233eb1 Grant Seltzer          2023-01-27  877  	    cpu == current_cpu) {
990088d6233eb1 Grant Seltzer          2023-01-27  878  		__bpf_prog_test_run_tracing(&info);
990088d6233eb1 Grant Seltzer          2023-01-27  879  	} else if (cpu >= nr_cpu_ids || !cpu_online(cpu)) {
990088d6233eb1 Grant Seltzer          2023-01-27  880  		/* smp_call_function_single() also checks cpu_online()
990088d6233eb1 Grant Seltzer          2023-01-27  881  		 * after csd_lock(). However, since cpu is from user
990088d6233eb1 Grant Seltzer          2023-01-27  882  		 * space, let's do an extra quick check to filter out
990088d6233eb1 Grant Seltzer          2023-01-27  883  		 * invalid value before smp_call_function_single().
990088d6233eb1 Grant Seltzer          2023-01-27  884  		 */
990088d6233eb1 Grant Seltzer          2023-01-27  885  		err = -ENXIO;
990088d6233eb1 Grant Seltzer          2023-01-27  886  	} else {
990088d6233eb1 Grant Seltzer          2023-01-27  887  		err = smp_call_function_single(cpu, __bpf_prog_test_run_tracing,
990088d6233eb1 Grant Seltzer          2023-01-27  888  					       &info, 1);
990088d6233eb1 Grant Seltzer          2023-01-27  889  	}
990088d6233eb1 Grant Seltzer          2023-01-27  890  	put_cpu();
990088d6233eb1 Grant Seltzer          2023-01-27  891  
990088d6233eb1 Grant Seltzer          2023-01-27  892  	if (!err &&
990088d6233eb1 Grant Seltzer          2023-01-27  893  	    copy_to_user(&uattr->test.retval, &info.retval, sizeof(u32)))
990088d6233eb1 Grant Seltzer          2023-01-27  894  		err = -EFAULT;
990088d6233eb1 Grant Seltzer          2023-01-27  895  
990088d6233eb1 Grant Seltzer          2023-01-27  896  	kfree(info.ctx);
990088d6233eb1 Grant Seltzer          2023-01-27  897  
da00d2f117a08f KP Singh               2020-03-04  898  out:
da00d2f117a08f KP Singh               2020-03-04  899  	trace_bpf_test_finish(&err);
da00d2f117a08f KP Singh               2020-03-04  900  	return err;
1cf1cae963c2e6 Alexei Starovoitov     2017-03-30  901  }
1cf1cae963c2e6 Alexei Starovoitov     2017-03-30  902  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH bpf-next] Add support for tracing programs in BPF_PROG_RUN
  2023-01-27 21:43 [PATCH bpf-next] Add support for tracing programs in BPF_PROG_RUN Grant Seltzer
  2023-01-28  8:16 ` kernel test robot
@ 2023-01-28  8:37 ` kernel test robot
  2023-01-30 20:39   ` Grant Seltzer Richman
  1 sibling, 1 reply; 4+ messages in thread
From: kernel test robot @ 2023-01-28  8:37 UTC (permalink / raw)
  To: Grant Seltzer, bpf; +Cc: llvm, oe-kbuild-all, andrii, grantseltzer

Hi Grant,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on bpf-next/master]

url:    https://github.com/intel-lab-lkp/linux/commits/Grant-Seltzer/Add-support-for-tracing-programs-in-BPF_PROG_RUN/20230128-130222
base:   https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
patch link:    https://lore.kernel.org/r/20230127214353.628551-1-grantseltzer%40gmail.com
patch subject: [PATCH bpf-next] Add support for tracing programs in BPF_PROG_RUN
config: i386-randconfig-a012-20230123 (https://download.01.org/0day-ci/archive/20230128/202301281621.DfTZgf4X-lkp@intel.com/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/990088d6233eb15a4a42a83a998f47432305d4d7
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Grant-Seltzer/Add-support-for-tracing-programs-in-BPF_PROG_RUN/20230128-130222
        git checkout 990088d6233eb15a4a42a83a998f47432305d4d7
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash net/bpf/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

>> net/bpf/test_run.c:818:23: warning: variable 'ret' set but not used [-Wunused-but-set-variable]
           u16 side_effect = 0, ret = 0;
                                ^
>> net/bpf/test_run.c:818:6: warning: variable 'side_effect' set but not used [-Wunused-but-set-variable]
           u16 side_effect = 0, ret = 0;
               ^
   2 warnings generated.


vim +/ret +818 net/bpf/test_run.c

990088d6233eb1 Grant Seltzer          2023-01-27  812  
da00d2f117a08f KP Singh               2020-03-04  813  int bpf_prog_test_run_tracing(struct bpf_prog *prog,
da00d2f117a08f KP Singh               2020-03-04  814  			      const union bpf_attr *kattr,
da00d2f117a08f KP Singh               2020-03-04  815  			      union bpf_attr __user *uattr)
da00d2f117a08f KP Singh               2020-03-04  816  {
d923021c2ce12a Yonghong Song          2020-06-30  817  	struct bpf_fentry_test_t arg = {};
3d08b6f29cf33a KP Singh               2020-03-04 @818  	u16 side_effect = 0, ret = 0;
990088d6233eb1 Grant Seltzer          2023-01-27  819  	int b = 2, err = -EFAULT, current_cpu;
990088d6233eb1 Grant Seltzer          2023-01-27  820  
990088d6233eb1 Grant Seltzer          2023-01-27  821  	void __user *ctx_in = u64_to_user_ptr(kattr->test.ctx_in);
990088d6233eb1 Grant Seltzer          2023-01-27  822  	__u32 ctx_size_in = kattr->test.ctx_size_in;
990088d6233eb1 Grant Seltzer          2023-01-27  823  	struct bpf_tracing_test_run_info info;
990088d6233eb1 Grant Seltzer          2023-01-27  824  	int cpu = kattr->test.cpu;
da00d2f117a08f KP Singh               2020-03-04  825  
b530e9e1063ed2 Toke Høiland-Jørgensen 2022-03-09  826  	if (kattr->test.flags || kattr->test.cpu || kattr->test.batch_size)
1b4d60ec162f82 Song Liu               2020-09-25  827  		return -EINVAL;
1b4d60ec162f82 Song Liu               2020-09-25  828  
da00d2f117a08f KP Singh               2020-03-04  829  	switch (prog->expected_attach_type) {
da00d2f117a08f KP Singh               2020-03-04  830  	case BPF_TRACE_FENTRY:
da00d2f117a08f KP Singh               2020-03-04  831  	case BPF_TRACE_FEXIT:
faeb2dce084aff Alexei Starovoitov     2019-11-14  832  		if (bpf_fentry_test1(1) != 2 ||
faeb2dce084aff Alexei Starovoitov     2019-11-14  833  		    bpf_fentry_test2(2, 3) != 5 ||
faeb2dce084aff Alexei Starovoitov     2019-11-14  834  		    bpf_fentry_test3(4, 5, 6) != 15 ||
faeb2dce084aff Alexei Starovoitov     2019-11-14  835  		    bpf_fentry_test4((void *)7, 8, 9, 10) != 34 ||
faeb2dce084aff Alexei Starovoitov     2019-11-14  836  		    bpf_fentry_test5(11, (void *)12, 13, 14, 15) != 65 ||
d923021c2ce12a Yonghong Song          2020-06-30  837  		    bpf_fentry_test6(16, (void *)17, 18, 19, (void *)20, 21) != 111 ||
d923021c2ce12a Yonghong Song          2020-06-30  838  		    bpf_fentry_test7((struct bpf_fentry_test_t *)0) != 0 ||
d923021c2ce12a Yonghong Song          2020-06-30  839  		    bpf_fentry_test8(&arg) != 0)
da00d2f117a08f KP Singh               2020-03-04  840  			goto out;
da00d2f117a08f KP Singh               2020-03-04  841  		break;
3d08b6f29cf33a KP Singh               2020-03-04  842  	case BPF_MODIFY_RETURN:
3d08b6f29cf33a KP Singh               2020-03-04  843  		ret = bpf_modify_return_test(1, &b);
3d08b6f29cf33a KP Singh               2020-03-04  844  		if (b != 2)
3d08b6f29cf33a KP Singh               2020-03-04  845  			side_effect = 1;
3d08b6f29cf33a KP Singh               2020-03-04  846  		break;
da00d2f117a08f KP Singh               2020-03-04  847  	default:
da00d2f117a08f KP Singh               2020-03-04  848  		goto out;
a25ecd9d1e6024 Colin Ian King         2019-11-18  849  	}
da00d2f117a08f KP Singh               2020-03-04  850  
990088d6233eb1 Grant Seltzer          2023-01-27  851  	/* doesn't support data_in/out, ctx_out, duration, or repeat */
990088d6233eb1 Grant Seltzer          2023-01-27  852  	if (kattr->test.data_in || kattr->test.data_out ||
990088d6233eb1 Grant Seltzer          2023-01-27  853  	    kattr->test.ctx_out || kattr->test.duration ||
990088d6233eb1 Grant Seltzer          2023-01-27  854  	    kattr->test.repeat || kattr->test.batch_size)
990088d6233eb1 Grant Seltzer          2023-01-27  855  		return -EINVAL;
990088d6233eb1 Grant Seltzer          2023-01-27  856  
990088d6233eb1 Grant Seltzer          2023-01-27  857  	if (ctx_size_in < prog->aux->max_ctx_offset ||
990088d6233eb1 Grant Seltzer          2023-01-27  858  	    ctx_size_in > MAX_BPF_FUNC_ARGS * sizeof(u64))
990088d6233eb1 Grant Seltzer          2023-01-27  859  		return -EINVAL;
990088d6233eb1 Grant Seltzer          2023-01-27  860  
990088d6233eb1 Grant Seltzer          2023-01-27  861  	if ((kattr->test.flags & BPF_F_TEST_RUN_ON_CPU) == 0 && cpu != 0)
990088d6233eb1 Grant Seltzer          2023-01-27  862  		return -EINVAL;
990088d6233eb1 Grant Seltzer          2023-01-27  863  
990088d6233eb1 Grant Seltzer          2023-01-27  864  	if (ctx_size_in) {
990088d6233eb1 Grant Seltzer          2023-01-27  865  		info.ctx = memdup_user(ctx_in, ctx_size_in);
990088d6233eb1 Grant Seltzer          2023-01-27  866  		if (IS_ERR(info.ctx))
990088d6233eb1 Grant Seltzer          2023-01-27  867  			return PTR_ERR(info.ctx);
990088d6233eb1 Grant Seltzer          2023-01-27  868  	} else {
990088d6233eb1 Grant Seltzer          2023-01-27  869  		info.ctx = NULL;
990088d6233eb1 Grant Seltzer          2023-01-27  870  	}
3d08b6f29cf33a KP Singh               2020-03-04  871  
da00d2f117a08f KP Singh               2020-03-04  872  	err = 0;
990088d6233eb1 Grant Seltzer          2023-01-27  873  	info.prog = prog;
990088d6233eb1 Grant Seltzer          2023-01-27  874  
990088d6233eb1 Grant Seltzer          2023-01-27  875  	current_cpu = get_cpu();
990088d6233eb1 Grant Seltzer          2023-01-27  876  	if ((kattr->test.flags & BPF_F_TEST_RUN_ON_CPU) == 0 ||
990088d6233eb1 Grant Seltzer          2023-01-27  877  	    cpu == current_cpu) {
990088d6233eb1 Grant Seltzer          2023-01-27  878  		__bpf_prog_test_run_tracing(&info);
990088d6233eb1 Grant Seltzer          2023-01-27  879  	} else if (cpu >= nr_cpu_ids || !cpu_online(cpu)) {
990088d6233eb1 Grant Seltzer          2023-01-27  880  		/* smp_call_function_single() also checks cpu_online()
990088d6233eb1 Grant Seltzer          2023-01-27  881  		 * after csd_lock(). However, since cpu is from user
990088d6233eb1 Grant Seltzer          2023-01-27  882  		 * space, let's do an extra quick check to filter out
990088d6233eb1 Grant Seltzer          2023-01-27  883  		 * invalid value before smp_call_function_single().
990088d6233eb1 Grant Seltzer          2023-01-27  884  		 */
990088d6233eb1 Grant Seltzer          2023-01-27  885  		err = -ENXIO;
990088d6233eb1 Grant Seltzer          2023-01-27  886  	} else {
990088d6233eb1 Grant Seltzer          2023-01-27  887  		err = smp_call_function_single(cpu, __bpf_prog_test_run_tracing,
990088d6233eb1 Grant Seltzer          2023-01-27  888  					       &info, 1);
990088d6233eb1 Grant Seltzer          2023-01-27  889  	}
990088d6233eb1 Grant Seltzer          2023-01-27  890  	put_cpu();
990088d6233eb1 Grant Seltzer          2023-01-27  891  
990088d6233eb1 Grant Seltzer          2023-01-27  892  	if (!err &&
990088d6233eb1 Grant Seltzer          2023-01-27  893  	    copy_to_user(&uattr->test.retval, &info.retval, sizeof(u32)))
990088d6233eb1 Grant Seltzer          2023-01-27  894  		err = -EFAULT;
990088d6233eb1 Grant Seltzer          2023-01-27  895  
990088d6233eb1 Grant Seltzer          2023-01-27  896  	kfree(info.ctx);
990088d6233eb1 Grant Seltzer          2023-01-27  897  
da00d2f117a08f KP Singh               2020-03-04  898  out:
da00d2f117a08f KP Singh               2020-03-04  899  	trace_bpf_test_finish(&err);
da00d2f117a08f KP Singh               2020-03-04  900  	return err;
1cf1cae963c2e6 Alexei Starovoitov     2017-03-30  901  }
1cf1cae963c2e6 Alexei Starovoitov     2017-03-30  902  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH bpf-next] Add support for tracing programs in BPF_PROG_RUN
  2023-01-28  8:37 ` kernel test robot
@ 2023-01-30 20:39   ` Grant Seltzer Richman
  0 siblings, 0 replies; 4+ messages in thread
From: Grant Seltzer Richman @ 2023-01-30 20:39 UTC (permalink / raw)
  To: KP Singh; +Cc: bpf, andrii

I see I left in a couple of unused variables, but I'm now questioning
their purpose. KP, as the original author, can you explain the purpose
of the `bpf_modify_return_test`? Since this function is running in the
context of the bpf syscall and not the bpf program itself, how would
the side effect of the addition operation (I guess simulating the
attached function running) ever not happen? If we adopt actually
running the BPF program, should there just be a check for setting the
upper 16 bits to represent 'side effects'?

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-01-30 20:39 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-27 21:43 [PATCH bpf-next] Add support for tracing programs in BPF_PROG_RUN Grant Seltzer
2023-01-28  8:16 ` kernel test robot
2023-01-28  8:37 ` kernel test robot
2023-01-30 20:39   ` Grant Seltzer Richman

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.