[PATCHv3 3/9] bpf: Introduce bpf_copy_to_kernel() to buffer the content from bpf-prog
kernel test robot
lkp at intel.com
Thu May 29 04:48:17 PDT 2025
Hi Pingfan,
kernel test robot noticed the following build warnings:
[auto build test WARNING on bpf-next/net]
[also build test WARNING on bpf-next/master bpf/master arm64/for-next/core linus/master v6.15 next-20250529]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Pingfan-Liu/kexec_file-Make-kexec_image_load_default-global-visible/20250529-122124
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git net
patch link: https://lore.kernel.org/r/20250529041744.16458-4-piliu%40redhat.com
patch subject: [PATCHv3 3/9] bpf: Introduce bpf_copy_to_kernel() to buffer the content from bpf-prog
config: riscv-randconfig-001-20250529 (https://download.01.org/0day-ci/archive/20250529/202505291926.IPUSqCEj-lkp@intel.com/config)
compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project f819f46284f2a79790038e1f6649172789734ae8)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250529/202505291926.IPUSqCEj-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp at intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202505291926.IPUSqCEj-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> kernel/bpf/helpers_carrier.c:74:17: warning: no previous prototype for function 'bpf_mem_range_result_put' [-Wmissing-prototypes]
74 | __bpf_kfunc int bpf_mem_range_result_put(struct mem_range_result *result)
| ^
kernel/bpf/helpers_carrier.c:74:13: note: declare 'static' if the function is not intended to be used outside of this translation unit
74 | __bpf_kfunc int bpf_mem_range_result_put(struct mem_range_result *result)
| ^
| static
kernel/bpf/helpers_carrier.c:88:7: warning: variable 'kmalloc' set but not used [-Wunused-but-set-variable]
88 | bool kmalloc;
| ^
>> kernel/bpf/helpers_carrier.c:82:17: warning: no previous prototype for function 'bpf_copy_to_kernel' [-Wmissing-prototypes]
82 | __bpf_kfunc int bpf_copy_to_kernel(const char *name, char *buf, int size)
| ^
kernel/bpf/helpers_carrier.c:82:13: note: declare 'static' if the function is not intended to be used outside of this translation unit
82 | __bpf_kfunc int bpf_copy_to_kernel(const char *name, char *buf, int size)
| ^
| static
>> kernel/bpf/helpers_carrier.c:165:6: warning: variable 'ret' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
165 | if (!find_listener(item->str)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~
kernel/bpf/helpers_carrier.c:174:9: note: uninitialized use occurs here
174 | return ret;
| ^~~
kernel/bpf/helpers_carrier.c:165:2: note: remove the 'if' if its condition is always false
165 | if (!find_listener(item->str)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
166 | hash_add(str_listeners, &item->node, hash);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
167 | } else {
| ~~~~~~
kernel/bpf/helpers_carrier.c:149:9: note: initialize the variable 'ret' to silence this warning
149 | int ret;
| ^
| = 0
4 warnings generated.
vim +/bpf_mem_range_result_put +74 kernel/bpf/helpers_carrier.c
73
> 74 __bpf_kfunc int bpf_mem_range_result_put(struct mem_range_result *result)
75 {
76 return mem_range_result_put(result);
77 }
78
79 /*
80 * Cache the content in @buf into kernel
81 */
> 82 __bpf_kfunc int bpf_copy_to_kernel(const char *name, char *buf, int size)
83 {
84 struct mem_range_result *range;
85 struct mem_cgroup *memcg, *old_memcg;
86 struct str_listener *item;
87 resource_handler handler;
88 bool kmalloc;
89 char *kbuf;
90 int id, ret = 0;
91
92 id = srcu_read_lock(&srcu);
93 item = find_listener(name);
94 if (!item) {
95 srcu_read_unlock(&srcu, id);
96 return -EINVAL;
97 }
98 kmalloc = item->kmalloc;
99 handler = item->handler;
100 srcu_read_unlock(&srcu, id);
101 memcg = get_mem_cgroup_from_current();
102 old_memcg = set_active_memcg(memcg);
103 range = kmalloc(sizeof(struct mem_range_result), GFP_KERNEL);
104 if (!range) {
105 pr_err("fail to allocate mem_range_result\n");
106 ret = -ENOMEM;
107 goto err;
108 }
109
110 kref_init(&range->ref);
111 if (item->kmalloc)
112 kbuf = kmalloc(size, GFP_KERNEL | __GFP_ACCOUNT);
113 else
114 kbuf = __vmalloc(size, GFP_KERNEL | __GFP_ACCOUNT);
115 if (!kbuf) {
116 kfree(range);
117 ret = -ENOMEM;
118 goto err;
119 }
120 ret = copy_from_kernel_nofault(kbuf, buf, size);
121 if (unlikely(ret < 0)) {
122 kfree(range);
123 if (item->kmalloc)
124 kfree(kbuf);
125 else
126 vfree(kbuf);
127 ret = -EINVAL;
128 goto err;
129 }
130 range->kmalloc = item->kmalloc;
131 range->buf = kbuf;
132 range->buf_sz = size;
133 range->data_sz = size;
134 range->memcg = memcg;
135 mem_cgroup_tryget(memcg);
136 range->status = 0;
137 ret = handler(name, range);
138 mem_range_result_put(range);
139 err:
140 set_active_memcg(old_memcg);
141 mem_cgroup_put(memcg);
142 return ret;
143 }
144
145 int register_carrier_listener(struct carrier_listener *listener)
146 {
147 struct str_listener *item;
148 unsigned int hash;
149 int ret;
150
151 if (!listener->name)
152 return -EINVAL;
153 item = kmalloc(sizeof(*item), GFP_KERNEL);
154 if (!item)
155 return -ENOMEM;
156 item->str = kstrdup(listener->name, GFP_KERNEL);
157 if (!item->str) {
158 kfree(item);
159 return -ENOMEM;
160 }
161 item->handler = listener->handler;
162 item->kmalloc = listener->kmalloc;
163 hash = jhash(item->str, strlen(item->str), 0);
164 mutex_lock(&str_listeners_mutex);
> 165 if (!find_listener(item->str)) {
166 hash_add(str_listeners, &item->node, hash);
167 } else {
168 kfree(item->str);
169 kfree(item);
170 ret = -EBUSY;
171 }
172 mutex_unlock(&str_listeners_mutex);
173
174 return ret;
175 }
176 EXPORT_SYMBOL(register_carrier_listener);
177
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
More information about the kexec
mailing list