Patch "rocker: fix rocker_tlv_put_* functions for KASAN" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
rocker: fix rocker_tlv_put_* functions for KASAN
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
rocker-fix-rocker_tlv_put_-functions-for-kasan.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
6098d7ddd62f532f80ee2a4b01aca500a8e4e9e4Mon Sep 17 00:00:00 2001
From: Arnd Bergmann <[email protected]>
Date: Fri, 22 Sep 2017 23:29:18 +0200
Subject: rocker: fix rocker_tlv_put_* functions for KASAN
From: Arnd Bergmann <[email protected]>
commit 6098d7ddd62f532f80ee2a4b01aca500a8e4e9e4 upstream.
Inlining these functions creates lots of stack variables that each take 64 bytes when KASAN is enabled, leading to this warning about potential stack overflow:
drivers/net/ethernet/rocker/rocker_ofdpa.c: In function 'ofdpa_cmd_flow_tbl_add':drivers/net/ethernet/rocker/rocker_ofdpa.c:621:1: error: the frame size of 2752 bytes is larger than 1536 bytes [-Werror=frame-larger-than=]
gcc-8 can now consolidate the stack slots itself, but on older versions we get the same behavior by using a temporary variable that holds a copy of the inline function argument.
--- drivers/net/ethernet/rocker/rocker_tlv.h | 48 +++++++++++++++++++------------ 1 file changed, 30 insertions(+), 18 deletions(-)
drivers/net/ethernet/rocker/rocker_tlv.h +30 -18
@@ -139,40 +139,52 @@ rocker_tlv_start(struct rocker_desc_infoint rocker_tlv_put (struct rocker_desc_info *desc_info,int attrtype,int attrlen,const void *data); -static inline int rocker_tlv_put_u8 (struct rocker_desc_info *desc_info, -int attrtype,u8 value) +static inline int +rocker_tlv_put_u8 (struct rocker_desc_info *desc_info,int attrtype,u8 value) { -return rocker_tlv_put (desc_info, attrtype,sizeof (u8), &value); +u8 tmp = value;/* work around GCC PR81715 */ + +return rocker_tlv_put (desc_info, attrtype,sizeof (u8), &tmp); } -static inline int rocker_tlv_put_u16 (struct rocker_desc_info *desc_info, -int attrtype,u16 value) +static inline int +rocker_tlv_put_u16 (struct rocker_desc_info *desc_info,int attrtype,u16 value) { -return rocker_tlv_put (desc_info, attrtype,sizeof (u16), &value); +u16 tmp = value; + +return rocker_tlv_put (desc_info, attrtype,sizeof (u16), &tmp); } -static inline int rocker_tlv_put_be16 (struct rocker_desc_info *desc_info, -int attrtype,__be16 value) +static inline int +rocker_tlv_put_be16 (struct rocker_desc_info *desc_info,int attrtype,__be16 value) { -return rocker_tlv_put (desc_info, attrtype,sizeof (__be16), &value); +__be16 tmp = value; + +return rocker_tlv_put (desc_info, attrtype,sizeof (__be16), &tmp); } -static inline int rocker_tlv_put_u32 (struct rocker_desc_info *desc_info, -int attrtype,u32 value) +static inline int +rocker_tlv_put_u32 (struct rocker_desc_info *desc_info,int attrtype,u32 value) { -return rocker_tlv_put (desc_info, attrtype,sizeof (u32), &value); +u32 tmp = value; + +return rocker_tlv_put (desc_info, attrtype,sizeof (u32), &tmp); } -static inline int rocker_tlv_put_be32 (struct rocker_desc_info *desc_info, -int attrtype,__be32 value) +static inline int +rocker_tlv_put_be32 (struct rocker_desc_info *desc_info,int attrtype,__be32 value) { -return rocker_tlv_put (desc_info, attrtype,sizeof (__be32), &value); +__be32 tmp = value; + +return rocker_tlv_put (desc_info, attrtype,sizeof (__be32), &tmp); } -static inline int rocker_tlv_put_u64 (struct rocker_desc_info *desc_info, -int attrtype,u64 value) +static inline int +rocker_tlv_put_u64 (struct rocker_desc_info *desc_info,int attrtype,u64 value) { -return rocker_tlv_put (desc_info, attrtype,sizeof (u64), &value); +u64 tmp = value; + +return rocker_tlv_put (desc_info, attrtype,sizeof (u64), &tmp); } static inline struct rocker_tlv *
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/percpu-make-this_cpu_generic_read-atomic-w.r.t.-interrupts.patch queue-4.9/rocker-fix-rocker_tlv_put_-functions-for-kasan.patch queue-4.9/netlink-fix-nla_put_-u8-u16-u32-for-kasan.patch