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 <[email protected]> ---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 [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
_______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
