* Re: [PATCH] kbuild: Enable -Wincompatible-function-pointer-types-strict in W=1
2023-10-02 22:19 [PATCH] kbuild: Enable -Wincompatible-function-pointer-types-strict in W=1 Nathan Chancellor
@ 2023-10-03 5:53 ` kernel test robot
2023-10-03 18:38 ` Nathan Chancellor
2023-10-05 18:38 ` Nick Desaulniers
1 sibling, 1 reply; 4+ messages in thread
From: kernel test robot @ 2023-10-03 5:53 UTC (permalink / raw)
To: Nathan Chancellor, masahiroy
Cc: llvm, oe-kbuild-all, ndesaulniers, keescook, samitolvanen,
nicolas, trix, linux-kbuild, patches, Nathan Chancellor
Hi Nathan,
kernel test robot noticed the following build warnings:
[auto build test WARNING on ce9ecca0238b140b88f43859b211c9fdfd8e5b70]
url: https://github.com/intel-lab-lkp/linux/commits/Nathan-Chancellor/kbuild-Enable-Wincompatible-function-pointer-types-strict-in-W-1/20231003-062107
base: ce9ecca0238b140b88f43859b211c9fdfd8e5b70
patch link: https://lore.kernel.org/r/20231002-enable-wincompatible-function-pointer-types-strict-w-1-v1-1-808ab955d42d%40kernel.org
patch subject: [PATCH] kbuild: Enable -Wincompatible-function-pointer-types-strict in W=1
config: um-allnoconfig (https://download.01.org/0day-ci/archive/20231003/202310031340.v1vPh207-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231003/202310031340.v1vPh207-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/202310031340.v1vPh207-lkp@intel.com/
All warnings (new ones prefixed by >>):
In file included from arch/um/drivers/net_kern.c:9:
In file included from include/linux/memblock.h:13:
In file included from arch/um/include/asm/dma.h:5:
In file included from arch/um/include/asm/io.h:24:
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/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu'
37 | #define __le16_to_cpu(x) ((__force __u16)(__le16)(x))
| ^
In file included from arch/um/drivers/net_kern.c:9:
In file included from include/linux/memblock.h:13:
In file included from arch/um/include/asm/dma.h:5:
In file included from arch/um/include/asm/io.h:24:
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/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu'
35 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x))
| ^
In file included from arch/um/drivers/net_kern.c:9:
In file included from include/linux/memblock.h:13:
In file included from arch/um/include/asm/dma.h:5:
In file included from arch/um/include/asm/io.h:24:
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);
| ~~~~~~~~~~ ^
>> arch/um/drivers/net_kern.c:353:21: warning: incompatible function pointer types initializing 'netdev_tx_t (*)(struct sk_buff *, struct net_device *)' (aka 'enum netdev_tx (*)(struct sk_buff *, struct net_device *)') with an expression of type 'int (struct sk_buff *, struct net_device *)' [-Wincompatible-function-pointer-types-strict]
353 | .ndo_start_xmit = uml_net_start_xmit,
| ^~~~~~~~~~~~~~~~~~
13 warnings generated.
vim +353 arch/um/drivers/net_kern.c
2e3f5251ac7168 Jeff Dike 2007-05-06 349
8bb95b39a16ed5 Stephen Hemminger 2009-03-26 350 static const struct net_device_ops uml_netdev_ops = {
8bb95b39a16ed5 Stephen Hemminger 2009-03-26 351 .ndo_open = uml_net_open,
8bb95b39a16ed5 Stephen Hemminger 2009-03-26 352 .ndo_stop = uml_net_close,
8bb95b39a16ed5 Stephen Hemminger 2009-03-26 @353 .ndo_start_xmit = uml_net_start_xmit,
afc4b13df14312 Jiri Pirko 2011-08-16 354 .ndo_set_rx_mode = uml_net_set_multicast_list,
8bb95b39a16ed5 Stephen Hemminger 2009-03-26 355 .ndo_tx_timeout = uml_net_tx_timeout,
9337057d433505 Boaz Harrosh 2010-09-29 356 .ndo_set_mac_address = eth_mac_addr,
8bb95b39a16ed5 Stephen Hemminger 2009-03-26 357 .ndo_validate_addr = eth_validate_addr,
dd71dc4c335a89 Richard Weinberger 2011-07-25 358 #ifdef CONFIG_NET_POLL_CONTROLLER
dd71dc4c335a89 Richard Weinberger 2011-07-25 359 .ndo_poll_controller = uml_net_poll_controller,
dd71dc4c335a89 Richard Weinberger 2011-07-25 360 #endif
8bb95b39a16ed5 Stephen Hemminger 2009-03-26 361 };
8bb95b39a16ed5 Stephen Hemminger 2009-03-26 362
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH] kbuild: Enable -Wincompatible-function-pointer-types-strict in W=1
2023-10-02 22:19 [PATCH] kbuild: Enable -Wincompatible-function-pointer-types-strict in W=1 Nathan Chancellor
2023-10-03 5:53 ` kernel test robot
@ 2023-10-05 18:38 ` Nick Desaulniers
1 sibling, 0 replies; 4+ messages in thread
From: Nick Desaulniers @ 2023-10-05 18:38 UTC (permalink / raw)
To: Nathan Chancellor
Cc: masahiroy, keescook, samitolvanen, nicolas, trix, linux-kbuild,
llvm, patches
On Mon, Oct 2, 2023 at 3:20 PM Nathan Chancellor <nathan@kernel.org> wrote:
>
> -Wincompatible-function-pointer-types-strict aims to catch clang kernel
> Control Flow Integrity (kCFI) violations at build time (rather than run
> time) by validating function pointer assignments against the expected
> prototype, similar to the existing -Wincompatible-function-pointer-types
> that is considered a hard error in the kernel. The -strict variant
> requires the types to match exactly, as opposed to just matching in
> terms of ABI compatibility. This is primarily visible with int/unsigned
> int in lieu of enum types or vice versa.
>
> The tree is not completely clean, so this warning cannot currently be
> enabled unconditionally. However, there are only warnings in one
> subsystem ('drivers/counter'), so it is really close. In order to
> benefit from CI infrastructure that tests with W=1, enable this warning
> at that level, so that new instances have a chance of being caught and
> fixed during development.
>
> This should eventually be a hard error in a similar manner as
> Wincompatible-function-pointer-types but some subsystems test
> with W=1 + CONFIG_WERROR=n, so it would be rude to break their builds
> when they do not care about warnings outside of their subsystem.
>
> Link: https://github.com/ClangBuiltLinux/linux/issues/1750
> Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Sounds like we're pretty close to just enabling this by default.
Getting it on in W=1 for a cycle will help prevent any backslide.
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
> ---
> scripts/Makefile.extrawarn | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/scripts/Makefile.extrawarn b/scripts/Makefile.extrawarn
> index 2fe6f2828d37..9662f7fd6e39 100644
> --- a/scripts/Makefile.extrawarn
> +++ b/scripts/Makefile.extrawarn
> @@ -108,6 +108,7 @@ KBUILD_CFLAGS += $(call cc-option, -Wformat-overflow)
> KBUILD_CFLAGS += $(call cc-option, -Wformat-truncation)
> KBUILD_CFLAGS += $(call cc-option, -Wstringop-overflow)
> KBUILD_CFLAGS += $(call cc-option, -Wstringop-truncation)
> +KBUILD_CFLAGS += $(call cc-option, -Wincompatible-function-pointer-types-strict)
>
> KBUILD_CPPFLAGS += -Wundef
> KBUILD_CPPFLAGS += -DKBUILD_EXTRA_WARN1
>
> ---
> base-commit: ce9ecca0238b140b88f43859b211c9fdfd8e5b70
> change-id: 20231002-enable-wincompatible-function-pointer-types-strict-w-1-4a56b99b8c6f
>
> Best regards,
> --
> Nathan Chancellor <nathan@kernel.org>
>
--
Thanks,
~Nick Desaulniers
^ permalink raw reply [flat|nested] 4+ messages in thread