]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-device: refuse O_DIRECTORY returned from path_extract_filename()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 19 Apr 2022 16:43:11 +0000 (01:43 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 19 Apr 2022 16:43:27 +0000 (01:43 +0900)
In both cases, it is expected that the symlink targets do not end with '/'.

Addresses https://github.com/systemd/systemd/pull/23089#discussion_r853007218.

src/libsystemd/sd-device/sd-device.c

index 0c5b2a67e33447e759b756430d77d824fdcac743..bf9c753db5efc05b9ef9c10cf43b315a517999e9 100644 (file)
@@ -1181,6 +1181,8 @@ static int device_set_sysname_and_sysnum(sd_device *device) {
         r = path_extract_filename(device->devpath, &sysname);
         if (r < 0)
                 return r;
+        if (r == O_DIRECTORY)
+                return -EINVAL;
 
         /* some devices have '!' in their name, change that to '/' */
         for (p = strchrnul(sysname, '!'); *p != '\0'; p = strchrnul(p, '!'))
@@ -1457,6 +1459,8 @@ int device_get_device_id(sd_device *device, const char **ret) {
                         r = path_extract_filename(device->devpath, &sysname);
                         if (r < 0)
                                 return r;
+                        if (r == O_DIRECTORY)
+                                return -EINVAL;
 
                         if (streq(subsystem, "drivers")) {
                                 /* the 'drivers' pseudo-subsystem is special, and needs the real