summaryrefslogtreecommitdiff
path: root/rules.d
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2022-03-31 10:10:37 +0200
committerYu Watanabe <watanabe.yu+github@gmail.com>2022-04-01 23:44:37 +0900
commit0d08db7f89ee665a9dcb6dd66c1f9e203192e8ec (patch)
tree1e3ef98cd428e0d35eb8cd7e6510ee8d1a532107 /rules.d
parent37ebfe49de103ba11e36d3a48ee93cb19bbec53d (diff)
downloadsystemd-0d08db7f89ee665a9dcb6dd66c1f9e203192e8ec.tar.gz
udev: add /dev/disk/by-diskseq symlink for block devices
This adds another symlink for block devices: /dev/disk/by-diskseq/<number> where the number is the diskseq number as exposed by the kernel. It's useful for apps because they can use it to open a device by diskseq, in a way that is safe against device node reuse. I.e. if a device node path like this is passed to an app it could open the device node via the symlink and also parse the diskseq from the path. Once the device is opened it could compare the parsed diskseq with the one returned by BLKGETDISKSEQ on the open node, and if it matches they know they are talking to the right device. Fixes: #22906
Diffstat (limited to 'rules.d')
-rw-r--r--rules.d/60-persistent-storage.rules5
1 files changed, 5 insertions, 0 deletions
diff --git a/rules.d/60-persistent-storage.rules b/rules.d/60-persistent-storage.rules
index 6ac17f2b64..23f43e4f97 100644
--- a/rules.d/60-persistent-storage.rules
+++ b/rules.d/60-persistent-storage.rules
@@ -121,4 +121,9 @@ ENV{DEVTYPE}=="partition", ENV{ID_WWN_WITH_EXTENSION}=="?*", SYMLINK+="disk/by-i
ENV{ID_PART_ENTRY_UUID}=="?*", SYMLINK+="disk/by-partuuid/$env{ID_PART_ENTRY_UUID}"
ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", SYMLINK+="disk/by-partlabel/$env{ID_PART_ENTRY_NAME}"
+# by-diskseq link (if an app is told to open a path like this, they may parse
+# the diskseq number from the path, then issue BLKGETDISKSEQ to verify they really got
+# the right device, to access specific disks in a race-free fashion)
+ENV{DISKSEQ}=="?*", ENV{DEVTYPE}!="partition", SYMLINK+="disk/by-diskseq/$env{DISKSEQ}"
+
LABEL="persistent_storage_end"