DF-5691 / run.log
===== 1. matrix (plain same-source rig) ===== MATRIX: 2517 checks, 0 failures, 1 known(DF-2240-diff) rows --- matrix exit=0 ===== 2. nolife BASELINE (guard-page rig, stock prop_string.c) ===== == DF-5691 nolife (BASELINE: stock prop_string.c): trap=SIGSEGV on guard/freed page == T1: borrowed uuid=0x80050a000 into string storage T1 dict-replace dangle (dm_dev_status pattern) -> TRAP(SIGSEGV) OK T1b: borrowed name=0x80048e000 uuid=0x80050a000 T1b both-keys replace (dm_table_deps pattern) -> TRAP(SIGSEGV) OK T2: borrowed uuid=0x80048b000; releasing dict (last ref) T2 dict-release dangle -> TRAP(SIGSEGV) OK T2b: string borrows owner=0x800485000; caller FREES it T2b freed-buffer read via proplist ptr -> TRAP(SIGSEGV) OK T2c: string borrows owner=0x800485000; caller REUSES the buffer T2c: externalized: <?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>k</key> <string>PWNED-BY-BUFFER-REUSE</string> </dict> </plist> T2c buffer-reuse externalize leak -> exit=0 OK OK T3: ps_size=15 frozen; owner buffer now lengthened T3 frozen ps_size strcpy overrun -> TRAP(SIGSEGV) OK T4(control): externalize=<?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>k</key> <string>control</string> </dict> </plist> T4 control copy-variant -> exit=0 OK OK DML: borrowed name=0x80048e000 uuid=0x80050a000 (dm_ioctl.c:596-597) DML: dict consistent after in-tree replace pattern; borrows 0x80048e000/0x80050a000 NOT dereferenced (latent) DML in-tree dm sequence w/o deref (latent today) -> exit=0 OK OK NCD alive-read sanity -> exit=0 OK OK NOLIFE(base): all expectations met --- nolife baseline exit=0 ===== 3. nolife FIXED (guard-page rig + fix.diff) ===== == DF-5691 nolife (FIXED: nocopy-create copies): trap=SIGSEGV on guard/freed page == T1: borrowed uuid=0x80050a000 into string storage T1 dict-replace dangle (dm_dev_status pattern) -> TRAP(SIGSEGV) OK T1b: borrowed name=0x80048e000 uuid=0x80050a000 T1b both-keys replace (dm_table_deps pattern) -> TRAP(SIGSEGV) OK T2: borrowed uuid=0x80048b000; releasing dict (last ref) T2 dict-release dangle -> TRAP(SIGSEGV) OK T2b: string borrows owner=0x800485000; caller FREES it T2b: NO TRAP, intact content "transient-buffer" T2b freed-buffer read via proplist ptr -> exit=0 OK OK T2c: string borrows owner=0x800485000; caller REUSES the buffer T2c: externalized: <?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>k</key> <string>transient-buffer</string> </dict> </plist> T2c buffer-reuse externalize leak -> exit=3 OK T3: ps_size=15 frozen; owner buffer now lengthened T3: NO TRAP copy=BBBBBBBBBBBBBBB... (len=15) T3 frozen ps_size strcpy overrun -> exit=0 OK OK T4(control): externalize=<?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>k</key> <string>control</string> </dict> </plist> T4 control copy-variant -> exit=0 OK OK DML: borrowed name=0x80048e000 uuid=0x80050a000 (dm_ioctl.c:596-597) DML: dict consistent after in-tree replace pattern; borrows 0x80048e000/0x80050a000 NOT dereferenced (latent) DML in-tree dm sequence w/o deref (latent today) -> exit=0 OK OK NCD alive-read sanity -> exit=0 OK OK NOLIFE(fixed): all expectations met --- nolife fixed exit=0