linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [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