From: Yu Watanabe Date: Tue, 19 Apr 2022 16:43:11 +0000 (+0900) Subject: sd-device: refuse O_DIRECTORY returned from path_extract_filename() X-Git-Tag: v251-rc2~95^2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e4e1353c251e253b7cdf48db41b27572b6ed9172;p=thirdparty%2Fsystemd.git sd-device: refuse O_DIRECTORY returned from path_extract_filename() In both cases, it is expected that the symlink targets do not end with '/'. Addresses https://github.com/systemd/systemd/pull/23089#discussion_r853007218. --- diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c index 0c5b2a67e33..bf9c753db5e 100644 --- a/src/libsystemd/sd-device/sd-device.c +++ b/src/libsystemd/sd-device/sd-device.c @@ -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