From: Yu Watanabe Date: Tue, 27 May 2025 14:17:40 +0000 (+0900) Subject: network/link: ENODATA from reading IFLA_MASTER when an interface has no master X-Git-Tag: v256.17~55 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c584dfb2051207af017ea1437b3d255023c902f5;p=thirdparty%2Fsystemd.git network/link: ENODATA from reading IFLA_MASTER when an interface has no master When an interface leaved from the master interface, then reading IFLA_MASTER attribute causes ENODATA. When the interface was previously enslaved to another interface, we need to remove reference to the interface from the previous master interface. This is especially important when ``` ip link set dev eth0 nomaster ``` is called. Fixes a bug introduced by 0d411b7f8f5407e9ce84dcb4ede0b029ade7fede (v249). Fixes #37629. (cherry picked from commit f44b20b7b6c6b0a089a3ec2392ac85e4772e0357) (cherry picked from commit 2ad46c06069ad4241c94124dd5a3a73da7828048) --- diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 8f21504d92c..85bce825604 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -2173,8 +2173,8 @@ static int link_update_master(Link *link, sd_netlink_message *message) { r = sd_netlink_message_read_u32(message, IFLA_MASTER, (uint32_t*) &master_ifindex); if (r == -ENODATA) - return 0; - if (r < 0) + master_ifindex = 0; /* no master interface */ + else if (r < 0) return log_link_debug_errno(link, r, "rtnl: failed to read master ifindex: %m"); if (master_ifindex == link->ifindex)