diff mbox

netlink: Fix kfree NULL pointer

Message ID AANLkTikp0m8cQYfEBHP_E8XpGZqdMj6Cr4M=aWCnei=X@mail.gmail.com
State Rejected, archived
Delegated to: David Miller
Headers show

Commit Message

jovi zhang Sept. 8, 2010, 5:13 a.m. UTC
It will kfree NULL pointer if listeners is NULL. fix it.

Signed-off-by: bookjovi@gmail.com
net/netlink/af_netlink.c |    5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)

       nlk->flags |= NETLINK_KERNEL_SOCKET;
@@ -1553,7 +1555,6 @@ netlink_kernel_create(struct net *net, int unit,
unsigned int groups,
       return sk;

out_sock_release:
-       kfree(listeners);
       netlink_kernel_release(sk);
       return NULL;
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

jovi zhang Sept. 8, 2010, 5:33 a.m. UTC | #1
On Wed, Sep 8, 2010 at 1:19 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> Le mercredi 08 septembre 2010 à 13:13 +0800, jovi zhang a écrit :
>> It will kfree NULL pointer if listeners is NULL. fix it.
>>
>> Signed-off-by: bookjovi@gmail.com
>> net/netlink/af_netlink.c |    5 +++--
>> 1 files changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
>> index 980fe4a..1c7bf48 100644
>> --- a/net/netlink/af_netlink.c
>> +++ b/net/netlink/af_netlink.c
>> @@ -1532,8 +1532,10 @@ netlink_kernel_create(struct net *net, int
>> unit, unsigned int groups,
>>        if (input)
>>                nlk_sk(sk)->netlink_rcv = input;
>>
>> -       if (netlink_insert(sk, net, 0))
>> +       if (netlink_insert(sk, net, 0)) {
>> +               kfree(listeners);
>>                goto out_sock_release;
>> +       }
>>
>>        nlk = nlk_sk(sk);
>>        nlk->flags |= NETLINK_KERNEL_SOCKET;
>> @@ -1553,7 +1555,6 @@ netlink_kernel_create(struct net *net, int unit,
>> unsigned int groups,
>>        return sk;
>>
>> out_sock_release:
>> -       kfree(listeners);
>>        netlink_kernel_release(sk);
>>        return NULL;
>
>
> This patch is not needed
>
> kfree(NULL) is legal
>
>
>
>

YES, maybe kfree(NULL) is legal, but I cannot see there have any need
to invoke kfree(NULL) in this function.
 Also I check kfree usage in other code, I havn't find any kfree(NULL) usage.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller Sept. 8, 2010, 5:53 a.m. UTC | #2
From: jovi zhang <bookjovi@gmail.com>
Date: Wed, 8 Sep 2010 13:33:28 +0800

>  Also I check kfree usage in other code, I havn't find any kfree(NULL) usage.

You aren't looking hard enough.

Please leave this code alone, it's functionally correct and fine.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Eric W. Biederman Sept. 8, 2010, 5:54 a.m. UTC | #3
jovi zhang <bookjovi@gmail.com> writes:

> On Wed, Sep 8, 2010 at 1:19 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
>>
>>
>> This patch is not needed
>>
>> kfree(NULL) is legal
>>
>>
>>
>>
>
> YES, maybe kfree(NULL) is legal, but I cannot see there have any need
> to invoke kfree(NULL) in this function.
>  Also I check kfree usage in other code, I havn't find any kfree(NULL)
> usage.

Usually kfree(NULL) is not explicit, but "var = NULL; kfree(var)" is
common in error handling paths to reduce the complexity of error
handling, making bugs less likely.


Eric

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Eric Dumazet Sept. 8, 2010, 5:55 a.m. UTC | #4
Le mercredi 08 septembre 2010 à 13:33 +0800, jovi zhang a écrit :

> YES, maybe kfree(NULL) is legal, but I cannot see there have any need
> to invoke kfree(NULL) in this function.
>  Also I check kfree usage in other code, I havn't find any kfree(NULL) usage.

We have hundred call sites doing kfree(NULL), if it makes code shorter.

Its usually code path handling exceptions (errors if you prefer), and we
prefer to use ugly gotos, and even kfree(NULL), to make it as short as
possible.



--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
jovi zhang Sept. 8, 2010, 6:14 a.m. UTC | #5
On Wed, Sep 8, 2010 at 1:55 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> Le mercredi 08 septembre 2010 à 13:33 +0800, jovi zhang a écrit :
>
>> YES, maybe kfree(NULL) is legal, but I cannot see there have any need
>> to invoke kfree(NULL) in this function.
>>  Also I check kfree usage in other code, I havn't find any kfree(NULL) usage.
>
> We have hundred call sites doing kfree(NULL), if it makes code shorter.
>
> Its usually code path handling exceptions (errors if you prefer), and we
> prefer to use ugly gotos, and even kfree(NULL), to make it as short as
> possible.

OK, I understand.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index 980fe4a..1c7bf48 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -1532,8 +1532,10 @@  netlink_kernel_create(struct net *net, int
unit, unsigned int groups,
       if (input)
               nlk_sk(sk)->netlink_rcv = input;

-       if (netlink_insert(sk, net, 0))
+       if (netlink_insert(sk, net, 0)) {
+               kfree(listeners);
               goto out_sock_release;
+       }

       nlk = nlk_sk(sk);