]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: add /dev/disk/by-diskseq symlink for block devices
authorLennart Poettering <lennart@poettering.net>
Thu, 31 Mar 2022 08:10:37 +0000 (10:10 +0200)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 1 Apr 2022 14:44:37 +0000 (23:44 +0900)
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
rules.d/60-persistent-storage.rules

index 6ac17f2b64562528da5eb05a32b1a1cd698c3ec6..23f43e4f976b02300b8953660b095cfed0c2ccd3 100644 (file)
@@ -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"