+ DM_KO=dm
+ kldload dm
+ kldload dm_target_linear
+ ls -l /dev/mapper/control
crw-r----- 1 root operator 32, 0x00000000 Sep 30 11:29 /dev/mapper/control
+ mkdir -p /tmp/dmtr
+ ln -sf /dev/md0 /tmp/dmtr/aaaaaaaaaaaaaaaaaaaaa
+ ln -sf /dev/md0s0 /tmp/dmtr/aaaaaaaaaaaaaaaaaaaaabb
+ ls -l /tmp/dmtr/
total 16
lrwxr-xr-x 1 root wheel 8 Sep 30 11:29 aaaaaaaaaaaaaaaaaaaaa -> /dev/md0
lrwxr-xr-x 1 root wheel 10 Sep 30 11:29 aaaaaaaaaaaaaaaaaaaaabb -> /dev/md0s0
+ ls -l /dev/md0 /dev/md0s0
crw-r----- 1 root operator 4, 0x1e110007 Sep 30 11:29 /dev/md0
crw-r----- 1 root operator 4, 0x1e100007 Sep 30 11:29 /dev/md0s0
+ ls -l /dev/md0
+ sed -n 's/.*0x\([0-9a-f]*\).*/\1/p'
+ YDEV=1e110007
+ ./poc_dm_pdev_trunc 0x1e110007
sizeof(plistref)=16 (kernel expects 16)
strlen(T_PATH)=31 (must be 31)
strlen(L_PATH)=33 (stored pdev name := first 31 chars of L)
expected deps(dfb) if correct = 0x1e110007
---- create response ----
command
create
flags
0x4
minor
0x1e110007
name
dfa
version
0x4
0x10
0x0
---- create response ----
command
create
flags
0x4
minor
0x1e11000f
name
dfb
version
0x4
0x10
0x0
---- create response ----
command
create
flags
0x4
minor
0x1e110017
name
dfc
version
0x4
0x10
0x0
---- reload response ----
cmd_data
length
32
params
/tmp/dmtr/aaaaaaaaaaaaaaaaaaaaabb 0
start
0
type
linear
command
reload
flags
0x40
minor
0x1e110007
name
dfa
version
0x4
0x10
0x0
---- reload response ----
cmd_data
length
32
params
/tmp/dmtr/aaaaaaaaaaaaaaaaaaaaa 0
start
0
type
linear
command
reload
flags
0x40
minor
0x1e11000f
name
dfb
version
0x4
0x10
0x0
==== control: reload with nonexistent path (expect FAILURE) ====
reload dfc (/tmp/dmtr/no-such-device-node): ioctl FAILED with errno=2 (No such file or directory)
---- resume response ----
command
resume
flags
0x4
minor
0x1e110007
name
dfa
open_count
0x0
version
0x4
0x10
0x0
---- resume response ----
command
resume
flags
0x4
minor
0x1e11000f
name
dfb
open_count
0x0
version
0x4
0x10
0x0
---- deps response ----
cmd_data
504365063
command
deps
flags
0
minor
0x1e110007
name
dfa
uuid
version
0x4
0x10
0x0
---- deps response ----
cmd_data
504365063
command
deps
flags
0
minor
0x1e11000f
name
dfb
uuid
version
0x4
0x10
0x0
==== RESULT ====
deps(dfa [path L -> /dev/md0s0]) = 0x1e100007
deps(dfb [path T -> /dev/md0 ]) = 0x1e100007
MISDIRECTION PROVEN (BUG PRESENT): dfb's table (loaded
with a path resolving to /dev/md0) is bound to the pdev
of dfa (/dev/md0s0). The truncated 31-char dedup key
strcmp-matched.
poc exit=0
+ echo 'poc exit=0'
+ rm -f /tmp/dmtr/aaaaaaaaaaaaaaaaaaaaa /tmp/dmtr/aaaaaaaaaaaaaaaaaaaaabb
+ kldunload dm_target_linear
+ kldunload dm