+ DM_KO=dm + kldload dm + kldload dm_target_linear + ls -l /dev/mapper/control crw-r----- 1 root operator 32, 0x00000000 Sep 30 11:27 /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:27 aaaaaaaaaaaaaaaaaaaaa -> /dev/md0 lrwxr-xr-x 1 root wheel 10 Sep 30 11:27 aaaaaaaaaaaaaaaaaaaaabb -> /dev/md0s0 + ls -l /dev/md0 /dev/md0s0 crw-r----- 1 root operator 4, 0x1e110007 Sep 30 10:12 /dev/md0 crw-r----- 1 root operator 4, 0x1e100007 Sep 30 10:12 /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