2015-12-16 22:14:55

by Okash Khawaja

[permalink] [raw]
Subject: [PATCH] staging: rtl8192u: fix large frame size compiler warning

Compiling drivers/staging/rtl8192u/ gives following compiler warning:

drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c: In function
‘RxReorderIndicatePacket’:
drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c:758:1: warning: the
frame size of 1064 bytes is larger than 1024 bytes
[-Wframe-larger-than=]

This patch fixes it by replacing the statically allocated array
`prxbIndicateArray` with kmalloc'd one.

Signed-off-by: Okash Khawaja <[email protected]>
---
drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
index 130c852..d89e99a 100644
--- a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
+++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
@@ -594,12 +594,22 @@ static void RxReorderIndicatePacket(struct ieee80211_device *ieee,
{
PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo;
PRX_REORDER_ENTRY pReorderEntry = NULL;
- struct ieee80211_rxb *prxbIndicateArray[REORDER_WIN_SIZE];
+ struct ieee80211_rxb **prxbIndicateArray;
u8 WinSize = pHTInfo->RxReorderWinSize;
u16 WinEnd = (pTS->RxIndicateSeq + WinSize -1)%4096;
u8 index = 0;
bool bMatchWinStart = false, bPktInBuf = false;
IEEE80211_DEBUG(IEEE80211_DL_REORDER,"%s(): Seq is %d,pTS->RxIndicateSeq is %d, WinSize is %d\n",__func__,SeqNum,pTS->RxIndicateSeq,WinSize);
+
+ prxbIndicateArray = kmalloc(sizeof(struct ieee80211_rxb *) *
+ REORDER_WIN_SIZE, GFP_KERNEL);
+ if (!prxbIndicateArray) {
+ IEEE80211_DEBUG(IEEE80211_DL_ERR,
+ "%s(): kmalloc prxbIndicateArray error\n",
+ __func__);
+ return;
+ }
+
/* Rx Reorder initialize condition.*/
if (pTS->RxIndicateSeq == 0xffff) {
pTS->RxIndicateSeq = SeqNum;
--
2.5.2


2015-12-16 22:22:00

by Okash Khawaja

[permalink] [raw]
Subject: Re: [PATCH] staging: rtl8192u: fix large frame size compiler warning

On Wed, Dec 16, 2015 at 08:55:45PM +0000, Okash Khawaja wrote:
> Compiling drivers/staging/rtl8192u/ gives following compiler warning:
>
> drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c: In function
> ‘RxReorderIndicatePacket’:
> drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c:758:1: warning: the
> frame size of 1064 bytes is larger than 1024 bytes
> [-Wframe-larger-than=]
>
> This patch fixes it by replacing the statically allocated array
> `prxbIndicateArray` with kmalloc'd one.
>
> Signed-off-by: Okash Khawaja <[email protected]>
> ---
> drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c | 12 +++++++++++-
> 1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
> index 130c852..d89e99a 100644
> --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
> +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
> @@ -594,12 +594,22 @@ static void RxReorderIndicatePacket(struct ieee80211_device *ieee,
> {
> PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo;
> PRX_REORDER_ENTRY pReorderEntry = NULL;
> - struct ieee80211_rxb *prxbIndicateArray[REORDER_WIN_SIZE];
> + struct ieee80211_rxb **prxbIndicateArray;
> u8 WinSize = pHTInfo->RxReorderWinSize;
> u16 WinEnd = (pTS->RxIndicateSeq + WinSize -1)%4096;
> u8 index = 0;
> bool bMatchWinStart = false, bPktInBuf = false;
> IEEE80211_DEBUG(IEEE80211_DL_REORDER,"%s(): Seq is %d,pTS->RxIndicateSeq is %d, WinSize is %d\n",__func__,SeqNum,pTS->RxIndicateSeq,WinSize);
> +
> + prxbIndicateArray = kmalloc(sizeof(struct ieee80211_rxb *) *
> + REORDER_WIN_SIZE, GFP_KERNEL);
> + if (!prxbIndicateArray) {
> + IEEE80211_DEBUG(IEEE80211_DL_ERR,
> + "%s(): kmalloc prxbIndicateArray error\n",
> + __func__);
> + return;
> + }
> +
> /* Rx Reorder initialize condition.*/
> if (pTS->RxIndicateSeq == 0xffff) {
> pTS->RxIndicateSeq = SeqNum;
> --
> 2.5.2
>

This doesn't free the kmalloc'd array. Please ignore this. I'll send
another version of this patch.

Thanks

2015-12-16 22:34:42

by Okash Khawaja

[permalink] [raw]
Subject: [PATCH] staging: rtl8192u: fix large frame size compiler warning

This patch fixes following compiler warning:

drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c: In function
‘RxReorderIndicatePacket’:
drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c:758:1: warning: the
frame size of 1064 bytes is larger than 1024 bytes
[-Wframe-larger-than=]

It replaces the statically allocated array prxbIndicateArray with
a kmalloc'd one.

Signed-off-by: Okash Khawaja <[email protected]>
---
drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
index 130c852..77eed52 100644
--- a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
+++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
@@ -594,12 +594,22 @@ static void RxReorderIndicatePacket(struct ieee80211_device *ieee,
{
PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo;
PRX_REORDER_ENTRY pReorderEntry = NULL;
- struct ieee80211_rxb *prxbIndicateArray[REORDER_WIN_SIZE];
+ struct ieee80211_rxb **prxbIndicateArray;
u8 WinSize = pHTInfo->RxReorderWinSize;
u16 WinEnd = (pTS->RxIndicateSeq + WinSize -1)%4096;
u8 index = 0;
bool bMatchWinStart = false, bPktInBuf = false;
IEEE80211_DEBUG(IEEE80211_DL_REORDER,"%s(): Seq is %d,pTS->RxIndicateSeq is %d, WinSize is %d\n",__func__,SeqNum,pTS->RxIndicateSeq,WinSize);
+
+ prxbIndicateArray = kmalloc(sizeof(struct ieee80211_rxb *) *
+ REORDER_WIN_SIZE, GFP_KERNEL);
+ if (!prxbIndicateArray) {
+ IEEE80211_DEBUG(IEEE80211_DL_ERR,
+ "%s(): kmalloc prxbIndicateArray error\n",
+ __func__);
+ return;
+ }
+
/* Rx Reorder initialize condition.*/
if (pTS->RxIndicateSeq == 0xffff) {
pTS->RxIndicateSeq = SeqNum;
@@ -618,6 +628,8 @@ static void RxReorderIndicatePacket(struct ieee80211_device *ieee,
kfree(prxb);
prxb = NULL;
}
+
+ kfree(prxbIndicateArray);
return;
}

@@ -741,6 +753,7 @@ static void RxReorderIndicatePacket(struct ieee80211_device *ieee,
// Indicate packets
if(index>REORDER_WIN_SIZE){
IEEE80211_DEBUG(IEEE80211_DL_ERR, "RxReorderIndicatePacket(): Rx Reorer buffer full!! \n");
+ kfree(prxbIndicateArray);
return;
}
ieee80211_indicate_packets(ieee, prxbIndicateArray, index);
--
2.5.2

2015-12-17 11:04:45

by Dan Carpenter

[permalink] [raw]
Subject: Re: [PATCH] staging: rtl8192u: fix large frame size compiler warning

Put a v3 in the subject.

There are still paths where this is not freed, so we need a v4. Take
your time, there is no rush.

> drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
> index 130c852..77eed52 100644
> --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
> +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
> @@ -594,12 +594,22 @@ static void RxReorderIndicatePacket(struct ieee80211_device *ieee,
> {
> PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo;
> PRX_REORDER_ENTRY pReorderEntry = NULL;
> - struct ieee80211_rxb *prxbIndicateArray[REORDER_WIN_SIZE];
> + struct ieee80211_rxb **prxbIndicateArray;
> u8 WinSize = pHTInfo->RxReorderWinSize;
> u16 WinEnd = (pTS->RxIndicateSeq + WinSize -1)%4096;
> u8 index = 0;
> bool bMatchWinStart = false, bPktInBuf = false;
> IEEE80211_DEBUG(IEEE80211_DL_REORDER,"%s(): Seq is %d,pTS->RxIndicateSeq is %d, WinSize is %d\n",__func__,SeqNum,pTS->RxIndicateSeq,WinSize);
> +
> + prxbIndicateArray = kmalloc(sizeof(struct ieee80211_rxb *) *
> + REORDER_WIN_SIZE, GFP_KERNEL);
> + if (!prxbIndicateArray) {
> + IEEE80211_DEBUG(IEEE80211_DL_ERR,
> + "%s(): kmalloc prxbIndicateArray error\n",
> + __func__);

Don't print an error if kmalloc() fails. kmalloc has its own message.

> + return;
> + }

regards,
dan carpenter

2015-12-17 20:30:45

by Okash Khawaja

[permalink] [raw]
Subject: [PATCH v4] staging: rtl8192u: fix large frame size compiler warning

This patch fixes following compiler warning:

drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c: In function
‘RxReorderIndicatePacket’:
drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c:758:1: warning: the
frame size of 1064 bytes is larger than 1024 bytes
[-Wframe-larger-than=]

It replaces the statically allocated array prxbIndicateArray with
a kmalloc'd one.

Signed-off-by: Okash Khawaja <[email protected]>
---
drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
index 130c852..28ad63a 100644
--- a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
+++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
@@ -594,12 +594,18 @@ static void RxReorderIndicatePacket(struct ieee80211_device *ieee,
{
PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo;
PRX_REORDER_ENTRY pReorderEntry = NULL;
- struct ieee80211_rxb *prxbIndicateArray[REORDER_WIN_SIZE];
+ struct ieee80211_rxb **prxbIndicateArray;
u8 WinSize = pHTInfo->RxReorderWinSize;
u16 WinEnd = (pTS->RxIndicateSeq + WinSize -1)%4096;
u8 index = 0;
bool bMatchWinStart = false, bPktInBuf = false;
IEEE80211_DEBUG(IEEE80211_DL_REORDER,"%s(): Seq is %d,pTS->RxIndicateSeq is %d, WinSize is %d\n",__func__,SeqNum,pTS->RxIndicateSeq,WinSize);
+
+ prxbIndicateArray = kmalloc(sizeof(struct ieee80211_rxb *) *
+ REORDER_WIN_SIZE, GFP_KERNEL);
+ if (!prxbIndicateArray)
+ return;
+
/* Rx Reorder initialize condition.*/
if (pTS->RxIndicateSeq == 0xffff) {
pTS->RxIndicateSeq = SeqNum;
@@ -618,6 +624,8 @@ static void RxReorderIndicatePacket(struct ieee80211_device *ieee,
kfree(prxb);
prxb = NULL;
}
+
+ kfree(prxbIndicateArray);
return;
}

@@ -741,6 +749,7 @@ static void RxReorderIndicatePacket(struct ieee80211_device *ieee,
// Indicate packets
if(index>REORDER_WIN_SIZE){
IEEE80211_DEBUG(IEEE80211_DL_ERR, "RxReorderIndicatePacket(): Rx Reorer buffer full!! \n");
+ kfree(prxbIndicateArray);
return;
}
ieee80211_indicate_packets(ieee, prxbIndicateArray, index);
@@ -755,6 +764,8 @@ static void RxReorderIndicatePacket(struct ieee80211_device *ieee,
pTS->RxPktPendingTimer.expires = jiffies + MSECS(pHTInfo->RxReorderPendingTime);
add_timer(&pTS->RxPktPendingTimer);
}
+
+ kfree(prxbIndicateArray);
}

static u8 parse_subframe(struct sk_buff *skb,
--
2.5.2

2015-12-22 12:45:58

by Okash Khawaja

[permalink] [raw]
Subject: Re: [PATCH v4] staging: rtl8192u: fix large frame size compiler warning

On Thu, Dec 17, 2015 at 08:30:38PM +0000, Okash Khawaja wrote:
> This patch fixes following compiler warning:
>
> drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c: In function
> ‘RxReorderIndicatePacket’:
> drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c:758:1: warning: the
> frame size of 1064 bytes is larger than 1024 bytes
> [-Wframe-larger-than=]
>
> It replaces the statically allocated array prxbIndicateArray with
> a kmalloc'd one.
>
> Signed-off-by: Okash Khawaja <[email protected]>
> ---
> drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c | 13 ++++++++++++-
> 1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
> index 130c852..28ad63a 100644
> --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
> +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
> @@ -594,12 +594,18 @@ static void RxReorderIndicatePacket(struct ieee80211_device *ieee,
> {
> PRT_HIGH_THROUGHPUT pHTInfo = ieee->pHTInfo;
> PRX_REORDER_ENTRY pReorderEntry = NULL;
> - struct ieee80211_rxb *prxbIndicateArray[REORDER_WIN_SIZE];
> + struct ieee80211_rxb **prxbIndicateArray;
> u8 WinSize = pHTInfo->RxReorderWinSize;
> u16 WinEnd = (pTS->RxIndicateSeq + WinSize -1)%4096;
> u8 index = 0;
> bool bMatchWinStart = false, bPktInBuf = false;
> IEEE80211_DEBUG(IEEE80211_DL_REORDER,"%s(): Seq is %d,pTS->RxIndicateSeq is %d, WinSize is %d\n",__func__,SeqNum,pTS->RxIndicateSeq,WinSize);
> +
> + prxbIndicateArray = kmalloc(sizeof(struct ieee80211_rxb *) *
> + REORDER_WIN_SIZE, GFP_KERNEL);
> + if (!prxbIndicateArray)
> + return;
> +
> /* Rx Reorder initialize condition.*/
> if (pTS->RxIndicateSeq == 0xffff) {
> pTS->RxIndicateSeq = SeqNum;
> @@ -618,6 +624,8 @@ static void RxReorderIndicatePacket(struct ieee80211_device *ieee,
> kfree(prxb);
> prxb = NULL;
> }
> +
> + kfree(prxbIndicateArray);
> return;
> }
>
> @@ -741,6 +749,7 @@ static void RxReorderIndicatePacket(struct ieee80211_device *ieee,
> // Indicate packets
> if(index>REORDER_WIN_SIZE){
> IEEE80211_DEBUG(IEEE80211_DL_ERR, "RxReorderIndicatePacket(): Rx Reorer buffer full!! \n");
> + kfree(prxbIndicateArray);
> return;
> }
> ieee80211_indicate_packets(ieee, prxbIndicateArray, index);
> @@ -755,6 +764,8 @@ static void RxReorderIndicatePacket(struct ieee80211_device *ieee,
> pTS->RxPktPendingTimer.expires = jiffies + MSECS(pHTInfo->RxReorderPendingTime);
> add_timer(&pTS->RxPktPendingTimer);
> }
> +
> + kfree(prxbIndicateArray);
> }
>
> static u8 parse_subframe(struct sk_buff *skb,
> --
> 2.5.2
>
Hi,

Has a return path been missed out now?

Thanks,
Okash

2015-12-22 13:24:47

by Dan Carpenter

[permalink] [raw]
Subject: Re: [PATCH v4] staging: rtl8192u: fix large frame size compiler warning

Looks ok.

Greg is working through his inbox. It will take a little while for him
to get to your patch. Be patient.

regards,
dan carpenter