DragonFlyBSD Kernel Audit
DF-2879 / fix_run.log
← back to finding ↓ download raw
DF-2879 fix validation run — patched kernel #1 (Sep 2 20:43:17), exact same PoC

$ truncate -s 266240 /tmp/swapodd && vnconfig -c vn1 /tmp/swapodd && swapctl -a /dev/vn1
swapctl: adding /dev/vn1 as swap device
$ swapctl -l
Device:       512-blocks      Used:
/dev/vbd0s1b     8388608          0
/dev/vn1             520          0          <-- REAL size now (stock kernel: 1024)
$ diskinfo /dev/vn1 | head -1
/dev/vn1         blksize=512  offset=0x000000000000 size=0x000000041000  260.00 KB
$ sysctl vm.swap_size vm.swap_free
vm.swap_size: 1048513                            <-- +1 page only (stock: +64)
vm.swap_free: 1048513

$ swapctl -d /dev/vbd0s1b; /tmp/hog 5200 &      # identical pressure scenario
  (75 s polling loop; guest stays responsive throughout)
FINAL_ERROR_COUNT=0                               <-- stock kernel: 25712 / 18215 + guest down
dmesg delta (all of it -- correct, graceful degradation):
  swap low/high-water marks set to 0/0
  swap_pager_getswapspace: swap full allocating 2 pages
  Warning: system low on memory+swap shortage 17637 for 23 ticks!
  Warning: system low on memory+swap shortage 18127 for 44 ticks!
  Warning: system low on memory+swap shortage 18127 for 65 ticks!
  Warning: system low on memory+swap shortage 18127 for 86 ticks!
  Warning: system low on memory+swap shortage 18599 for 107 ticks!
  Warning: system low on memory+swap shortage 18599 for 129 ticks!
  Warning: system low on memory+swap shortage 18767 for 150 ticks!

$ pkill hog; swapctl -a /dev/vbd0s1b             # full recovery, no reset needed
$ swapctl -d /dev/vn1                            # clean swapoff of the unaligned device
$ vnconfig -u vn1 && rm /tmp/swapodd
CLEANUP_OK
$ vmstat (after): fre 3.24G, us 0 sy 3 id 97      -- healthy