diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2023-05-10 08:47:44 +0200 |
---|---|---|
committer | Mike Yuan <me@yhndnzj.com> | 2023-05-10 13:42:49 +0200 |
commit | 39a39f18f2bd2b1ef7b4fa4823472d129c514030 (patch) | |
tree | 12cc0de914f898aabf569876d8ba42692a7e8924 | |
parent | dirent: conditionalize dirent assert based on dirent64 existence (diff) | |
download | systemd-39a39f18f2bd2b1ef7b4fa4823472d129c514030.tar.xz systemd-39a39f18f2bd2b1ef7b4fa4823472d129c514030.zip |
udev: do not set ID_PATH and by-path symlink for nvmf disks
Prompted by #27391.
-rw-r--r-- | src/udev/udev-builtin-path_id.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c index 8e4d57ee72..ff6682cad9 100644 --- a/src/udev/udev-builtin-path_id.c +++ b/src/udev/udev-builtin-path_id.c @@ -545,7 +545,7 @@ static sd_device *handle_ap(sd_device *parent, char **path) { static int find_real_nvme_parent(sd_device *dev, sd_device **ret) { _cleanup_(sd_device_unrefp) sd_device *nvme = NULL; - const char *sysname, *end; + const char *sysname, *end, *devpath; int r; /* If the device belongs to "nvme-subsystem" (not to be confused with "nvme"), which happens when @@ -577,6 +577,14 @@ static int find_real_nvme_parent(sd_device *dev, sd_device **ret) { if (r < 0) return r; + r = sd_device_get_devpath(nvme, &devpath); + if (r < 0) + return r; + + /* If the 'real parent' is (still) virtual, e.g. for nvmf disks, refuse to set ID_PATH. */ + if (path_startswith(devpath, "/devices/virtual/")) + return -ENXIO; + *ret = TAKE_PTR(nvme); return 0; } |