Commit 2eed3dee authored by Larry Finger's avatar Larry Finger Committed by Greg Kroah-Hartman

staging: rtl8192e: Fix smatch warnings regarding large arrays on stack

Smatch reports the follwing warnings:

  CHECK   drivers/staging/rtl8192e/rtllib_rx.c
drivers/staging/rtl8192e/rtllib_rx.c +552 RxReorderIndicatePacket(6) warn: 'prxbIndicateArray' puts 1024 bytes on stack

  CHECK   drivers/staging/rtl8192e/rtl819x_TSProc.c
drivers/staging/rtl8192e/rtl819x_TSProc.c +40 RxPktPendingTimeout(9) warn: 'stats_IndicateArray' puts 1024 bytes on stack

  CHECK   drivers/staging/rtl8192e/r8192E_phy.c
drivers/staging/rtl8192e/r8192E_phy.c +859 rtl8192_phy_SwChnlStepByStep(11) warn: function puts 797 bytes on stack

  CHECK   drivers/staging/rtl8192e/rtllib_rx.c
drivers/staging/rtl8192e/rtllib_rx.c +552 RxReorderIndicatePacket(6) warn: 'prxbIndicateArray' puts 1024 bytes on stack

These are fixed by adding the arrays in question as a union in a struct used
by nearly all routines.
Signed-off-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 52a7fb09
...@@ -849,11 +849,9 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel, ...@@ -849,11 +849,9 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel,
u8 *stage, u8 *step, u32 *delay) u8 *stage, u8 *step, u32 *delay)
{ {
struct r8192_priv *priv = rtllib_priv(dev); struct r8192_priv *priv = rtllib_priv(dev);
struct sw_chnl_cmd PreCommonCmd[MAX_PRECMD_CNT]; struct rtllib_device *ieee = priv->rtllib;
u32 PreCommonCmdCnt; u32 PreCommonCmdCnt;
struct sw_chnl_cmd PostCommonCmd[MAX_POSTCMD_CNT];
u32 PostCommonCmdCnt; u32 PostCommonCmdCnt;
struct sw_chnl_cmd RfDependCmd[MAX_RFDEPENDCMD_CNT];
u32 RfDependCmdCnt; u32 RfDependCmdCnt;
struct sw_chnl_cmd *CurrentCmd = NULL; struct sw_chnl_cmd *CurrentCmd = NULL;
u8 eRFPath; u8 eRFPath;
...@@ -869,15 +867,18 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel, ...@@ -869,15 +867,18 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel,
{ {
PreCommonCmdCnt = 0; PreCommonCmdCnt = 0;
rtl8192_phy_SetSwChnlCmdArray(PreCommonCmd, PreCommonCmdCnt++, rtl8192_phy_SetSwChnlCmdArray(ieee->PreCommonCmd,
PreCommonCmdCnt++,
MAX_PRECMD_CNT, CmdID_SetTxPowerLevel, MAX_PRECMD_CNT, CmdID_SetTxPowerLevel,
0, 0, 0); 0, 0, 0);
rtl8192_phy_SetSwChnlCmdArray(PreCommonCmd, PreCommonCmdCnt++, rtl8192_phy_SetSwChnlCmdArray(ieee->PreCommonCmd,
PreCommonCmdCnt++,
MAX_PRECMD_CNT, CmdID_End, 0, 0, 0); MAX_PRECMD_CNT, CmdID_End, 0, 0, 0);
PostCommonCmdCnt = 0; PostCommonCmdCnt = 0;
rtl8192_phy_SetSwChnlCmdArray(PostCommonCmd, PostCommonCmdCnt++, rtl8192_phy_SetSwChnlCmdArray(ieee->PostCommonCmd,
PostCommonCmdCnt++,
MAX_POSTCMD_CNT, CmdID_End, 0, 0, 0); MAX_POSTCMD_CNT, CmdID_End, 0, 0, 0);
RfDependCmdCnt = 0; RfDependCmdCnt = 0;
...@@ -888,11 +889,11 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel, ...@@ -888,11 +889,11 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel,
"8225: %d\n", channel); "8225: %d\n", channel);
return false; return false;
} }
rtl8192_phy_SetSwChnlCmdArray(RfDependCmd, rtl8192_phy_SetSwChnlCmdArray(ieee->RfDependCmd,
RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
CmdID_RF_WriteReg, rZebra1_Channel, CmdID_RF_WriteReg, rZebra1_Channel,
RF_CHANNEL_TABLE_ZEBRA[channel], 10); RF_CHANNEL_TABLE_ZEBRA[channel], 10);
rtl8192_phy_SetSwChnlCmdArray(RfDependCmd, rtl8192_phy_SetSwChnlCmdArray(ieee->RfDependCmd,
RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
CmdID_End, 0, 0, 0); CmdID_End, 0, 0, 0);
break; break;
...@@ -903,11 +904,12 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel, ...@@ -903,11 +904,12 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel,
" 8256: %d\n", channel); " 8256: %d\n", channel);
return false; return false;
} }
rtl8192_phy_SetSwChnlCmdArray(RfDependCmd, rtl8192_phy_SetSwChnlCmdArray(ieee->RfDependCmd,
RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
CmdID_RF_WriteReg, rZebra1_Channel, channel, CmdID_RF_WriteReg, rZebra1_Channel, channel,
10); 10);
rtl8192_phy_SetSwChnlCmdArray(RfDependCmd, rtl8192_phy_SetSwChnlCmdArray(ieee->RfDependCmd,
RfDependCmdCnt++, RfDependCmdCnt++,
MAX_RFDEPENDCMD_CNT, MAX_RFDEPENDCMD_CNT,
CmdID_End, 0, 0, 0); CmdID_End, 0, 0, 0);
...@@ -927,13 +929,13 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel, ...@@ -927,13 +929,13 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel,
do { do {
switch (*stage) { switch (*stage) {
case 0: case 0:
CurrentCmd = &PreCommonCmd[*step]; CurrentCmd = &ieee->PreCommonCmd[*step];
break; break;
case 1: case 1:
CurrentCmd = &RfDependCmd[*step]; CurrentCmd = &ieee->RfDependCmd[*step];
break; break;
case 2: case 2:
CurrentCmd = &PostCommonCmd[*step]; CurrentCmd = &ieee->PostCommonCmd[*step];
break; break;
} }
......
...@@ -21,10 +21,6 @@ ...@@ -21,10 +21,6 @@
#define MAX_DOZE_WAITING_TIMES_9x 64 #define MAX_DOZE_WAITING_TIMES_9x 64
#define MAX_PRECMD_CNT 16
#define MAX_RFDEPENDCMD_CNT 16
#define MAX_POSTCMD_CNT 16
#define AGCTAB_ArrayLength AGCTAB_ArrayLengthPciE #define AGCTAB_ArrayLength AGCTAB_ArrayLengthPciE
#define MACPHY_ArrayLength MACPHY_ArrayLengthPciE #define MACPHY_ArrayLength MACPHY_ArrayLengthPciE
#define RadioA_ArrayLength RadioA_ArrayLengthPciE #define RadioA_ArrayLength RadioA_ArrayLengthPciE
...@@ -45,26 +41,6 @@ ...@@ -45,26 +41,6 @@
#define Rtl819XPHY_REGArray Rtl8192PciEPHY_REGArray #define Rtl819XPHY_REGArray Rtl8192PciEPHY_REGArray
#define Rtl819XPHY_REG_1T2RArray Rtl8192PciEPHY_REG_1T2RArray #define Rtl819XPHY_REG_1T2RArray Rtl8192PciEPHY_REG_1T2RArray
enum sw_chnl_cmd_id {
CmdID_End,
CmdID_SetTxPowerLevel,
CmdID_BBRegWrite10,
CmdID_WritePortUlong,
CmdID_WritePortUshort,
CmdID_WritePortUchar,
CmdID_RF_WriteReg,
};
/*--------------------------------Define structure----------------------------*/
struct sw_chnl_cmd {
enum sw_chnl_cmd_id CmdID;
u32 Para1;
u32 Para2;
u32 msDelay;
} __packed;
extern u32 rtl819XMACPHY_Array_PG[]; extern u32 rtl819XMACPHY_Array_PG[];
extern u32 rtl819XPHY_REG_1T2RArray[]; extern u32 rtl819XPHY_REG_1T2RArray[];
extern u32 rtl819XAGCTAB_Array[]; extern u32 rtl819XAGCTAB_Array[];
......
...@@ -37,7 +37,6 @@ static void RxPktPendingTimeout(unsigned long data) ...@@ -37,7 +37,6 @@ static void RxPktPendingTimeout(unsigned long data)
struct rx_reorder_entry *pReorderEntry = NULL; struct rx_reorder_entry *pReorderEntry = NULL;
unsigned long flags = 0; unsigned long flags = 0;
struct rtllib_rxb *stats_IndicateArray[REORDER_WIN_SIZE];
u8 index = 0; u8 index = 0;
bool bPktInBuf = false; bool bPktInBuf = false;
...@@ -62,7 +61,7 @@ static void RxPktPendingTimeout(unsigned long data) ...@@ -62,7 +61,7 @@ static void RxPktPendingTimeout(unsigned long data)
RTLLIB_DEBUG(RTLLIB_DL_REORDER, "%s(): Indicate" RTLLIB_DEBUG(RTLLIB_DL_REORDER, "%s(): Indicate"
" SeqNum: %d\n", __func__, " SeqNum: %d\n", __func__,
pReorderEntry->SeqNum); pReorderEntry->SeqNum);
stats_IndicateArray[index] = ieee->stats_IndicateArray[index] =
pReorderEntry->prxb; pReorderEntry->prxb;
index++; index++;
...@@ -85,7 +84,7 @@ static void RxPktPendingTimeout(unsigned long data) ...@@ -85,7 +84,7 @@ static void RxPktPendingTimeout(unsigned long data)
flags); flags);
return; return;
} }
rtllib_indicate_packets(ieee, stats_IndicateArray, index); rtllib_indicate_packets(ieee, ieee->stats_IndicateArray, index);
bPktInBuf = false; bPktInBuf = false;
} }
......
...@@ -43,6 +43,10 @@ ...@@ -43,6 +43,10 @@
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/if_arp.h> /* ARPHRD_ETHER */ #include <linux/if_arp.h> /* ARPHRD_ETHER */
#define MAX_PRECMD_CNT 16
#define MAX_RFDEPENDCMD_CNT 16
#define MAX_POSTCMD_CNT 16
#ifndef WIRELESS_SPY #ifndef WIRELESS_SPY
#define WIRELESS_SPY #define WIRELESS_SPY
#endif #endif
...@@ -208,6 +212,23 @@ struct cb_desc { ...@@ -208,6 +212,23 @@ struct cb_desc {
u8 bIsBTProbRsp; u8 bIsBTProbRsp;
}; };
enum sw_chnl_cmd_id {
CmdID_End,
CmdID_SetTxPowerLevel,
CmdID_BBRegWrite10,
CmdID_WritePortUlong,
CmdID_WritePortUshort,
CmdID_WritePortUchar,
CmdID_RF_WriteReg,
};
struct sw_chnl_cmd {
enum sw_chnl_cmd_id CmdID;
u32 Para1;
u32 Para2;
u32 msDelay;
} __packed;
/*--------------------------Define -------------------------------------------*/ /*--------------------------Define -------------------------------------------*/
#define MGN_1M 0x02 #define MGN_1M 0x02
#define MGN_2M 0x04 #define MGN_2M 0x04
...@@ -2416,6 +2437,16 @@ struct rtllib_device { ...@@ -2416,6 +2437,16 @@ struct rtllib_device {
struct work_struct wx_sync_scan_wq; struct work_struct wx_sync_scan_wq;
struct workqueue_struct *wq; struct workqueue_struct *wq;
union {
struct rtllib_rxb *RfdArray[REORDER_WIN_SIZE];
struct rtllib_rxb *stats_IndicateArray[REORDER_WIN_SIZE];
struct rtllib_rxb *prxbIndicateArray[REORDER_WIN_SIZE];
struct {
struct sw_chnl_cmd PreCommonCmd[MAX_PRECMD_CNT];
struct sw_chnl_cmd PostCommonCmd[MAX_POSTCMD_CNT];
struct sw_chnl_cmd RfDependCmd[MAX_RFDEPENDCMD_CNT];
};
};
/* Callback functions */ /* Callback functions */
void (*set_security)(struct net_device *dev, void (*set_security)(struct net_device *dev,
......
...@@ -520,7 +520,6 @@ void rtllib_indicate_packets(struct rtllib_device *ieee, struct rtllib_rxb **prx ...@@ -520,7 +520,6 @@ void rtllib_indicate_packets(struct rtllib_device *ieee, struct rtllib_rxb **prx
void rtllib_FlushRxTsPendingPkts(struct rtllib_device *ieee, struct rx_ts_record *pTS) void rtllib_FlushRxTsPendingPkts(struct rtllib_device *ieee, struct rx_ts_record *pTS)
{ {
struct rx_reorder_entry *pRxReorderEntry; struct rx_reorder_entry *pRxReorderEntry;
struct rtllib_rxb *RfdArray[REORDER_WIN_SIZE];
u8 RfdCnt = 0; u8 RfdCnt = 0;
del_timer_sync(&pTS->RxPktPendingTimer); del_timer_sync(&pTS->RxPktPendingTimer);
...@@ -534,12 +533,12 @@ void rtllib_FlushRxTsPendingPkts(struct rtllib_device *ieee, struct rx_ts_record ...@@ -534,12 +533,12 @@ void rtllib_FlushRxTsPendingPkts(struct rtllib_device *ieee, struct rx_ts_record
RTLLIB_DEBUG(RTLLIB_DL_REORDER, "%s(): Indicate SeqNum %d!\n", __func__, pRxReorderEntry->SeqNum); RTLLIB_DEBUG(RTLLIB_DL_REORDER, "%s(): Indicate SeqNum %d!\n", __func__, pRxReorderEntry->SeqNum);
list_del_init(&pRxReorderEntry->List); list_del_init(&pRxReorderEntry->List);
RfdArray[RfdCnt] = pRxReorderEntry->prxb; ieee->RfdArray[RfdCnt] = pRxReorderEntry->prxb;
RfdCnt = RfdCnt + 1; RfdCnt = RfdCnt + 1;
list_add_tail(&pRxReorderEntry->List, &ieee->RxReorder_Unused_List); list_add_tail(&pRxReorderEntry->List, &ieee->RxReorder_Unused_List);
} }
rtllib_indicate_packets(ieee, RfdArray, RfdCnt); rtllib_indicate_packets(ieee, ieee->RfdArray, RfdCnt);
pTS->RxIndicateSeq = 0xffff; pTS->RxIndicateSeq = 0xffff;
} }
...@@ -550,7 +549,6 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee, ...@@ -550,7 +549,6 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee,
{ {
struct rt_hi_throughput *pHTInfo = ieee->pHTInfo; struct rt_hi_throughput *pHTInfo = ieee->pHTInfo;
struct rx_reorder_entry *pReorderEntry = NULL; struct rx_reorder_entry *pReorderEntry = NULL;
struct rtllib_rxb *prxbIndicateArray[REORDER_WIN_SIZE];
u8 WinSize = pHTInfo->RxReorderWinSize; u8 WinSize = pHTInfo->RxReorderWinSize;
u16 WinEnd = 0; u16 WinEnd = 0;
u8 index = 0; u8 index = 0;
...@@ -617,7 +615,7 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee, ...@@ -617,7 +615,7 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee,
RTLLIB_DEBUG(RTLLIB_DL_REORDER, "Packets indication!! " RTLLIB_DEBUG(RTLLIB_DL_REORDER, "Packets indication!! "
"IndicateSeq: %d, NewSeq: %d\n", "IndicateSeq: %d, NewSeq: %d\n",
pTS->RxIndicateSeq, SeqNum); pTS->RxIndicateSeq, SeqNum);
prxbIndicateArray[0] = prxb; ieee->prxbIndicateArray[0] = prxb;
index = 1; index = 1;
} else { } else {
/* Current packet is going to be inserted into pending list.*/ /* Current packet is going to be inserted into pending list.*/
...@@ -693,7 +691,7 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee, ...@@ -693,7 +691,7 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee,
if (SN_EQUAL(pReorderEntry->SeqNum, pTS->RxIndicateSeq)) if (SN_EQUAL(pReorderEntry->SeqNum, pTS->RxIndicateSeq))
pTS->RxIndicateSeq = (pTS->RxIndicateSeq + 1) % 4096; pTS->RxIndicateSeq = (pTS->RxIndicateSeq + 1) % 4096;
prxbIndicateArray[index] = pReorderEntry->prxb; ieee->prxbIndicateArray[index] = pReorderEntry->prxb;
RTLLIB_DEBUG(RTLLIB_DL_REORDER, "%s(): Indicate SeqNum" RTLLIB_DEBUG(RTLLIB_DL_REORDER, "%s(): Indicate SeqNum"
" %d!\n", __func__, pReorderEntry->SeqNum); " %d!\n", __func__, pReorderEntry->SeqNum);
index++; index++;
...@@ -720,7 +718,7 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee, ...@@ -720,7 +718,7 @@ static void RxReorderIndicatePacket(struct rtllib_device *ieee,
flags); flags);
return; return;
} }
rtllib_indicate_packets(ieee, prxbIndicateArray, index); rtllib_indicate_packets(ieee, ieee->prxbIndicateArray, index);
bPktInBuf = false; bPktInBuf = false;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment