Subject: Re: [Bugme-new] [Bug 13954] New: Oops in rtnetlink code when creating can device

From: Oliver Hartkopp <[email-masked]>
Date: Tue, 11 Aug 2009 11:26:59 +0200

Patrick McHardy wrote:
> Oliver Hartkopp wrote:
>   
>>>> I've got a nice oops when looking around new CAN code in kernel.
>>>>
>>>> root@qemux86:~# ip link add type can
>>>> [  713.113325] BUG: unable to handle kernel NULL pointer dereference
>>>> at (null)
>>>> [  713.114216] IP: [<c13eecab>] register_netdevice+0xab/0x420
>>>> ...
>>>>         
>> The problem is, that
>>
>> ip link add type can
>>
>> is not possible as you can not create 'real' CAN devices like can0,
>> can1, ...
>>
>> To create 'software CAN devices' like vcan0, vcan1, vcan2, ... we use
>>
>> ip link add type vcan
>>
>> see drivers/net/can/vcan.c
>>
>> ---
>>
>> For real hardware CAN devices the netlink interface is only used for the
>> configuration of already existing interfaces.
>> From a quick view on the rtnl_newlink() function in net/core/rtnetlink.c
>> i was not able to find any method to disallow the creation of 
>> interfaces, will say: How can a netlink user provide the information,
>> that he's not able to create new devices via netlink???
>>
>> @Patrick: Do you have an idea for this? Is it a new use-case for netlink
>> that needs to be implemented?
>>     
>
> You could add a ->newlink() function that unconditionally returns
> an error.
>
>   

Yes, that fixed it.

I created a can_newlink() function just returning -EINVAL ...

I'll cook a patch and send it on netdev (when it gets online again).

Thanks (to all),
Oliver