From: Jeremy Kerr Date: Tue, 9 Dec 2025 13:22:55 +0000 (+0900) Subject: udev-builtin-net_id: fix construction of USB specifier-based names X-Git-Tag: v257.12~47 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cc04a7f6a628379ef524b8f790f84d6080eb1f63;p=thirdparty%2Fsystemd.git 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. (cherry picked from commit b10b4303c6332e6432debb6664bc30ceddbe70f1) (cherry picked from commit 8612c4c5e57b87b09fc69b8e0b6a2ea099a4c0f6) --- diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c index 26ddc101cbe..c72c87a38ca 100644 --- a/src/udev/udev-builtin-net_id.c +++ b/src/udev/udev-builtin-net_id.c @@ -976,14 +976,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);