diff options
Diffstat (limited to 'kernel/bpf/helpers.c')
| -rw-r--r-- | kernel/bpf/helpers.c | 14 | 
1 files changed, 11 insertions, 3 deletions
diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c index b71e428ad936..88035dae38c1 100644 --- a/kernel/bpf/helpers.c +++ b/kernel/bpf/helpers.c @@ -884,6 +884,13 @@ int bpf_bprintf_prepare(char *fmt, u32 fmt_size, const u64 *raw_args,  		if (fmt[i] == 'p') {  			sizeof_cur_arg = sizeof(long); +			if (fmt[i + 1] == 0 || isspace(fmt[i + 1]) || +			    ispunct(fmt[i + 1])) { +				if (tmp_buf) +					cur_arg = raw_args[num_spec]; +				goto nocopy_fmt; +			} +  			if ((fmt[i + 1] == 'k' || fmt[i + 1] == 'u') &&  			    fmt[i + 2] == 's') {  				fmt_ptype = fmt[i + 1]; @@ -891,11 +898,9 @@ int bpf_bprintf_prepare(char *fmt, u32 fmt_size, const u64 *raw_args,  				goto fmt_str;  			} -			if (fmt[i + 1] == 0 || isspace(fmt[i + 1]) || -			    ispunct(fmt[i + 1]) || fmt[i + 1] == 'K' || +			if (fmt[i + 1] == 'K' ||  			    fmt[i + 1] == 'x' || fmt[i + 1] == 's' ||  			    fmt[i + 1] == 'S') { -				/* just kernel pointers */  				if (tmp_buf)  					cur_arg = raw_args[num_spec];  				i++; @@ -3397,6 +3402,9 @@ BTF_ID_FLAGS(func, bpf_iter_dmabuf_next, KF_ITER_NEXT | KF_RET_NULL | KF_SLEEPAB  BTF_ID_FLAGS(func, bpf_iter_dmabuf_destroy, KF_ITER_DESTROY | KF_SLEEPABLE)  #endif  BTF_ID_FLAGS(func, __bpf_trap) +#ifdef CONFIG_CGROUPS +BTF_ID_FLAGS(func, bpf_cgroup_read_xattr, KF_RCU) +#endif  BTF_KFUNCS_END(common_btf_ids)  static const struct btf_kfunc_id_set common_kfunc_set = {  | 
