diff mbox series

net: Initialize return value in gro_cells_receive

Message ID e595fd44-cf8a-ce14-8cc8-e3ecd4e8922a@gmail.com (mailing list archive)
State Not Applicable
Headers show
Series net: Initialize return value in gro_cells_receive | expand

Commit Message

Gregory Rose Oct. 6, 2020, 6:53 p.m. UTC
The 'res' return value is uninitalized and may be returned with
some random value.  Initialize to NET_RX_DROP as the default
return value.

Signed-off-by: Greg Rose <gvrose8192@gmail.com>

         if (unlikely(!(dev->flags & IFF_UP)))

Comments

Eric Dumazet Oct. 7, 2020, 8:21 a.m. UTC | #1
On 10/6/20 8:53 PM, Gregory Rose wrote:
> The 'res' return value is uninitalized and may be returned with
> some random value.  Initialize to NET_RX_DROP as the default
> return value.
> 
> Signed-off-by: Greg Rose <gvrose8192@gmail.com>
> 
> diff --git a/net/core/gro_cells.c b/net/core/gro_cells.c
> index e095fb871d91..4e835960db07 100644
> --- a/net/core/gro_cells.c
> +++ b/net/core/gro_cells.c
> @@ -13,7 +13,7 @@ int gro_cells_receive(struct gro_cells *gcells, struct sk_buff *skb)
>  {
>         struct net_device *dev = skb->dev;
>         struct gro_cell *cell;
> -       int res;
> +       int res = NET_RX_DROP;
> 
>         rcu_read_lock();
>         if (unlikely(!(dev->flags & IFF_UP)))

I do not think this is needed.

Also, when/if sending a patch fixing a bug, we require a Fixes: tag.

Thanks.
Gregory Rose Oct. 7, 2020, 3:50 p.m. UTC | #2
On 10/7/2020 1:21 AM, Eric Dumazet wrote:
> 
> 
> On 10/6/20 8:53 PM, Gregory Rose wrote:
>> The 'res' return value is uninitalized and may be returned with
>> some random value.  Initialize to NET_RX_DROP as the default
>> return value.
>>
>> Signed-off-by: Greg Rose <gvrose8192@gmail.com>
>>
>> diff --git a/net/core/gro_cells.c b/net/core/gro_cells.c
>> index e095fb871d91..4e835960db07 100644
>> --- a/net/core/gro_cells.c
>> +++ b/net/core/gro_cells.c
>> @@ -13,7 +13,7 @@ int gro_cells_receive(struct gro_cells *gcells, struct sk_buff *skb)
>>   {
>>          struct net_device *dev = skb->dev;
>>          struct gro_cell *cell;
>> -       int res;
>> +       int res = NET_RX_DROP;
>>
>>          rcu_read_lock();
>>          if (unlikely(!(dev->flags & IFF_UP)))
> 
> I do not think this is needed.
> 
> Also, when/if sending a patch fixing a bug, we require a Fixes: tag.
> 
> Thanks.
> 
If it's not needed then feel free to ignore it.  It just looked like
the unlikely case returns without setting the return value.

Thanks

- Greg

Thanks,
Eric Dumazet Oct. 7, 2020, 4:37 p.m. UTC | #3
On 10/7/20 5:50 PM, Gregory Rose wrote:
> 
> 
> On 10/7/2020 1:21 AM, Eric Dumazet wrote:
>>
>>
>> On 10/6/20 8:53 PM, Gregory Rose wrote:
>>> The 'res' return value is uninitalized and may be returned with
>>> some random value.  Initialize to NET_RX_DROP as the default
>>> return value.
>>>
>>> Signed-off-by: Greg Rose <gvrose8192@gmail.com>
>>>
>>> diff --git a/net/core/gro_cells.c b/net/core/gro_cells.c
>>> index e095fb871d91..4e835960db07 100644
>>> --- a/net/core/gro_cells.c
>>> +++ b/net/core/gro_cells.c
>>> @@ -13,7 +13,7 @@ int gro_cells_receive(struct gro_cells *gcells, struct sk_buff *skb)
>>>   {
>>>          struct net_device *dev = skb->dev;
>>>          struct gro_cell *cell;
>>> -       int res;
>>> +       int res = NET_RX_DROP;
>>>
>>>          rcu_read_lock();
>>>          if (unlikely(!(dev->flags & IFF_UP)))
>>
>> I do not think this is needed.
>>
>> Also, when/if sending a patch fixing a bug, we require a Fixes: tag.
>>
>> Thanks.
>>
> If it's not needed then feel free to ignore it.  It just looked like
> the unlikely case returns without setting the return value.

Can you elaborate ? I do not see this problem in current upstream code.

If a compiler gave you a warning, please give its version, thanks.
Gregory Rose Oct. 7, 2020, 6:39 p.m. UTC | #4
On 10/7/2020 9:37 AM, Eric Dumazet wrote:
> 
> 
> On 10/7/20 5:50 PM, Gregory Rose wrote:
>>
>>
>> On 10/7/2020 1:21 AM, Eric Dumazet wrote:
>>>
>>>
>>> On 10/6/20 8:53 PM, Gregory Rose wrote:
>>>> The 'res' return value is uninitalized and may be returned with
>>>> some random value.  Initialize to NET_RX_DROP as the default
>>>> return value.
>>>>
>>>> Signed-off-by: Greg Rose <gvrose8192@gmail.com>
>>>>
>>>> diff --git a/net/core/gro_cells.c b/net/core/gro_cells.c
>>>> index e095fb871d91..4e835960db07 100644
>>>> --- a/net/core/gro_cells.c
>>>> +++ b/net/core/gro_cells.c
>>>> @@ -13,7 +13,7 @@ int gro_cells_receive(struct gro_cells *gcells, struct sk_buff *skb)
>>>>    {
>>>>           struct net_device *dev = skb->dev;
>>>>           struct gro_cell *cell;
>>>> -       int res;
>>>> +       int res = NET_RX_DROP;
>>>>
>>>>           rcu_read_lock();
>>>>           if (unlikely(!(dev->flags & IFF_UP)))
>>>
>>> I do not think this is needed.
>>>
>>> Also, when/if sending a patch fixing a bug, we require a Fixes: tag.
>>>
>>> Thanks.
>>>
>> If it's not needed then feel free to ignore it.  It just looked like
>> the unlikely case returns without setting the return value.
> 
> Can you elaborate ? I do not see this problem in current upstream code.
> 
> If a compiler gave you a warning, please give its version, thanks.
> 

No, it's my misreading of the code - it jumps to the drop that is in the
middle of an if statement, sets res to NET_RX_DROP there and then jumps 
to the unlock label.

My apologies.

- Greg
diff mbox series

Patch

diff --git a/net/core/gro_cells.c b/net/core/gro_cells.c
index e095fb871d91..4e835960db07 100644
--- a/net/core/gro_cells.c
+++ b/net/core/gro_cells.c
@@ -13,7 +13,7 @@  int gro_cells_receive(struct gro_cells *gcells, struct 
sk_buff *skb)
  {
         struct net_device *dev = skb->dev;
         struct gro_cell *cell;
-       int res;
+       int res = NET_RX_DROP;

         rcu_read_lock();