[ovs-dev] [PATCH] dpif-netlink: "bonding_masters" is a reserved name

Gregory Rose gvrose8192 at gmail.com
Thu Jun 24 17:29:30 UTC 2021



On 6/23/2021 6:35 AM, Ilya Maximets wrote:
> On 6/23/21 2:12 PM, Timothy Redaelli wrote:
>> Currently, on Linux, if you try to create a system datapath called
>> "bonding_masters", when you have bonding module loaded, you have a
>> kernel trace
>> ("sysfs: cannot create duplicate filename '/class/net/bonding_masters'").
>>
>> This trace appears since "bonding" kernel modules creates a file called
>> "/sys/class/net/bonding_masters", that prevents any network interface to
>> be called "bonding_masters".
>>
>> This commits forbid an user to create a system datapath (that is a network
>> interface) called "bonding_masters" to avoid the kernel trace and to
>> avoid that bonding module can't work if it's loaded after
>> "bonding_masters" interface is created.
>>
>> Reported-at: https://bugzilla.redhat.com/1974303
>> Signed-off-by: Timothy Redaelli <tredaelli at redhat.com>
>> ---
> 
> Hi, Timothy.  Looking at BZ linked above, I tend to agree that it's a
> kernel's bug and working around it in every userspace program that is able
> to create a network interface doesn't make much sense to me.  I think,
> kernel should just reject attempts to create network interfaces with this
> kind of names.
> 
> I can create this kind of interface with just an ip command, OVS can create
> this kind of interface, any DPDK application is able to create tap interface
> with this name, QEMU, and so on.
> 
> Simple 'ip tuntap add mode tap bonding_masters && modprobe bonding' gives
> the same call trace in a kernel.
> 
> Also, the change below will only reject creation of bridges with such name,
> but will not prevent creation of regular ports (e.g. tap interfaces) and
> having this check in 3-5 places in the code doesn't look right to me.

The proper fix is certainly in the kernel - but what the kernel should
do and what it does do are different.  I respectively disagree and think
OVS should do what it can to avoid user confusion.

There could be some documentation for the situation as well.

- Greg

> 
>>   lib/dpif-netlink.c | 8 ++++++++
>>   1 file changed, 8 insertions(+)
>>
>> diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c
>> index 73d5608a8..ada1d8479 100644
>> --- a/lib/dpif-netlink.c
>> +++ b/lib/dpif-netlink.c
>> @@ -330,6 +330,14 @@ dpif_netlink_open(const struct dpif_class *class OVS_UNUSED, const char *name,
>>       uint32_t upcall_pid;
>>       int error;
>>   
>> +    /* "bonding_masters" is a reserved interface name under Linux,
>> +     * since bonding module creates /sys/class/net/bonding_masters
>> +     * and so no interface can be called "bonding_masters".
>> +     */
>> +    if (!strcmp(name, "bonding_masters")) {
>> +        return EINVAL;
>> +    }
>> +
>>       error = dpif_netlink_init();
>>       if (error) {
>>           return error;
>>
> 
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> 


More information about the dev mailing list