From b10b4303c6332e6432debb6664bc30ceddbe70f1 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Tue, 9 Dec 2025 22:22:55 +0900 Subject: [PATCH] udev-builtin-net_id: fix construction of USB specifier-based names Commit 0bac1ed242 ("tree-wide: Fix constness issues with newer glibc") split a temporary var in get_usb_specifier to const and non-const versions, but missed converting a couple of uses. This means we get names of with components of: port: uN config: cC.I interface: iC.I instead of: port: uN config: cC interface: iI This results in net names like enu1c1.0i1.0, as we also no longer hit the config==1 and interf==0 elision cases. Change the config portion handling to start from the correct position, and the earlier check for NULL. --- src/udev/udev-builtin-net_id.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c index 339c73ed3a8..974955b2ec2 100644 --- a/src/udev/udev-builtin-net_id.c +++ b/src/udev/udev-builtin-net_id.c @@ -969,14 +969,14 @@ static int get_usb_specifier(sd_device *dev, char **ret) { ports = strdupa_safe(s + 1); char *t = strchr(ports, ':'); - if (!s) + if (!t) return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EINVAL), "sysname \"%s\" does not have ':' in the expected place.", sysname); *t = '\0'; config = t + 1; - s = strchr(config, '.'); - if (!s) + t = strchr(config, '.'); + if (!t) return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EINVAL), "sysname \"%s\" does not have '.' in the expected place.", sysname); -- 2.47.3