diff options
| author | David S. Miller <davem@davemloft.net> | 2021-12-31 14:35:40 +0000 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2021-12-31 14:35:40 +0000 | 
| commit | e63a02348958cd7cc8c8401c94de57ad97b5d06c (patch) | |
| tree | d3f07960e158be75c3002c13d3dc2c142a65fbb7 /kernel/bpf/helpers.c | |
| parent | ce2b6eb409ad40607193641c3ec18c3457e1f57c (diff) | |
| parent | 9e6b19a66d9b6b94395478fe79c5a3ccba181ad3 (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next
Alexei Starovoitov says:
====================
pull-request: bpf-next 2021-12-30
The following pull-request contains BPF updates for your *net-next* tree.
We've added 72 non-merge commits during the last 20 day(s) which contain
a total of 223 files changed, 3510 insertions(+), 1591 deletions(-).
The main changes are:
1) Automatic setrlimit in libbpf when bpf is memcg's in the kernel, from Andrii.
2) Beautify and de-verbose verifier logs, from Christy.
3) Composable verifier types, from Hao.
4) bpf_strncmp helper, from Hou.
5) bpf.h header dependency cleanup, from Jakub.
6) get_func_[arg|ret|arg_cnt] helpers, from Jiri.
7) Sleepable local storage, from KP.
8) Extend kfunc with PTR_TO_CTX, PTR_TO_MEM argument support, from Kumar.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'kernel/bpf/helpers.c')
| -rw-r--r-- | kernel/bpf/helpers.c | 29 | 
1 files changed, 23 insertions, 6 deletions
diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c index 19fecfeaa9c2..01cfdf40c838 100644 --- a/kernel/bpf/helpers.c +++ b/kernel/bpf/helpers.c @@ -2,6 +2,7 @@  /* Copyright (c) 2011-2014 PLUMgrid, http://plumgrid.com   */  #include <linux/bpf.h> +#include <linux/bpf-cgroup.h>  #include <linux/rcupdate.h>  #include <linux/random.h>  #include <linux/smp.h> @@ -530,7 +531,7 @@ const struct bpf_func_proto bpf_strtol_proto = {  	.func		= bpf_strtol,  	.gpl_only	= false,  	.ret_type	= RET_INTEGER, -	.arg1_type	= ARG_PTR_TO_MEM, +	.arg1_type	= ARG_PTR_TO_MEM | MEM_RDONLY,  	.arg2_type	= ARG_CONST_SIZE,  	.arg3_type	= ARG_ANYTHING,  	.arg4_type	= ARG_PTR_TO_LONG, @@ -558,13 +559,27 @@ const struct bpf_func_proto bpf_strtoul_proto = {  	.func		= bpf_strtoul,  	.gpl_only	= false,  	.ret_type	= RET_INTEGER, -	.arg1_type	= ARG_PTR_TO_MEM, +	.arg1_type	= ARG_PTR_TO_MEM | MEM_RDONLY,  	.arg2_type	= ARG_CONST_SIZE,  	.arg3_type	= ARG_ANYTHING,  	.arg4_type	= ARG_PTR_TO_LONG,  };  #endif +BPF_CALL_3(bpf_strncmp, const char *, s1, u32, s1_sz, const char *, s2) +{ +	return strncmp(s1, s2, s1_sz); +} + +const struct bpf_func_proto bpf_strncmp_proto = { +	.func		= bpf_strncmp, +	.gpl_only	= false, +	.ret_type	= RET_INTEGER, +	.arg1_type	= ARG_PTR_TO_MEM, +	.arg2_type	= ARG_CONST_SIZE, +	.arg3_type	= ARG_PTR_TO_CONST_STR, +}; +  BPF_CALL_4(bpf_get_ns_current_pid_tgid, u64, dev, u64, ino,  	   struct bpf_pidns_info *, nsdata, u32, size)  { @@ -630,7 +645,7 @@ const struct bpf_func_proto bpf_event_output_data_proto =  {  	.arg1_type      = ARG_PTR_TO_CTX,  	.arg2_type      = ARG_CONST_MAP_PTR,  	.arg3_type      = ARG_ANYTHING, -	.arg4_type      = ARG_PTR_TO_MEM, +	.arg4_type      = ARG_PTR_TO_MEM | MEM_RDONLY,  	.arg5_type      = ARG_CONST_SIZE_OR_ZERO,  }; @@ -667,7 +682,7 @@ BPF_CALL_2(bpf_per_cpu_ptr, const void *, ptr, u32, cpu)  const struct bpf_func_proto bpf_per_cpu_ptr_proto = {  	.func		= bpf_per_cpu_ptr,  	.gpl_only	= false, -	.ret_type	= RET_PTR_TO_MEM_OR_BTF_ID_OR_NULL, +	.ret_type	= RET_PTR_TO_MEM_OR_BTF_ID | PTR_MAYBE_NULL | MEM_RDONLY,  	.arg1_type	= ARG_PTR_TO_PERCPU_BTF_ID,  	.arg2_type	= ARG_ANYTHING,  }; @@ -680,7 +695,7 @@ BPF_CALL_1(bpf_this_cpu_ptr, const void *, percpu_ptr)  const struct bpf_func_proto bpf_this_cpu_ptr_proto = {  	.func		= bpf_this_cpu_ptr,  	.gpl_only	= false, -	.ret_type	= RET_PTR_TO_MEM_OR_BTF_ID, +	.ret_type	= RET_PTR_TO_MEM_OR_BTF_ID | MEM_RDONLY,  	.arg1_type	= ARG_PTR_TO_PERCPU_BTF_ID,  }; @@ -1011,7 +1026,7 @@ const struct bpf_func_proto bpf_snprintf_proto = {  	.arg1_type	= ARG_PTR_TO_MEM_OR_NULL,  	.arg2_type	= ARG_CONST_SIZE_OR_ZERO,  	.arg3_type	= ARG_PTR_TO_CONST_STR, -	.arg4_type	= ARG_PTR_TO_MEM_OR_NULL, +	.arg4_type	= ARG_PTR_TO_MEM | PTR_MAYBE_NULL | MEM_RDONLY,  	.arg5_type	= ARG_CONST_SIZE_OR_ZERO,  }; @@ -1378,6 +1393,8 @@ bpf_base_func_proto(enum bpf_func_id func_id)  		return &bpf_for_each_map_elem_proto;  	case BPF_FUNC_loop:  		return &bpf_loop_proto; +	case BPF_FUNC_strncmp: +		return &bpf_strncmp_proto;  	default:  		break;  	}  | 
