xref: /freebsd/tools/test/stress2/misc/msdos20.sh (revision ef777be98543f7daae90bd123d4fc1ec4a54efc2)
1*ef777be9SPeter Holm#!/bin/sh
2*ef777be9SPeter Holm
3*ef777be9SPeter Holm#
4*ef777be9SPeter Holm# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
5*ef777be9SPeter Holm#
6*ef777be9SPeter Holm# SPDX-License-Identifier: BSD-2-Clause
7*ef777be9SPeter Holm#
8*ef777be9SPeter Holm
9*ef777be9SPeter Holm# msdosfs disk image fuzz test.
10*ef777be9SPeter Holm# No problems seen
11*ef777be9SPeter Holm
12*ef777be9SPeter Holm. ../default.cfg
13*ef777be9SPeter Holm
14*ef777be9SPeter Holm[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
15*ef777be9SPeter Holm
16*ef777be9SPeter Holmcc -o /tmp/flip -Wall -Wextra -O2 ../tools/flip.c || exit 1
17*ef777be9SPeter Holm
18*ef777be9SPeter Holmset -eu
19*ef777be9SPeter Holmu1=$mdstart
20*ef777be9SPeter Holmu2=$((mdstart + 1))
21*ef777be9SPeter Holmmp1=${mntpoint}$u1
22*ef777be9SPeter Holmmp2=${mntpoint}$u2
23*ef777be9SPeter Holmmkdir -p $mp1 $mp2
24*ef777be9SPeter Holmprog=$(basename "$0" .sh)
25*ef777be9SPeter Holmbackup=/tmp/$prog.sh.diskimage.`date +%Y%m%dT%H%M%S`
26*ef777be9SPeter Holmcap=$((32 * 1024))	# Only fuzz the first 32k
27*ef777be9SPeter Holmlog=$mp1/$prog.sh.log
28*ef777be9SPeter Holmdiskimage=$mp1/msdos20.sh.diskimage
29*ef777be9SPeter Holm
30*ef777be9SPeter Holmset +e
31*ef777be9SPeter Holmmount | grep "on $mp2 " | grep -q /dev/md && umount -f $mp2
32*ef777be9SPeter Holmmount | grep "on $mp1 " | grep -q /dev/md && umount -f $mp1
33*ef777be9SPeter Holm[ -c /dev/md$u2 ] && mdconfig -d -u $u2
34*ef777be9SPeter Holm[ -c /dev/md$u1 ] && mdconfig -d -u $u1
35*ef777be9SPeter Holmmdconfig -a -t swap -s 2g -u $u1
36*ef777be9SPeter Holmnewfs -U /dev/md$u1 > /dev/null
37*ef777be9SPeter Holmmount /dev/md$u1 $mp1
38*ef777be9SPeter Holm
39*ef777be9SPeter Holmsize=32m
40*ef777be9SPeter Holmtype=`jot -r 1 1 3`
41*ef777be9SPeter Holm[ $type -eq 3 ] && size=260m
42*ef777be9SPeter Holm[ -c /dev/md$u2 ] && mdconfig -d -u $u2
43*ef777be9SPeter Holmdd if=/dev/zero of=$diskimage bs=$size count=1 status=none
44*ef777be9SPeter Holmmdconfig -a -t vnode -f $diskimage -u $u2
45*ef777be9SPeter Holm[ $type -eq 1 ] && newfs_msdos -F 12         /dev/md$u2 > /dev/null 2>&1
46*ef777be9SPeter Holm[ $type -eq 2 ] && newfs_msdos -F 16         /dev/md$u2 > /dev/null 2>&1
47*ef777be9SPeter Holm[ $type -eq 3 ] && newfs_msdos -F 32 -b 4096 /dev/md$u2 > /dev/null 2>&1
48*ef777be9SPeter Holm
49*ef777be9SPeter Holmmount -t msdosfs /dev/md$u2 $mp2 || { echo "Initial mount of type $type failed"; exit 1; }
50*ef777be9SPeter Holmif [ -d /usr/include/sys ]; then
51*ef777be9SPeter Holm	mkdir $mp2/sys
52*ef777be9SPeter Holm	cp /usr/include/sys/elf_common.h $mp2/sys
53*ef777be9SPeter Holm	cp /usr/include/sys/soundcard.h  $mp2/sys
54*ef777be9SPeter Holm	cp /usr/include/sys/sysproto.h   $mp2/sys
55*ef777be9SPeter Holmfi
56*ef777be9SPeter Holmumount $mp2
57*ef777be9SPeter Holm
58*ef777be9SPeter Holmcd $mp1
59*ef777be9SPeter Holmstart=`date +%s`
60*ef777be9SPeter Holmnn=0
61*ef777be9SPeter Holms=0
62*ef777be9SPeter Holmwhile [ $((`date +%s` - start)) -lt 240 ]; do
63*ef777be9SPeter Holm	mount -t msdosfs /dev/md$u2 $mp2 2>/dev/null || { s=1; break; }
64*ef777be9SPeter Holm	ls -lR $mp2 > /dev/null 2>&1 ||  { s=2; break; }
65*ef777be9SPeter Holm	rm -rf $mp2/* > /dev/null 2>&1 || { s=3; break; }
66*ef777be9SPeter Holm	touch $mp2/`jot -rc 8 a z | tr -d '\n'` || { s=4; break; }
67*ef777be9SPeter Holm	while mount | grep -q "on $mp2 "; do umount $mp2; done
68*ef777be9SPeter Holm	echo * | grep -q core && { s=5; break; }
69*ef777be9SPeter Holm	sync
70*ef777be9SPeter Holm	mdconfig -d -u $u2
71*ef777be9SPeter Holm	/tmp/flip -n 10 -s $cap $diskimage
72*ef777be9SPeter Holm	cp $diskimage $backup
73*ef777be9SPeter Holm	fsync $backup
74*ef777be9SPeter Holm	sync
75*ef777be9SPeter Holm	mdconfig -a -t vnode -f $diskimage -u $u2
76*ef777be9SPeter Holm	nn=$((nn + 1))
77*ef777be9SPeter Holmdone
78*ef777be9SPeter Holm#echo "Exit after $nn loops on a type $type MSDOS FS with code $s"
79*ef777be9SPeter Holmmount | grep -q "on $mp2 " && umount $mp2
80*ef777be9SPeter Holmmdconfig -d -u $u2 || exit 1
81*ef777be9SPeter Holm
82*ef777be9SPeter Holmecho * | grep -q core && { ls -l *.core; cp $log /tmp; exit 106; } ||
83*ef777be9SPeter Holmcd /tmp
84*ef777be9SPeter Holmumount $mp1
85*ef777be9SPeter Holmmdconfig -d -u $u1
86*ef777be9SPeter Holmrm -f /tmp/flip $backup
87*ef777be9SPeter Holmexit 0
88