rocker: fix rocker_tlv_put_* functions for KASAN
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. 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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
e375a05c50
commit
2397ae1e4b
1 changed files with 18 additions and 6 deletions
|
@ -821,37 +821,49 @@ static int rocker_tlv_put(struct rocker_desc_info *desc_info,
|
|||
static 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 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 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 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 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 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 struct rocker_tlv *
|
||||
|
|
Loading…
Add table
Reference in a new issue