This is a note to let you know that I've just added the patch titled
netlink: fix nla_put_{u8,u16,u32} for KASAN
to the 4.4-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git%3Ba=su...
The filename of the patch is: netlink-fix-nla_put_-u8-u16-u32-for-kasan.patch and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let stable@vger.kernel.org know about it.
From foo@baz Fri Feb 23 17:12:49 CET 2018
From: Arnd Bergmann arnd@arndb.de Date: Tue, 20 Feb 2018 12:54:58 +0100 Subject: netlink: fix nla_put_{u8,u16,u32} for KASAN To: stable@vger.kernel.org Cc: Greg KH gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, Arnd Bergmann arnd@arndb.de, "David S . Miller" davem@davemloft.net, netdev@vger.kernel.org Message-ID: 20180220115527.1806578-12-arnd@arndb.de
From: Arnd Bergmann arnd@arndb.de
commit b4391db42308c9940944b5d7be5ca4b78fb88dd0 upstream.
When CONFIG_KASAN is enabled, the "--param asan-stack=1" causes rather large stack frames in some functions. This goes unnoticed normally because CONFIG_FRAME_WARN is disabled with CONFIG_KASAN by default as of commit 3f181b4d8652 ("lib/Kconfig.debug: disable -Wframe-larger-than warnings with KASAN=y").
The kernelci.org build bot however has the warning enabled and that led me to investigate it a little further, as every build produces these warnings:
net/wireless/nl80211.c:4389:1: warning: the frame size of 2240 bytes is larger than 2048 bytes [-Wframe-larger-than=] net/wireless/nl80211.c:1895:1: warning: the frame size of 3776 bytes is larger than 2048 bytes [-Wframe-larger-than=] net/wireless/nl80211.c:1410:1: warning: the frame size of 2208 bytes is larger than 2048 bytes [-Wframe-larger-than=] net/bridge/br_netlink.c:1282:1: warning: the frame size of 2544 bytes is larger than 2048 bytes [-Wframe-larger-than=]
Most of this problem is now solved in gcc-8, which can consolidate the stack slots for the inline function arguments. On older compilers we can add a workaround by declaring a local variable in each function to pass the inline function argument.
Cc: stable@vger.kernel.org Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81715 Signed-off-by: Arnd Bergmann arnd@arndb.de Signed-off-by: David S. Miller davem@davemloft.net [arnd: rebased to 4.4-stable] Signed-off-by: Arnd Bergmann arnd@arndb.de Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org --- include/net/netlink.h | 73 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 55 insertions(+), 18 deletions(-)
--- a/include/net/netlink.h +++ b/include/net/netlink.h @@ -745,7 +745,10 @@ static inline int nla_parse_nested(struc */ static inline int nla_put_u8(struct sk_buff *skb, int attrtype, u8 value) { - return nla_put(skb, attrtype, sizeof(u8), &value); + /* temporary variables to work around GCC PR81715 with asan-stack=1 */ + u8 tmp = value; + + return nla_put(skb, attrtype, sizeof(u8), &tmp); }
/** @@ -756,7 +759,9 @@ static inline int nla_put_u8(struct sk_b */ static inline int nla_put_u16(struct sk_buff *skb, int attrtype, u16 value) { - return nla_put(skb, attrtype, sizeof(u16), &value); + u16 tmp = value; + + return nla_put(skb, attrtype, sizeof(u16), &tmp); }
/** @@ -767,7 +772,9 @@ static inline int nla_put_u16(struct sk_ */ static inline int nla_put_be16(struct sk_buff *skb, int attrtype, __be16 value) { - return nla_put(skb, attrtype, sizeof(__be16), &value); + __be16 tmp = value; + + return nla_put(skb, attrtype, sizeof(__be16), &tmp); }
/** @@ -778,7 +785,9 @@ static inline int nla_put_be16(struct sk */ static inline int nla_put_net16(struct sk_buff *skb, int attrtype, __be16 value) { - return nla_put_be16(skb, attrtype | NLA_F_NET_BYTEORDER, value); + __be16 tmp = value; + + return nla_put_be16(skb, attrtype | NLA_F_NET_BYTEORDER, tmp); }
/** @@ -789,7 +798,9 @@ static inline int nla_put_net16(struct s */ static inline int nla_put_le16(struct sk_buff *skb, int attrtype, __le16 value) { - return nla_put(skb, attrtype, sizeof(__le16), &value); + __le16 tmp = value; + + return nla_put(skb, attrtype, sizeof(__le16), &tmp); }
/** @@ -800,7 +811,9 @@ static inline int nla_put_le16(struct sk */ static inline int nla_put_u32(struct sk_buff *skb, int attrtype, u32 value) { - return nla_put(skb, attrtype, sizeof(u32), &value); + u32 tmp = value; + + return nla_put(skb, attrtype, sizeof(u32), &tmp); }
/** @@ -811,7 +824,9 @@ static inline int nla_put_u32(struct sk_ */ static inline int nla_put_be32(struct sk_buff *skb, int attrtype, __be32 value) { - return nla_put(skb, attrtype, sizeof(__be32), &value); + __be32 tmp = value; + + return nla_put(skb, attrtype, sizeof(__be32), &tmp); }
/** @@ -822,7 +837,9 @@ static inline int nla_put_be32(struct sk */ static inline int nla_put_net32(struct sk_buff *skb, int attrtype, __be32 value) { - return nla_put_be32(skb, attrtype | NLA_F_NET_BYTEORDER, value); + __be32 tmp = value; + + return nla_put_be32(skb, attrtype | NLA_F_NET_BYTEORDER, tmp); }
/** @@ -833,7 +850,9 @@ static inline int nla_put_net32(struct s */ static inline int nla_put_le32(struct sk_buff *skb, int attrtype, __le32 value) { - return nla_put(skb, attrtype, sizeof(__le32), &value); + __le32 tmp = value; + + return nla_put(skb, attrtype, sizeof(__le32), &tmp); }
/** @@ -844,7 +863,9 @@ static inline int nla_put_le32(struct sk */ static inline int nla_put_u64(struct sk_buff *skb, int attrtype, u64 value) { - return nla_put(skb, attrtype, sizeof(u64), &value); + u64 tmp = value; + + return nla_put(skb, attrtype, sizeof(u64), &tmp); }
/** @@ -855,7 +876,9 @@ static inline int nla_put_u64(struct sk_ */ static inline int nla_put_be64(struct sk_buff *skb, int attrtype, __be64 value) { - return nla_put(skb, attrtype, sizeof(__be64), &value); + __be64 tmp = value; + + return nla_put(skb, attrtype, sizeof(__be64), &tmp); }
/** @@ -866,7 +889,9 @@ static inline int nla_put_be64(struct sk */ static inline int nla_put_net64(struct sk_buff *skb, int attrtype, __be64 value) { - return nla_put_be64(skb, attrtype | NLA_F_NET_BYTEORDER, value); + __be64 tmp = value; + + return nla_put_be64(skb, attrtype | NLA_F_NET_BYTEORDER, tmp); }
/** @@ -877,7 +902,9 @@ static inline int nla_put_net64(struct s */ static inline int nla_put_le64(struct sk_buff *skb, int attrtype, __le64 value) { - return nla_put(skb, attrtype, sizeof(__le64), &value); + __le64 tmp = value; + + return nla_put(skb, attrtype, sizeof(__le64), &tmp); }
/** @@ -888,7 +915,9 @@ static inline int nla_put_le64(struct sk */ static inline int nla_put_s8(struct sk_buff *skb, int attrtype, s8 value) { - return nla_put(skb, attrtype, sizeof(s8), &value); + s8 tmp = value; + + return nla_put(skb, attrtype, sizeof(s8), &tmp); }
/** @@ -899,7 +928,9 @@ static inline int nla_put_s8(struct sk_b */ static inline int nla_put_s16(struct sk_buff *skb, int attrtype, s16 value) { - return nla_put(skb, attrtype, sizeof(s16), &value); + s16 tmp = value; + + return nla_put(skb, attrtype, sizeof(s16), &tmp); }
/** @@ -910,7 +941,9 @@ static inline int nla_put_s16(struct sk_ */ static inline int nla_put_s32(struct sk_buff *skb, int attrtype, s32 value) { - return nla_put(skb, attrtype, sizeof(s32), &value); + s32 tmp = value; + + return nla_put(skb, attrtype, sizeof(s32), &tmp); }
/** @@ -921,7 +954,9 @@ static inline int nla_put_s32(struct sk_ */ static inline int nla_put_s64(struct sk_buff *skb, int attrtype, s64 value) { - return nla_put(skb, attrtype, sizeof(s64), &value); + s64 tmp = value; + + return nla_put(skb, attrtype, sizeof(s64), &tmp); }
/** @@ -969,7 +1004,9 @@ static inline int nla_put_msecs(struct s static inline int nla_put_in_addr(struct sk_buff *skb, int attrtype, __be32 addr) { - return nla_put_be32(skb, attrtype, addr); + __be32 tmp = addr; + + return nla_put_be32(skb, attrtype, tmp); }
/**
Patches currently in stable-queue which might be from arnd@arndb.de are
queue-4.4/kasan-rework-kconfig-settings.patch queue-4.4/hdpvr-hide-unused-variable.patch queue-4.4/mtd-ichxrom-maybe-uninitialized-with-gcc-4.9.patch queue-4.4/profile-hide-unused-functions-when-config_proc_fs.patch queue-4.4/perf-x86-shut-up-false-positive-wmaybe-uninitialized-warning.patch queue-4.4/hwrng-exynos-use-__maybe_unused-to-hide-pm-functions.patch queue-4.4/usb-cdc_subset-only-build-when-one-driver-is-enabled.patch queue-4.4/ipv4-ipconfig-avoid-unused-ic_proto_used-symbol.patch queue-4.4/revert-power-bq27xxx_battery-remove-unneeded-dependency-in-kconfig.patch queue-4.4/go7007-add-media_camera_support-dependency.patch queue-4.4/scsi-advansys-fix-build-warning-for-pci-n.patch queue-4.4/ssb-mark-ssb_bus_register-as-__maybe_unused.patch queue-4.4/tty-cyclades-cyz_interrupt-is-only-used-for-pci.patch queue-4.4/infiniband-cxgb4-use-pr-format-string-for-printing-resources.patch queue-4.4/video-fbdev-via-remove-possibly-unused-variables.patch queue-4.4/binfmt_elf-compat-avoid-unused-function-warning.patch queue-4.4/drm-gma500-remove-helper-function.patch queue-4.4/fbdev-s6e8ax0-avoid-unused-function-warnings.patch queue-4.4/netfilter-ipvs-avoid-unused-variable-warnings.patch queue-4.4/idle-i7300-add-pci-dependency.patch queue-4.4/b2c2-flexcop-avoid-unused-function-warnings.patch queue-4.4/fbdev-auo_k190x-avoid-unused-function-warnings.patch queue-4.4/cw1200-fix-bogus-maybe-uninitialized-warning.patch queue-4.4/x86-build-silence-the-build-with-make-s.patch queue-4.4/gpio-xgene-mark-pm-functions-as-__maybe_unused.patch queue-4.4/kvm-add-x86_local_apic-dependency.patch queue-4.4/arm-tegra-select-usb_ulpi-from-ehci-rather-than-platform.patch queue-4.4/asoc-mediatek-add-i2c-dependency.patch queue-4.4/reiserfs-avoid-a-wmaybe-uninitialized-warning.patch queue-4.4/scsi-advansys-fix-uninitialized-data-access.patch queue-4.4/mtd-sh_flctl-pass-fifo-as-physical-address.patch queue-4.4/driver-core-use-dev-argument-in-dev_dbg_ratelimited-stub.patch queue-4.4/modsign-hide-openssl-output-in-silent-builds.patch queue-4.4/net-hp100-remove-unnecessary-ifdefs.patch queue-4.4/genirq-msi-add-stubs-for-get_cached_msi_msg-pci_write_msi_msg.patch queue-4.4/asoc-intel-kconfig-fix-build-when-acpi-is-not-enabled.patch queue-4.4/asoc-ux500-add-module_license-tag.patch queue-4.4/wireless-cw1200-use-__maybe_unused-to-hide-pm-functions_.patch queue-4.4/mptfusion-hide-unused-seq_mpt_print_ioc_summary-function.patch queue-4.4/tlan-avoid-unused-label-with-pci-n.patch queue-4.4/usb-musb-ux500-remove-duplicate-check-for-dma_is_compatible.patch queue-4.4/mtd-cfi-enforce-valid-geometry-configuration.patch queue-4.4/thermal-spear-use-__maybe_unused-for-pm-functions.patch queue-4.4/x86-microcode-amd-change-load_microcode_amd-s-param-to-bool-to-fix-preemptibility-bug.patch queue-4.4/video-fbdev-mmp-add-module_license.patch queue-4.4/fbdev-sis-enforce-selection-of-at-least-one-backend.patch queue-4.4/x86-boot-avoid-warning-for-zero-filling-.bss.patch queue-4.4/power-bq27xxx_battery-mark-some-symbols-__maybe_unused.patch queue-4.4/scsi-mvumi-use-__maybe_unused-to-hide-pm-functions.patch queue-4.4/usb-phy-msm-add-regulator-dependency.patch queue-4.4/isdn-icn-remove-a-warning.patch queue-4.4/ncr5380-shut-up-gcc-indentation-warning.patch queue-4.4/arm64-dts-add-cooling-cells-to-cpu-nodes.patch queue-4.4/vmxnet3-prevent-building-with-64k-pages.patch queue-4.4/genksyms-fix-segfault-with-invalid-declarations.patch queue-4.4/x86-platform-add-pci-dependency-for-punit_atom_debug.patch queue-4.4/target-user-fix-cast-from-pointer-to-phys_addr_t.patch queue-4.4/rtlwifi-fix-gcc-6-indentation-warning.patch queue-4.4/alsa-hda-ca0132-fix-possible-null-pointer-use.patch queue-4.4/thermal-fix-intel_soc_dts_iosf_core-dependencies.patch queue-4.4/arm64-define-bug-instruction-without-config_bug.patch queue-4.4/v4l-remove-media_tuner-dependency-for-video_tuner.patch queue-4.4/tc358743-fix-register-i2c_rd-wr-functions.patch queue-4.4/scsi-fdomain-drop-fdomain_pci_tbl-when-built-in.patch queue-4.4/scsi-initio-remove-duplicate-module-device-table.patch queue-4.4/netlink-fix-nla_put_-u8-u16-u32-for-kasan.patch queue-4.4/x86-fpu-math-emu-fix-possible-uninitialized-variable-use.patch queue-4.4/asoc-rockchip-use-__maybe_unused-to-hide-st_irq_syscfg_resume.patch queue-4.4/staging-ste_rmi4-avoid-unused-function-warnings.patch queue-4.4/em28xx-only-use-mt9v011-if-camera-support-is-enabled.patch queue-4.4/pwc-hide-unused-label.patch queue-4.4/input-tca8418_keypad-hide-gcc-4.9-wmaybe-uninitialized-warning.patch queue-4.4/fbdev-sm712fb-avoid-unused-function-warnings.patch queue-4.4/isdn-sc-work-around-type-mismatch-warning.patch queue-4.4/tty-hvc_xen-hide-xen_console_remove-when-unused.patch queue-4.4/virtio_balloon-prevent-uninitialized-variable-use.patch queue-4.4/drm-nouveau-hide-gcc-4.9-wmaybe-uninitialized.patch queue-4.4/dell-wmi-dell-laptop-depends-dmi.patch queue-4.4/x86-add-multiuser-dependency-for-kvm.patch queue-4.4/md-avoid-warning-for-32-bit-sector_t.patch queue-4.4/isdn-eicon-reduce-stack-size-of-sig_ind-function.patch