* [linux-next:master 5519/11156] kernel/bpf/bpf_struct_ops.c:247:16: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type')
@ 2024-02-29 20:31 kernel test robot
2024-02-29 21:07 ` Thinker Li
0 siblings, 1 reply; 5+ messages in thread
From: kernel test robot @ 2024-02-29 20:31 UTC (permalink / raw)
To: Kui-Feng Lee
Cc: oe-kbuild-all, Linux Memory Management List, Martin KaFai Lau
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: f303a3e2bcfba900efb5aee55236d17030e9f882
commit: 1611603537a4b88cec7993f32b70c03113801a46 [5519/11156] bpf: Create argument information for nullable arguments.
config: s390-randconfig-r133-20240229 (https://download.01.org/0day-ci/archive/20240301/202403010423.0vNdUDBW-lkp@intel.com/config)
compiler: clang version 19.0.0git (https://github.com/llvm/llvm-project edd4aee4dd9b5b98b2576a6f783e4086173d902a)
reproduce: (https://download.01.org/0day-ci/archive/20240301/202403010423.0vNdUDBW-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@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202403010423.0vNdUDBW-lkp@intel.com/
All warnings (new ones prefixed by >>):
| ~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~
include/linux/bpf.h:778:47: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_return_type') [-Wenum-enum-conversion]
778 | RET_PTR_TO_TCP_SOCK_OR_NULL = PTR_MAYBE_NULL | RET_PTR_TO_TCP_SOCK,
| ~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~
include/linux/bpf.h:779:50: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_return_type') [-Wenum-enum-conversion]
779 | RET_PTR_TO_SOCK_COMMON_OR_NULL = PTR_MAYBE_NULL | RET_PTR_TO_SOCK_COMMON,
| ~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~
include/linux/bpf.h:781:49: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_return_type') [-Wenum-enum-conversion]
781 | RET_PTR_TO_DYNPTR_MEM_OR_NULL = PTR_MAYBE_NULL | RET_PTR_TO_MEM,
| ~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~
include/linux/bpf.h:782:45: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_return_type') [-Wenum-enum-conversion]
782 | RET_PTR_TO_BTF_ID_OR_NULL = PTR_MAYBE_NULL | RET_PTR_TO_BTF_ID,
| ~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~
include/linux/bpf.h:783:43: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_return_type') [-Wenum-enum-conversion]
783 | RET_PTR_TO_BTF_ID_TRUSTED = PTR_TRUSTED | RET_PTR_TO_BTF_ID,
| ~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~
include/linux/bpf.h:894:44: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type') [-Wenum-enum-conversion]
894 | PTR_TO_MAP_VALUE_OR_NULL = PTR_MAYBE_NULL | PTR_TO_MAP_VALUE,
| ~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~
include/linux/bpf.h:895:42: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type') [-Wenum-enum-conversion]
895 | PTR_TO_SOCKET_OR_NULL = PTR_MAYBE_NULL | PTR_TO_SOCKET,
| ~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~
include/linux/bpf.h:896:46: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type') [-Wenum-enum-conversion]
896 | PTR_TO_SOCK_COMMON_OR_NULL = PTR_MAYBE_NULL | PTR_TO_SOCK_COMMON,
| ~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~
include/linux/bpf.h:897:44: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type') [-Wenum-enum-conversion]
897 | PTR_TO_TCP_SOCK_OR_NULL = PTR_MAYBE_NULL | PTR_TO_TCP_SOCK,
| ~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~
include/linux/bpf.h:898:42: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type') [-Wenum-enum-conversion]
898 | PTR_TO_BTF_ID_OR_NULL = PTR_MAYBE_NULL | PTR_TO_BTF_ID,
| ~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~
In file included from kernel/bpf/bpf_struct_ops.c:5:
In file included from include/linux/bpf_verifier.h:9:
In file included from include/linux/filter.h:12:
In file included from include/linux/skbuff.h:28:
In file included from include/linux/dma-mapping.h:11:
In file included from include/linux/scatterlist.h:9:
In file included from arch/s390/include/asm/io.h:78:
include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
547 | val = __raw_readb(PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
560 | val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/big_endian.h:37:59: note: expanded from macro '__le16_to_cpu'
37 | #define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x))
| ^
include/uapi/linux/swab.h:102:54: note: expanded from macro '__swab16'
102 | #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
| ^
In file included from kernel/bpf/bpf_struct_ops.c:5:
In file included from include/linux/bpf_verifier.h:9:
In file included from include/linux/filter.h:12:
In file included from include/linux/skbuff.h:28:
In file included from include/linux/dma-mapping.h:11:
In file included from include/linux/scatterlist.h:9:
In file included from arch/s390/include/asm/io.h:78:
include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
573 | val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/big_endian.h:35:59: note: expanded from macro '__le32_to_cpu'
35 | #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
| ^
include/uapi/linux/swab.h:115:54: note: expanded from macro '__swab32'
115 | #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
| ^
In file included from kernel/bpf/bpf_struct_ops.c:5:
In file included from include/linux/bpf_verifier.h:9:
In file included from include/linux/filter.h:12:
In file included from include/linux/skbuff.h:28:
In file included from include/linux/dma-mapping.h:11:
In file included from include/linux/scatterlist.h:9:
In file included from arch/s390/include/asm/io.h:78:
include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
584 | __raw_writeb(value, PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
594 | __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
604 | __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:692:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
692 | readsb(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:700:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
700 | readsw(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:708:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
708 | readsl(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:717:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
717 | writesb(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:726:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
726 | writesw(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:735:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
735 | writesl(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
>> kernel/bpf/bpf_struct_ops.c:247:16: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type') [-Wenum-enum-conversion]
247 | PTR_TRUSTED | PTR_TO_BTF_ID | PTR_MAYBE_NULL;
| ~~~~~~~~~~~ ^ ~~~~~~~~~~~~~
38 warnings generated.
vim +247 kernel/bpf/bpf_struct_ops.c
153
154 /* Prepare argument info for every nullable argument of a member of a
155 * struct_ops type.
156 *
157 * Initialize a struct bpf_struct_ops_arg_info according to type info of
158 * the arguments of a stub function. (Check kCFI for more information about
159 * stub functions.)
160 *
161 * Each member in the struct_ops type has a struct bpf_struct_ops_arg_info
162 * to provide an array of struct bpf_ctx_arg_aux, which in turn provides
163 * the information that used by the verifier to check the arguments of the
164 * BPF struct_ops program assigned to the member. Here, we only care about
165 * the arguments that are marked as __nullable.
166 *
167 * The array of struct bpf_ctx_arg_aux is eventually assigned to
168 * prog->aux->ctx_arg_info of BPF struct_ops programs and passed to the
169 * verifier. (See check_struct_ops_btf_id())
170 *
171 * arg_info->info will be the list of struct bpf_ctx_arg_aux if success. If
172 * fails, it will be kept untouched.
173 */
174 static int prepare_arg_info(struct btf *btf,
175 const char *st_ops_name,
176 const char *member_name,
177 const struct btf_type *func_proto,
178 struct bpf_struct_ops_arg_info *arg_info)
179 {
180 const struct btf_type *stub_func_proto, *pointed_type;
181 const struct btf_param *stub_args, *args;
182 struct bpf_ctx_arg_aux *info, *info_buf;
183 u32 nargs, arg_no, info_cnt = 0;
184 u32 arg_btf_id;
185 int offset;
186
187 stub_func_proto = find_stub_func_proto(btf, st_ops_name, member_name);
188 if (!stub_func_proto)
189 return 0;
190
191 /* Check if the number of arguments of the stub function is the same
192 * as the number of arguments of the function pointer.
193 */
194 nargs = btf_type_vlen(func_proto);
195 if (nargs != btf_type_vlen(stub_func_proto)) {
196 pr_warn("the number of arguments of the stub function %s__%s does not match the number of arguments of the member %s of struct %s\n",
197 st_ops_name, member_name, member_name, st_ops_name);
198 return -EINVAL;
199 }
200
201 if (!nargs)
202 return 0;
203
204 args = btf_params(func_proto);
205 stub_args = btf_params(stub_func_proto);
206
207 info_buf = kcalloc(nargs, sizeof(*info_buf), GFP_KERNEL);
208 if (!info_buf)
209 return -ENOMEM;
210
211 /* Prepare info for every nullable argument */
212 info = info_buf;
213 for (arg_no = 0; arg_no < nargs; arg_no++) {
214 /* Skip arguments that is not suffixed with
215 * "__nullable".
216 */
217 if (!btf_param_match_suffix(btf, &stub_args[arg_no],
218 MAYBE_NULL_SUFFIX))
219 continue;
220
221 /* Should be a pointer to struct */
222 pointed_type = btf_type_resolve_ptr(btf,
223 args[arg_no].type,
224 &arg_btf_id);
225 if (!pointed_type ||
226 !btf_type_is_struct(pointed_type)) {
227 pr_warn("stub function %s__%s has %s tagging to an unsupported type\n",
228 st_ops_name, member_name, MAYBE_NULL_SUFFIX);
229 goto err_out;
230 }
231
232 offset = btf_ctx_arg_offset(btf, func_proto, arg_no);
233 if (offset < 0) {
234 pr_warn("stub function %s__%s has an invalid trampoline ctx offset for arg#%u\n",
235 st_ops_name, member_name, arg_no);
236 goto err_out;
237 }
238
239 if (args[arg_no].type != stub_args[arg_no].type) {
240 pr_warn("arg#%u type in stub function %s__%s does not match with its original func_proto\n",
241 arg_no, st_ops_name, member_name);
242 goto err_out;
243 }
244
245 /* Fill the information of the new argument */
246 info->reg_type =
> 247 PTR_TRUSTED | PTR_TO_BTF_ID | PTR_MAYBE_NULL;
248 info->btf_id = arg_btf_id;
249 info->btf = btf;
250 info->offset = offset;
251
252 info++;
253 info_cnt++;
254 }
255
256 if (info_cnt) {
257 arg_info->info = info_buf;
258 arg_info->cnt = info_cnt;
259 } else {
260 kfree(info_buf);
261 }
262
263 return 0;
264
265 err_out:
266 kfree(info_buf);
267
268 return -EINVAL;
269 }
270
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [linux-next:master 5519/11156] kernel/bpf/bpf_struct_ops.c:247:16: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type')
2024-02-29 20:31 [linux-next:master 5519/11156] kernel/bpf/bpf_struct_ops.c:247:16: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type') kernel test robot
@ 2024-02-29 21:07 ` Thinker Li
2024-03-01 18:25 ` Kui-Feng Lee
0 siblings, 1 reply; 5+ messages in thread
From: Thinker Li @ 2024-02-29 21:07 UTC (permalink / raw)
To: kernel test robot
Cc: oe-kbuild-all, Linux Memory Management List, Martin KaFai Lau, sinquersw
[-- Attachment #1: Type: text/plain, Size: 16507 bytes --]
I am checking it.
On Thu, Feb 29, 2024 at 12:32 PM kernel test robot <lkp@intel.com> wrote:
> tree:
> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
> head: f303a3e2bcfba900efb5aee55236d17030e9f882
> commit: 1611603537a4b88cec7993f32b70c03113801a46 [5519/11156] bpf: Create
> argument information for nullable arguments.
> config: s390-randconfig-r133-20240229 (
> https://download.01.org/0day-ci/archive/20240301/202403010423.0vNdUDBW-lkp@intel.com/config
> )
> compiler: clang version 19.0.0git (https://github.com/llvm/llvm-project
> edd4aee4dd9b5b98b2576a6f783e4086173d902a)
> reproduce: (
> https://download.01.org/0day-ci/archive/20240301/202403010423.0vNdUDBW-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@intel.com>
> | Closes:
> https://lore.kernel.org/oe-kbuild-all/202403010423.0vNdUDBW-lkp@intel.com/
>
> All warnings (new ones prefixed by >>):
>
> | ~~~~~~~~~~~~~~ ^
> ~~~~~~~~~~~~~~~~~
> include/linux/bpf.h:778:47: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum
> bpf_return_type') [-Wenum-enum-conversion]
> 778 | RET_PTR_TO_TCP_SOCK_OR_NULL = PTR_MAYBE_NULL |
> RET_PTR_TO_TCP_SOCK,
> | ~~~~~~~~~~~~~~ ^
> ~~~~~~~~~~~~~~~~~~~
> include/linux/bpf.h:779:50: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum
> bpf_return_type') [-Wenum-enum-conversion]
> 779 | RET_PTR_TO_SOCK_COMMON_OR_NULL = PTR_MAYBE_NULL |
> RET_PTR_TO_SOCK_COMMON,
> | ~~~~~~~~~~~~~~ ^
> ~~~~~~~~~~~~~~~~~~~~~~
> include/linux/bpf.h:781:49: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum
> bpf_return_type') [-Wenum-enum-conversion]
> 781 | RET_PTR_TO_DYNPTR_MEM_OR_NULL = PTR_MAYBE_NULL |
> RET_PTR_TO_MEM,
> | ~~~~~~~~~~~~~~ ^
> ~~~~~~~~~~~~~~
> include/linux/bpf.h:782:45: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum
> bpf_return_type') [-Wenum-enum-conversion]
> 782 | RET_PTR_TO_BTF_ID_OR_NULL = PTR_MAYBE_NULL |
> RET_PTR_TO_BTF_ID,
> | ~~~~~~~~~~~~~~ ^
> ~~~~~~~~~~~~~~~~~
> include/linux/bpf.h:783:43: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum
> bpf_return_type') [-Wenum-enum-conversion]
> 783 | RET_PTR_TO_BTF_ID_TRUSTED = PTR_TRUSTED |
> RET_PTR_TO_BTF_ID,
> | ~~~~~~~~~~~ ^
> ~~~~~~~~~~~~~~~~~
> include/linux/bpf.h:894:44: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type')
> [-Wenum-enum-conversion]
> 894 | PTR_TO_MAP_VALUE_OR_NULL = PTR_MAYBE_NULL |
> PTR_TO_MAP_VALUE,
> | ~~~~~~~~~~~~~~ ^
> ~~~~~~~~~~~~~~~~
> include/linux/bpf.h:895:42: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type')
> [-Wenum-enum-conversion]
> 895 | PTR_TO_SOCKET_OR_NULL = PTR_MAYBE_NULL |
> PTR_TO_SOCKET,
> | ~~~~~~~~~~~~~~ ^
> ~~~~~~~~~~~~~
> include/linux/bpf.h:896:46: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type')
> [-Wenum-enum-conversion]
> 896 | PTR_TO_SOCK_COMMON_OR_NULL = PTR_MAYBE_NULL |
> PTR_TO_SOCK_COMMON,
> | ~~~~~~~~~~~~~~ ^
> ~~~~~~~~~~~~~~~~~~
> include/linux/bpf.h:897:44: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type')
> [-Wenum-enum-conversion]
> 897 | PTR_TO_TCP_SOCK_OR_NULL = PTR_MAYBE_NULL |
> PTR_TO_TCP_SOCK,
> | ~~~~~~~~~~~~~~ ^
> ~~~~~~~~~~~~~~~
> include/linux/bpf.h:898:42: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type')
> [-Wenum-enum-conversion]
> 898 | PTR_TO_BTF_ID_OR_NULL = PTR_MAYBE_NULL |
> PTR_TO_BTF_ID,
> | ~~~~~~~~~~~~~~ ^
> ~~~~~~~~~~~~~
> In file included from kernel/bpf/bpf_struct_ops.c:5:
> In file included from include/linux/bpf_verifier.h:9:
> In file included from include/linux/filter.h:12:
> In file included from include/linux/skbuff.h:28:
> In file included from include/linux/dma-mapping.h:11:
> In file included from include/linux/scatterlist.h:9:
> In file included from arch/s390/include/asm/io.h:78:
> include/asm-generic/io.h:547:31: warning: performing pointer arithmetic
> on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> 547 | val = __raw_readb(PCI_IOBASE + addr);
> | ~~~~~~~~~~ ^
> include/asm-generic/io.h:560:61: warning: performing pointer arithmetic
> on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> 560 | val = __le16_to_cpu((__le16
> __force)__raw_readw(PCI_IOBASE + addr));
> |
> ~~~~~~~~~~ ^
> include/uapi/linux/byteorder/big_endian.h:37:59: note: expanded from
> macro '__le16_to_cpu'
> 37 | #define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x))
> | ^
> include/uapi/linux/swab.h:102:54: note: expanded from macro '__swab16'
> 102 | #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
> | ^
> In file included from kernel/bpf/bpf_struct_ops.c:5:
> In file included from include/linux/bpf_verifier.h:9:
> In file included from include/linux/filter.h:12:
> In file included from include/linux/skbuff.h:28:
> In file included from include/linux/dma-mapping.h:11:
> In file included from include/linux/scatterlist.h:9:
> In file included from arch/s390/include/asm/io.h:78:
> include/asm-generic/io.h:573:61: warning: performing pointer arithmetic
> on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> 573 | val = __le32_to_cpu((__le32
> __force)__raw_readl(PCI_IOBASE + addr));
> |
> ~~~~~~~~~~ ^
> include/uapi/linux/byteorder/big_endian.h:35:59: note: expanded from
> macro '__le32_to_cpu'
> 35 | #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
> | ^
> include/uapi/linux/swab.h:115:54: note: expanded from macro '__swab32'
> 115 | #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
> | ^
> In file included from kernel/bpf/bpf_struct_ops.c:5:
> In file included from include/linux/bpf_verifier.h:9:
> In file included from include/linux/filter.h:12:
> In file included from include/linux/skbuff.h:28:
> In file included from include/linux/dma-mapping.h:11:
> In file included from include/linux/scatterlist.h:9:
> In file included from arch/s390/include/asm/io.h:78:
> include/asm-generic/io.h:584:33: warning: performing pointer arithmetic
> on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> 584 | __raw_writeb(value, PCI_IOBASE + addr);
> | ~~~~~~~~~~ ^
> include/asm-generic/io.h:594:59: warning: performing pointer arithmetic
> on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> 594 | __raw_writew((u16 __force)cpu_to_le16(value),
> PCI_IOBASE + addr);
> |
> ~~~~~~~~~~ ^
> include/asm-generic/io.h:604:59: warning: performing pointer arithmetic
> on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> 604 | __raw_writel((u32 __force)cpu_to_le32(value),
> PCI_IOBASE + addr);
> |
> ~~~~~~~~~~ ^
> include/asm-generic/io.h:692:20: warning: performing pointer arithmetic
> on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> 692 | readsb(PCI_IOBASE + addr, buffer, count);
> | ~~~~~~~~~~ ^
> include/asm-generic/io.h:700:20: warning: performing pointer arithmetic
> on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> 700 | readsw(PCI_IOBASE + addr, buffer, count);
> | ~~~~~~~~~~ ^
> include/asm-generic/io.h:708:20: warning: performing pointer arithmetic
> on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> 708 | readsl(PCI_IOBASE + addr, buffer, count);
> | ~~~~~~~~~~ ^
> include/asm-generic/io.h:717:21: warning: performing pointer arithmetic
> on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> 717 | writesb(PCI_IOBASE + addr, buffer, count);
> | ~~~~~~~~~~ ^
> include/asm-generic/io.h:726:21: warning: performing pointer arithmetic
> on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> 726 | writesw(PCI_IOBASE + addr, buffer, count);
> | ~~~~~~~~~~ ^
> include/asm-generic/io.h:735:21: warning: performing pointer arithmetic
> on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> 735 | writesl(PCI_IOBASE + addr, buffer, count);
> | ~~~~~~~~~~ ^
> >> kernel/bpf/bpf_struct_ops.c:247:16: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type')
> [-Wenum-enum-conversion]
> 247 | PTR_TRUSTED | PTR_TO_BTF_ID |
> PTR_MAYBE_NULL;
> | ~~~~~~~~~~~ ^ ~~~~~~~~~~~~~
> 38 warnings generated.
>
>
> vim +247 kernel/bpf/bpf_struct_ops.c
>
> 153
> 154 /* Prepare argument info for every nullable argument of a member
> of a
> 155 * struct_ops type.
> 156 *
> 157 * Initialize a struct bpf_struct_ops_arg_info according to type
> info of
> 158 * the arguments of a stub function. (Check kCFI for more
> information about
> 159 * stub functions.)
> 160 *
> 161 * Each member in the struct_ops type has a struct
> bpf_struct_ops_arg_info
> 162 * to provide an array of struct bpf_ctx_arg_aux, which in turn
> provides
> 163 * the information that used by the verifier to check the
> arguments of the
> 164 * BPF struct_ops program assigned to the member. Here, we only
> care about
> 165 * the arguments that are marked as __nullable.
> 166 *
> 167 * The array of struct bpf_ctx_arg_aux is eventually assigned to
> 168 * prog->aux->ctx_arg_info of BPF struct_ops programs and passed
> to the
> 169 * verifier. (See check_struct_ops_btf_id())
> 170 *
> 171 * arg_info->info will be the list of struct bpf_ctx_arg_aux if
> success. If
> 172 * fails, it will be kept untouched.
> 173 */
> 174 static int prepare_arg_info(struct btf *btf,
> 175 const char *st_ops_name,
> 176 const char *member_name,
> 177 const struct btf_type *func_proto,
> 178 struct bpf_struct_ops_arg_info
> *arg_info)
> 179 {
> 180 const struct btf_type *stub_func_proto, *pointed_type;
> 181 const struct btf_param *stub_args, *args;
> 182 struct bpf_ctx_arg_aux *info, *info_buf;
> 183 u32 nargs, arg_no, info_cnt = 0;
> 184 u32 arg_btf_id;
> 185 int offset;
> 186
> 187 stub_func_proto = find_stub_func_proto(btf, st_ops_name,
> member_name);
> 188 if (!stub_func_proto)
> 189 return 0;
> 190
> 191 /* Check if the number of arguments of the stub function
> is the same
> 192 * as the number of arguments of the function pointer.
> 193 */
> 194 nargs = btf_type_vlen(func_proto);
> 195 if (nargs != btf_type_vlen(stub_func_proto)) {
> 196 pr_warn("the number of arguments of the stub
> function %s__%s does not match the number of arguments of the member %s of
> struct %s\n",
> 197 st_ops_name, member_name, member_name,
> st_ops_name);
> 198 return -EINVAL;
> 199 }
> 200
> 201 if (!nargs)
> 202 return 0;
> 203
> 204 args = btf_params(func_proto);
> 205 stub_args = btf_params(stub_func_proto);
> 206
> 207 info_buf = kcalloc(nargs, sizeof(*info_buf), GFP_KERNEL);
> 208 if (!info_buf)
> 209 return -ENOMEM;
> 210
> 211 /* Prepare info for every nullable argument */
> 212 info = info_buf;
> 213 for (arg_no = 0; arg_no < nargs; arg_no++) {
> 214 /* Skip arguments that is not suffixed with
> 215 * "__nullable".
> 216 */
> 217 if (!btf_param_match_suffix(btf,
> &stub_args[arg_no],
> 218 MAYBE_NULL_SUFFIX))
> 219 continue;
> 220
> 221 /* Should be a pointer to struct */
> 222 pointed_type = btf_type_resolve_ptr(btf,
> 223
> args[arg_no].type,
> 224 &arg_btf_id);
> 225 if (!pointed_type ||
> 226 !btf_type_is_struct(pointed_type)) {
> 227 pr_warn("stub function %s__%s has %s
> tagging to an unsupported type\n",
> 228 st_ops_name, member_name,
> MAYBE_NULL_SUFFIX);
> 229 goto err_out;
> 230 }
> 231
> 232 offset = btf_ctx_arg_offset(btf, func_proto,
> arg_no);
> 233 if (offset < 0) {
> 234 pr_warn("stub function %s__%s has an
> invalid trampoline ctx offset for arg#%u\n",
> 235 st_ops_name, member_name, arg_no);
> 236 goto err_out;
> 237 }
> 238
> 239 if (args[arg_no].type != stub_args[arg_no].type) {
> 240 pr_warn("arg#%u type in stub function
> %s__%s does not match with its original func_proto\n",
> 241 arg_no, st_ops_name, member_name);
> 242 goto err_out;
> 243 }
> 244
> 245 /* Fill the information of the new argument */
> 246 info->reg_type =
> > 247 PTR_TRUSTED | PTR_TO_BTF_ID |
> PTR_MAYBE_NULL;
> 248 info->btf_id = arg_btf_id;
> 249 info->btf = btf;
> 250 info->offset = offset;
> 251
> 252 info++;
> 253 info_cnt++;
> 254 }
> 255
> 256 if (info_cnt) {
> 257 arg_info->info = info_buf;
> 258 arg_info->cnt = info_cnt;
> 259 } else {
> 260 kfree(info_buf);
> 261 }
> 262
> 263 return 0;
> 264
> 265 err_out:
> 266 kfree(info_buf);
> 267
> 268 return -EINVAL;
> 269 }
> 270
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki
>
[-- Attachment #2: Type: text/html, Size: 20401 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [linux-next:master 5519/11156] kernel/bpf/bpf_struct_ops.c:247:16: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type')
2024-02-29 21:07 ` Thinker Li
@ 2024-03-01 18:25 ` Kui-Feng Lee
2024-03-01 18:27 ` Alexei Starovoitov
0 siblings, 1 reply; 5+ messages in thread
From: Kui-Feng Lee @ 2024-03-01 18:25 UTC (permalink / raw)
To: Thinker Li, kernel test robot
Cc: oe-kbuild-all, Linux Memory Management List, Martin KaFai Lau, bpf
For BPF,
We have a lot of code mixing bpf_type_flag and bpf_reg_type in bpf.
They cause the warning messages described in the message following.
Do we want to fix them all, or keep them as they are?
They can be fixed by merging two enum types or casting here and there if
we want. Any other idea?
On 2/29/24 13:07, Thinker Li wrote:
> I am checking it.
>
> On Thu, Feb 29, 2024 at 12:32 PM kernel test robot <lkp@intel.com
> <mailto:lkp@intel.com>> wrote:
>
> tree:
> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
> <https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git> master
> head: f303a3e2bcfba900efb5aee55236d17030e9f882
> commit: 1611603537a4b88cec7993f32b70c03113801a46 [5519/11156] bpf:
> Create argument information for nullable arguments.
> config: s390-randconfig-r133-20240229
> (https://download.01.org/0day-ci/archive/20240301/202403010423.0vNdUDBW-lkp@intel.com/config <https://download.01.org/0day-ci/archive/20240301/202403010423.0vNdUDBW-lkp@intel.com/config>)
> compiler: clang version 19.0.0git
> (https://github.com/llvm/llvm-project
> <https://github.com/llvm/llvm-project>
> edd4aee4dd9b5b98b2576a6f783e4086173d902a)
> reproduce:
> (https://download.01.org/0day-ci/archive/20240301/202403010423.0vNdUDBW-lkp@intel.com/reproduce <https://download.01.org/0day-ci/archive/20240301/202403010423.0vNdUDBW-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@intel.com <mailto:lkp@intel.com>>
> | Closes:
> https://lore.kernel.org/oe-kbuild-all/202403010423.0vNdUDBW-lkp@intel.com/ <https://lore.kernel.org/oe-kbuild-all/202403010423.0vNdUDBW-lkp@intel.com/>
>
> All warnings (new ones prefixed by >>):
>
> | ~~~~~~~~~~~~~~
> ^ ~~~~~~~~~~~~~~~~~
> include/linux/bpf.h:778:47: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum
> bpf_return_type') [-Wenum-enum-conversion]
> 778 | RET_PTR_TO_TCP_SOCK_OR_NULL = PTR_MAYBE_NULL
> | RET_PTR_TO_TCP_SOCK,
> | ~~~~~~~~~~~~~~
> ^ ~~~~~~~~~~~~~~~~~~~
> include/linux/bpf.h:779:50: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum
> bpf_return_type') [-Wenum-enum-conversion]
> 779 | RET_PTR_TO_SOCK_COMMON_OR_NULL = PTR_MAYBE_NULL
> | RET_PTR_TO_SOCK_COMMON,
> | ~~~~~~~~~~~~~~
> ^ ~~~~~~~~~~~~~~~~~~~~~~
> include/linux/bpf.h:781:49: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum
> bpf_return_type') [-Wenum-enum-conversion]
> 781 | RET_PTR_TO_DYNPTR_MEM_OR_NULL = PTR_MAYBE_NULL
> | RET_PTR_TO_MEM,
> | ~~~~~~~~~~~~~~
> ^ ~~~~~~~~~~~~~~
> include/linux/bpf.h:782:45: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum
> bpf_return_type') [-Wenum-enum-conversion]
> 782 | RET_PTR_TO_BTF_ID_OR_NULL = PTR_MAYBE_NULL
> | RET_PTR_TO_BTF_ID,
> | ~~~~~~~~~~~~~~
> ^ ~~~~~~~~~~~~~~~~~
> include/linux/bpf.h:783:43: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum
> bpf_return_type') [-Wenum-enum-conversion]
> 783 | RET_PTR_TO_BTF_ID_TRUSTED = PTR_TRUSTED
> | RET_PTR_TO_BTF_ID,
> | ~~~~~~~~~~~
> ^ ~~~~~~~~~~~~~~~~~
> include/linux/bpf.h:894:44: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum
> bpf_reg_type') [-Wenum-enum-conversion]
> 894 | PTR_TO_MAP_VALUE_OR_NULL = PTR_MAYBE_NULL
> | PTR_TO_MAP_VALUE,
> | ~~~~~~~~~~~~~~
> ^ ~~~~~~~~~~~~~~~~
> include/linux/bpf.h:895:42: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum
> bpf_reg_type') [-Wenum-enum-conversion]
> 895 | PTR_TO_SOCKET_OR_NULL = PTR_MAYBE_NULL
> | PTR_TO_SOCKET,
> | ~~~~~~~~~~~~~~
> ^ ~~~~~~~~~~~~~
> include/linux/bpf.h:896:46: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum
> bpf_reg_type') [-Wenum-enum-conversion]
> 896 | PTR_TO_SOCK_COMMON_OR_NULL = PTR_MAYBE_NULL
> | PTR_TO_SOCK_COMMON,
> | ~~~~~~~~~~~~~~
> ^ ~~~~~~~~~~~~~~~~~~
> include/linux/bpf.h:897:44: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum
> bpf_reg_type') [-Wenum-enum-conversion]
> 897 | PTR_TO_TCP_SOCK_OR_NULL = PTR_MAYBE_NULL
> | PTR_TO_TCP_SOCK,
> | ~~~~~~~~~~~~~~
> ^ ~~~~~~~~~~~~~~~
> include/linux/bpf.h:898:42: warning: bitwise operation between
> different enumeration types ('enum bpf_type_flag' and 'enum
> bpf_reg_type') [-Wenum-enum-conversion]
> 898 | PTR_TO_BTF_ID_OR_NULL = PTR_MAYBE_NULL
> | PTR_TO_BTF_ID,
> | ~~~~~~~~~~~~~~
> ^ ~~~~~~~~~~~~~
> In file included from kernel/bpf/bpf_struct_ops.c:5:
> In file included from include/linux/bpf_verifier.h:9:
> In file included from include/linux/filter.h:12:
> In file included from include/linux/skbuff.h:28:
> In file included from include/linux/dma-mapping.h:11:
> In file included from include/linux/scatterlist.h:9:
> In file included from arch/s390/include/asm/io.h:78:
> include/asm-generic/io.h:547:31: warning: performing pointer
> arithmetic on a null pointer has undefined behavior
> [-Wnull-pointer-arithmetic]
> 547 | val = __raw_readb(PCI_IOBASE + addr);
> | ~~~~~~~~~~ ^
> include/asm-generic/io.h:560:61: warning: performing pointer
> arithmetic on a null pointer has undefined behavior
> [-Wnull-pointer-arithmetic]
> 560 | val = __le16_to_cpu((__le16
> __force)__raw_readw(PCI_IOBASE + addr));
> |
> ~~~~~~~~~~ ^
> include/uapi/linux/byteorder/big_endian.h:37:59: note: expanded
> from macro '__le16_to_cpu'
> 37 | #define __le16_to_cpu(x) __swab16((__force
> __u16)(__le16)(x))
> | ^
> include/uapi/linux/swab.h:102:54: note: expanded from macro
> '__swab16'
> 102 | #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
> | ^
> In file included from kernel/bpf/bpf_struct_ops.c:5:
> In file included from include/linux/bpf_verifier.h:9:
> In file included from include/linux/filter.h:12:
> In file included from include/linux/skbuff.h:28:
> In file included from include/linux/dma-mapping.h:11:
> In file included from include/linux/scatterlist.h:9:
> In file included from arch/s390/include/asm/io.h:78:
> include/asm-generic/io.h:573:61: warning: performing pointer
> arithmetic on a null pointer has undefined behavior
> [-Wnull-pointer-arithmetic]
> 573 | val = __le32_to_cpu((__le32
> __force)__raw_readl(PCI_IOBASE + addr));
> |
> ~~~~~~~~~~ ^
> include/uapi/linux/byteorder/big_endian.h:35:59: note: expanded
> from macro '__le32_to_cpu'
> 35 | #define __le32_to_cpu(x) __swab32((__force
> __u32)(__le32)(x))
> | ^
> include/uapi/linux/swab.h:115:54: note: expanded from macro
> '__swab32'
> 115 | #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
> | ^
> In file included from kernel/bpf/bpf_struct_ops.c:5:
> In file included from include/linux/bpf_verifier.h:9:
> In file included from include/linux/filter.h:12:
> In file included from include/linux/skbuff.h:28:
> In file included from include/linux/dma-mapping.h:11:
> In file included from include/linux/scatterlist.h:9:
> In file included from arch/s390/include/asm/io.h:78:
> include/asm-generic/io.h:584:33: warning: performing pointer
> arithmetic on a null pointer has undefined behavior
> [-Wnull-pointer-arithmetic]
> 584 | __raw_writeb(value, PCI_IOBASE + addr);
> | ~~~~~~~~~~ ^
> include/asm-generic/io.h:594:59: warning: performing pointer
> arithmetic on a null pointer has undefined behavior
> [-Wnull-pointer-arithmetic]
> 594 | __raw_writew((u16 __force)cpu_to_le16(value),
> PCI_IOBASE + addr);
> |
> ~~~~~~~~~~ ^
> include/asm-generic/io.h:604:59: warning: performing pointer
> arithmetic on a null pointer has undefined behavior
> [-Wnull-pointer-arithmetic]
> 604 | __raw_writel((u32 __force)cpu_to_le32(value),
> PCI_IOBASE + addr);
> |
> ~~~~~~~~~~ ^
> include/asm-generic/io.h:692:20: warning: performing pointer
> arithmetic on a null pointer has undefined behavior
> [-Wnull-pointer-arithmetic]
> 692 | readsb(PCI_IOBASE + addr, buffer, count);
> | ~~~~~~~~~~ ^
> include/asm-generic/io.h:700:20: warning: performing pointer
> arithmetic on a null pointer has undefined behavior
> [-Wnull-pointer-arithmetic]
> 700 | readsw(PCI_IOBASE + addr, buffer, count);
> | ~~~~~~~~~~ ^
> include/asm-generic/io.h:708:20: warning: performing pointer
> arithmetic on a null pointer has undefined behavior
> [-Wnull-pointer-arithmetic]
> 708 | readsl(PCI_IOBASE + addr, buffer, count);
> | ~~~~~~~~~~ ^
> include/asm-generic/io.h:717:21: warning: performing pointer
> arithmetic on a null pointer has undefined behavior
> [-Wnull-pointer-arithmetic]
> 717 | writesb(PCI_IOBASE + addr, buffer, count);
> | ~~~~~~~~~~ ^
> include/asm-generic/io.h:726:21: warning: performing pointer
> arithmetic on a null pointer has undefined behavior
> [-Wnull-pointer-arithmetic]
> 726 | writesw(PCI_IOBASE + addr, buffer, count);
> | ~~~~~~~~~~ ^
> include/asm-generic/io.h:735:21: warning: performing pointer
> arithmetic on a null pointer has undefined behavior
> [-Wnull-pointer-arithmetic]
> 735 | writesl(PCI_IOBASE + addr, buffer, count);
> | ~~~~~~~~~~ ^
> >> kernel/bpf/bpf_struct_ops.c:247:16: warning: bitwise operation
> between different enumeration types ('enum bpf_type_flag' and 'enum
> bpf_reg_type') [-Wenum-enum-conversion]
> 247 | PTR_TRUSTED | PTR_TO_BTF_ID |
> PTR_MAYBE_NULL;
> | ~~~~~~~~~~~ ^ ~~~~~~~~~~~~~
> 38 warnings generated.
>
>
> vim +247 kernel/bpf/bpf_struct_ops.c
>
> 153
> 154 /* Prepare argument info for every nullable argument of a
> member of a
> 155 * struct_ops type.
> 156 *
> 157 * Initialize a struct bpf_struct_ops_arg_info according to
> type info of
> 158 * the arguments of a stub function. (Check kCFI for more
> information about
> 159 * stub functions.)
> 160 *
> 161 * Each member in the struct_ops type has a struct
> bpf_struct_ops_arg_info
> 162 * to provide an array of struct bpf_ctx_arg_aux, which in
> turn provides
> 163 * the information that used by the verifier to check the
> arguments of the
> 164 * BPF struct_ops program assigned to the member. Here, we
> only care about
> 165 * the arguments that are marked as __nullable.
> 166 *
> 167 * The array of struct bpf_ctx_arg_aux is eventually
> assigned to
> 168 * prog->aux->ctx_arg_info of BPF struct_ops programs and
> passed to the
> 169 * verifier. (See check_struct_ops_btf_id())
> 170 *
> 171 * arg_info->info will be the list of struct
> bpf_ctx_arg_aux if success. If
> 172 * fails, it will be kept untouched.
> 173 */
> 174 static int prepare_arg_info(struct btf *btf,
> 175 const char *st_ops_name,
> 176 const char *member_name,
> 177 const struct btf_type *func_proto,
> 178 struct bpf_struct_ops_arg_info
> *arg_info)
> 179 {
> 180 const struct btf_type *stub_func_proto, *pointed_type;
> 181 const struct btf_param *stub_args, *args;
> 182 struct bpf_ctx_arg_aux *info, *info_buf;
> 183 u32 nargs, arg_no, info_cnt = 0;
> 184 u32 arg_btf_id;
> 185 int offset;
> 186
> 187 stub_func_proto = find_stub_func_proto(btf,
> st_ops_name, member_name);
> 188 if (!stub_func_proto)
> 189 return 0;
> 190
> 191 /* Check if the number of arguments of the stub
> function is the same
> 192 * as the number of arguments of the function pointer.
> 193 */
> 194 nargs = btf_type_vlen(func_proto);
> 195 if (nargs != btf_type_vlen(stub_func_proto)) {
> 196 pr_warn("the number of arguments of the
> stub function %s__%s does not match the number of arguments of the
> member %s of struct %s\n",
> 197 st_ops_name, member_name,
> member_name, st_ops_name);
> 198 return -EINVAL;
> 199 }
> 200
> 201 if (!nargs)
> 202 return 0;
> 203
> 204 args = btf_params(func_proto);
> 205 stub_args = btf_params(stub_func_proto);
> 206
> 207 info_buf = kcalloc(nargs, sizeof(*info_buf),
> GFP_KERNEL);
> 208 if (!info_buf)
> 209 return -ENOMEM;
> 210
> 211 /* Prepare info for every nullable argument */
> 212 info = info_buf;
> 213 for (arg_no = 0; arg_no < nargs; arg_no++) {
> 214 /* Skip arguments that is not suffixed with
> 215 * "__nullable".
> 216 */
> 217 if (!btf_param_match_suffix(btf,
> &stub_args[arg_no],
> 218 MAYBE_NULL_SUFFIX))
> 219 continue;
> 220
> 221 /* Should be a pointer to struct */
> 222 pointed_type = btf_type_resolve_ptr(btf,
> 223
> args[arg_no].type,
> 224
> &arg_btf_id);
> 225 if (!pointed_type ||
> 226 !btf_type_is_struct(pointed_type)) {
> 227 pr_warn("stub function %s__%s has
> %s tagging to an unsupported type\n",
> 228 st_ops_name, member_name,
> MAYBE_NULL_SUFFIX);
> 229 goto err_out;
> 230 }
> 231
> 232 offset = btf_ctx_arg_offset(btf,
> func_proto, arg_no);
> 233 if (offset < 0) {
> 234 pr_warn("stub function %s__%s has
> an invalid trampoline ctx offset for arg#%u\n",
> 235 st_ops_name, member_name,
> arg_no);
> 236 goto err_out;
> 237 }
> 238
> 239 if (args[arg_no].type !=
> stub_args[arg_no].type) {
> 240 pr_warn("arg#%u type in stub
> function %s__%s does not match with its original func_proto\n",
> 241 arg_no, st_ops_name,
> member_name);
> 242 goto err_out;
> 243 }
> 244
> 245 /* Fill the information of the new argument */
> 246 info->reg_type =
> > 247 PTR_TRUSTED | PTR_TO_BTF_ID |
> PTR_MAYBE_NULL;
> 248 info->btf_id = arg_btf_id;
> 249 info->btf = btf;
> 250 info->offset = offset;
> 251
> 252 info++;
> 253 info_cnt++;
> 254 }
> 255
> 256 if (info_cnt) {
> 257 arg_info->info = info_buf;
> 258 arg_info->cnt = info_cnt;
> 259 } else {
> 260 kfree(info_buf);
> 261 }
> 262
> 263 return 0;
> 264
> 265 err_out:
> 266 kfree(info_buf);
> 267
> 268 return -EINVAL;
> 269 }
> 270
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki
> <https://github.com/intel/lkp-tests/wiki>
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [linux-next:master 5519/11156] kernel/bpf/bpf_struct_ops.c:247:16: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type')
2024-03-01 18:25 ` Kui-Feng Lee
@ 2024-03-01 18:27 ` Alexei Starovoitov
2024-03-02 18:09 ` Yonghong Song
0 siblings, 1 reply; 5+ messages in thread
From: Alexei Starovoitov @ 2024-03-01 18:27 UTC (permalink / raw)
To: Kui-Feng Lee
Cc: Thinker Li, kernel test robot, oe-kbuild-all,
Linux Memory Management List, Martin KaFai Lau, bpf
On Fri, Mar 1, 2024 at 10:26 AM Kui-Feng Lee <sinquersw@gmail.com> wrote:
>
> For BPF,
>
> We have a lot of code mixing bpf_type_flag and bpf_reg_type in bpf.
> They cause the warning messages described in the message following.
> Do we want to fix them all, or keep them as they are?
>
> They can be fixed by merging two enum types or casting here and there if
> we want. Any other idea?
We probably should add -Wno-enum-enum-conversion to kernel/bpf/Makefile instead.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [linux-next:master 5519/11156] kernel/bpf/bpf_struct_ops.c:247:16: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type')
2024-03-01 18:27 ` Alexei Starovoitov
@ 2024-03-02 18:09 ` Yonghong Song
0 siblings, 0 replies; 5+ messages in thread
From: Yonghong Song @ 2024-03-02 18:09 UTC (permalink / raw)
To: Alexei Starovoitov, Kui-Feng Lee
Cc: Thinker Li, kernel test robot, oe-kbuild-all,
Linux Memory Management List, Martin KaFai Lau, bpf
On 3/1/24 10:27 AM, Alexei Starovoitov wrote:
> On Fri, Mar 1, 2024 at 10:26 AM Kui-Feng Lee <sinquersw@gmail.com> wrote:
>> For BPF,
>>
>> We have a lot of code mixing bpf_type_flag and bpf_reg_type in bpf.
>> They cause the warning messages described in the message following.
>> Do we want to fix them all, or keep them as they are?
>>
>> They can be fixed by merging two enum types or casting here and there if
>> we want. Any other idea?
> We probably should add -Wno-enum-enum-conversion to kernel/bpf/Makefile instead.
The warnings are only triggered with latest llvm19 development branch.
The warnings are triggered in many subsystems, bpf, mm, etc.
The following commandline can workaround the issue:
make LLVM=1 -j KCFLAGS=-Wno-enum-enum-conversion
There is a discussion how to fix it here:
https://github.com/ClangBuiltLinux/linux/issues/2002
No conclusion yet.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-03-02 18:09 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-29 20:31 [linux-next:master 5519/11156] kernel/bpf/bpf_struct_ops.c:247:16: warning: bitwise operation between different enumeration types ('enum bpf_type_flag' and 'enum bpf_reg_type') kernel test robot
2024-02-29 21:07 ` Thinker Li
2024-03-01 18:25 ` Kui-Feng Lee
2024-03-01 18:27 ` Alexei Starovoitov
2024-03-02 18:09 ` Yonghong Song
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox