lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Mon, 30 Oct 2017 23:12:09 -0500
From:   "Gustavo A. R. Silva" <garsilva@...eddedor.com>
To:     Dmitry Tarnyagin <dmitry.tarnyagin@...kless.no>,
        "David S. Miller" <davem@...emloft.net>
Cc:     netdev@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] net: caif: chnl_net: remove unnecessary null check in
 chnl_recv_cb


Quoting "Gustavo A. R. Silva" <garsilva@...eddedor.com>:

> Quoting "Gustavo A. R. Silva" <garsilva@...eddedor.com>:
>
>> Hi,
>>
>> Quoting "Gustavo A. R. Silva" <garsilva@...eddedor.com>:
>>
>>> container_of is never null, so this null check is unnecessary.
>>>
>>> This code was detected with the help of Coccinelle.
>>>
>>> Signed-off-by: Gustavo A. R. Silva <garsilva@...eddedor.com>
>>> ---
>>> net/caif/chnl_net.c | 2 --
>>> 1 file changed, 2 deletions(-)
>>>
>>> diff --git a/net/caif/chnl_net.c b/net/caif/chnl_net.c
>>> index 922ac1d..489298d 100644
>>> --- a/net/caif/chnl_net.c
>>> +++ b/net/caif/chnl_net.c
>>> @@ -77,8 +77,6 @@ static int chnl_recv_cb(struct cflayer *layr,  
>>> struct cfpkt *pkt)
>>> 	u8 buf;
>>>
>>> 	priv = container_of(layr, struct chnl_net, chnl);
>>> -	if (!priv)
>>> -		return -EINVAL;

But the driver only passes in to container_of the type of driver  
structure registered with it. So this type of manipulation must be  
completely safe. Right?

Now it seems to me (again) that the patch is fine.

I'm sorry, I'm a little bit confused here.

>>>
>>> 	skb = (struct sk_buff *) cfpkt_tonative(pkt);
>>>
>>> --
>>> 2.7.4
>>
>> Please, ignore this patch.
>>
>> I just realized that function chnl_recv_cb is being called only  
>> during initialization:
>>
>> chnl_init_module() -> rtnl_link_register() -> ipcaif_net_setup() ->  
>> chnl_recv_cb():
>>
>
> Well, here ipcaif_net_setup stores a pointer to chnl_recv_cb in a  
> structure. It doesn't call it.
>
>> static void ipcaif_net_setup(struct net_device *dev)
>> {
>> [...]
>> 	priv = netdev_priv(dev);
>> 	priv->chnl.receive = chnl_recv_cb;
>>
>> [...]
>> }
>>
>> static struct rtnl_link_ops ipcaif_link_ops __read_mostly = {
>> 	.kind		= "caif",
>> 	.priv_size	= sizeof(struct chnl_net),
>> 	.setup		= ipcaif_net_setup,
>> 	.maxtype	= IFLA_CAIF_MAX,
>> 	.policy		= ipcaif_policy,
>> 	.newlink	= ipcaif_newlink,
>> 	.changelink	= ipcaif_changelink,
>> 	.get_size	= ipcaif_get_size,
>> 	.fill_info	= ipcaif_fill_info,
>>
>> };
>>
>> static int __init chnl_init_module(void)
>> {
>> 	return rtnl_link_register(&ipcaif_link_ops);
>> }
>>
>

--
Gustavo A. R. Silva






Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ