⬢ DragonFlyBSD Kernel Audit
DF-5151 / fix_run.log
← back to finding ↓ download raw
+ DM_KO=/usr/obj/usr/src/sys/dev/disk/dm/dm.ko
+ kldload /usr/obj/usr/src/sys/dev/disk/dm/dm.ko
+ kldload dm_target_linear
+ ls -l /dev/mapper/control
crw-r-----  1 root  operator   32, 0x00000000 Sep 30 11:30 /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:30 aaaaaaaaaaaaaaaaaaaaa -> /dev/md0
lrwxr-xr-x  1 root  wheel  10 Sep 30 11:30 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 ----
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>command</key>
	<string>create</string>
	<key>flags</key>
	<integer>0x4</integer>
	<key>minor</key>
	<integer>0x1e110007</integer>
	<key>name</key>
	<string>dfa</string>
	<key>version</key>
	<array>
		<integer>0x4</integer>
		<integer>0x10</integer>
		<integer>0x0</integer>
	</array>
</dict>
</plist>

---- create response ----
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>command</key>
	<string>create</string>
	<key>flags</key>
	<integer>0x4</integer>
	<key>minor</key>
	<integer>0x1e11000f</integer>
	<key>name</key>
	<string>dfb</string>
	<key>version</key>
	<array>
		<integer>0x4</integer>
		<integer>0x10</integer>
		<integer>0x0</integer>
	</array>
</dict>
</plist>

---- create response ----
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>command</key>
	<string>create</string>
	<key>flags</key>
	<integer>0x4</integer>
	<key>minor</key>
	<integer>0x1e110017</integer>
	<key>name</key>
	<string>dfc</string>
	<key>version</key>
	<array>
		<integer>0x4</integer>
		<integer>0x10</integer>
		<integer>0x0</integer>
	</array>
</dict>
</plist>

reload dfa (/tmp/dmtr/aaaaaaaaaaaaaaaaaaaaabb): ioctl FAILED with errno=2 (No such file or directory)
dfa reload with 33-char path was REJECTED by kernel
(expected behaviour with DF-5151 fix applied)
---- reload response ----
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>cmd_data</key>
	<array>
		<dict>
			<key>length</key>
			<integer>32</integer>
			<key>params</key>
			<string>/tmp/dmtr/aaaaaaaaaaaaaaaaaaaaa 0</string>
			<key>start</key>
			<integer>0</integer>
			<key>type</key>
			<string>linear</string>
		</dict>
	</array>
	<key>command</key>
	<string>reload</string>
	<key>flags</key>
	<integer>0x40</integer>
	<key>minor</key>
	<integer>0x1e11000f</integer>
	<key>name</key>
	<string>dfb</string>
	<key>version</key>
	<array>
		<integer>0x4</integer>
		<integer>0x10</integer>
		<integer>0x0</integer>
	</array>
</dict>
</plist>

==== 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 ----
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>command</key>
	<string>resume</string>
	<key>flags</key>
	<integer>0x4</integer>
	<key>minor</key>
	<integer>0x1e11000f</integer>
	<key>name</key>
	<string>dfb</string>
	<key>open_count</key>
	<integer>0x0</integer>
	<key>version</key>
	<array>
		<integer>0x4</integer>
		<integer>0x10</integer>
		<integer>0x0</integer>
	</array>
</dict>
</plist>

---- deps response ----
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>cmd_data</key>
	<array>
		<integer>504430599</integer>
	</array>
	<key>command</key>
	<string>deps</string>
	<key>flags</key>
	<integer>0</integer>
	<key>minor</key>
	<integer>0x1e11000f</integer>
	<key>name</key>
	<string>dfb</string>
	<key>uuid</key>
	<string/>
	<key>version</key>
	<array>
		<integer>0x4</integer>
		<integer>0x10</integer>
		<integer>0x0</integer>
	</array>
</dict>
</plist>


==== RESULT ====
deps(dfb [path T -> /dev/md0   ]) = 0x1e110007

FIX CONFIRMED: long path rejected loudly, short path
bound to its own device (deps == expected 0x1e110007).
poc exit=1
+ echo 'poc exit=1'
+ rm -f /tmp/dmtr/aaaaaaaaaaaaaaaaaaaaa /tmp/dmtr/aaaaaaaaaaaaaaaaaaaaabb
+ kldunload dm_target_linear
+ kldunload dm