sd-device: verify new syspath on renaming

This commit is contained in:
Yu Watanabe
2022-04-18 04:34:14 +09:00
parent bd4297e761
commit ff58f2ae2a
+14 -6
View File
@@ -747,20 +747,28 @@ int device_new_from_watch_handle_at(sd_device **ret, int dirfd, int wd) {
}
int device_rename(sd_device *device, const char *name) {
_cleanup_free_ char *dirname = NULL;
const char *new_syspath, *interface;
_cleanup_free_ char *new_syspath = NULL;
const char *interface;
int r;
assert(device);
assert(name);
dirname = dirname_malloc(device->syspath);
if (!dirname)
if (!filename_is_valid(name))
return -EINVAL;
r = path_extract_directory(device->syspath, &new_syspath);
if (r < 0)
return r;
if (!path_extend(&new_syspath, name))
return -ENOMEM;
new_syspath = prefix_roota(dirname, name);
if (!path_is_safe(new_syspath))
return -EINVAL;
/* the user must trust that the new name is correct */
/* At the time this is called, the renamed device may not exist yet. Hence, we cannot validate
* the new syspath. */
r = device_set_syspath(device, new_syspath, false);
if (r < 0)
return r;