2014-06-16 18:31:02

by Nicholas Krause

[permalink] [raw]
Subject: [PATCH] infinibad: fix memory leak in function send_flowc

Signed-off-by: Nicholas Krause <[email protected]>
---
drivers/infiniband/hw/cxgb4/cm.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
index 5e153f6..c518411 100644
--- a/drivers/infiniband/hw/cxgb4/cm.c
+++ b/drivers/infiniband/hw/cxgb4/cm.c
@@ -455,7 +455,10 @@ static void send_flowc(struct c4iw_ep *ep, struct sk_buff *skb)
unsigned int flowclen = 80;
struct fw_flowc_wr *flowc;
int i;

+ if (!skb) {
+ kfree_skb();
+ pr_warn(MOD "%s failed to allocate skb.\n", __func__);
+ }
skb = get_skb(skb, flowclen, GFP_KERNEL);
flowc = (struct fw_flowc_wr *)__skb_put(skb, flowclen);

--
1.9.1


2014-06-16 18:34:32

by Steve Wise

[permalink] [raw]
Subject: Re: [PATCH] infinibad: fix memory leak in function send_flowc

On 6/16/2014 1:30 PM, Nicholas Krause wrote:
> Signed-off-by: Nicholas Krause <[email protected]>
> ---
> drivers/infiniband/hw/cxgb4/cm.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
> index 5e153f6..c518411 100644
> --- a/drivers/infiniband/hw/cxgb4/cm.c
> +++ b/drivers/infiniband/hw/cxgb4/cm.c
> @@ -455,7 +455,10 @@ static void send_flowc(struct c4iw_ep *ep, struct sk_buff *skb)
> unsigned int flowclen = 80;
> struct fw_flowc_wr *flowc;
> int i;
>
> + if (!skb) {
> + kfree_skb();
> + pr_warn(MOD "%s failed to allocate skb.\n", __func__);
> + }
> skb = get_skb(skb, flowclen, GFP_KERNEL);

Oops, shouldn't the if statement be after the call to get_skb()? :)
(you're having a bad day ;))

> flowc = (struct fw_flowc_wr *)__skb_put(skb, flowclen);
>

One more nit: The comment is no longer correct. It should be something
like:

iw_cxgb4: in send_flowc(), handle a null skb return from get_skb()

2014-06-16 18:46:36

by Steve Wise

[permalink] [raw]
Subject: Re: [PATCH] infinibad: fix memory leak in function send_flowc

On 6/16/2014 1:34 PM, Steve Wise wrote:
> On 6/16/2014 1:30 PM, Nicholas Krause wrote:
>> Signed-off-by: Nicholas Krause <[email protected]>
>> ---
>> drivers/infiniband/hw/cxgb4/cm.c | 5 ++++-
>> 1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/infiniband/hw/cxgb4/cm.c
>> b/drivers/infiniband/hw/cxgb4/cm.c
>> index 5e153f6..c518411 100644
>> --- a/drivers/infiniband/hw/cxgb4/cm.c
>> +++ b/drivers/infiniband/hw/cxgb4/cm.c
>> @@ -455,7 +455,10 @@ static void send_flowc(struct c4iw_ep *ep,
>> struct sk_buff *skb)
>> unsigned int flowclen = 80;
>> struct fw_flowc_wr *flowc;
>> int i;
>>
>> + if (!skb) {
>> + kfree_skb();
>> + pr_warn(MOD "%s failed to allocate skb.\n", __func__);
>> + }
>> skb = get_skb(skb, flowclen, GFP_KERNEL);
>
> Oops, shouldn't the if statement be after the call to get_skb()? :)
> (you're having a bad day ;))
>

And you don't free anything. If get_skb() returns NULL, then log the
warning and return.


>> flowc = (struct fw_flowc_wr *)__skb_put(skb, flowclen);
>
> One more nit: The comment is no longer correct. It should be
> something like:
>
> iw_cxgb4: in send_flowc(), handle a null skb return from get_skb()
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe
> linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/