xref: /freebsd/tools/test/stress2/misc/chroot.sh (revision 5ca8e32633c4ffbbcd6762e5888b6a4ba0708c6c)
1#!/bin/sh
2
3#
4# SPDX-License-Identifier: BSD-2-Clause
5#
6# Copyright (c) 2021 Peter Holm <pho@FreeBSD.org>
7#
8# Redistribution and use in source and binary forms, with or without
9# modification, are permitted provided that the following conditions
10# are met:
11# 1. Redistributions of source code must retain the above copyright
12#    notice, this list of conditions and the following disclaimer.
13# 2. Redistributions in binary form must reproduce the above copyright
14#    notice, this list of conditions and the following disclaimer in the
15#    documentation and/or other materials provided with the distribution.
16#
17# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27# SUCH DAMAGE.
28#
29
30# Test scenario input by: "Patrick Sullivan" sulli00777@gmail.com
31
32# Bug 253593
33# "panic: ldvp 0xffff... fl 0x1 dvp 0xffff... fl 0 flags 0x34048144" seen.
34# https://people.freebsd.org/~pho/stress/log/log0087.txt
35
36[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
37
38. ../default.cfg
39
40mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
41mdconfig -l | grep -q md$mdstart &&  mdconfig -d -u $mdstart
42
43odir=`pwd`
44cd /tmp
45sed '1,/^EOF/d' < $odir/$0 > chroot.c
46rm -f /tmp/chroot
47mycc -o chroot -Wall -Wextra -O0 -g chroot.c -static || exit 1
48rm -f chroot.c
49
50mdconfig -a -t swap -s 10m -u $mdstart || exit 1
51newfs -n $newfs_flags md$mdstart > /dev/null
52mount /dev/md$mdstart $mntpoint
53mkdir -p $mntpoint/root/dir $mntpoint/jail $mntpoint/dev
54mount -t nullfs $mntpoint/root $mntpoint/jail
55mount -t devfs null $mntpoint/dev
56mv /tmp/chroot $mntpoint/root
57
58chroot $mntpoint/jail ./chroot &
59sleep .5
60mv $mntpoint/root/dir $mntpoint
61wait
62
63umount $mntpoint/dev
64umount $mntpoint/jail
65while mount | grep "on $mntpoint " | grep -q /dev/md; do
66	umount $mntpoint || sleep 1
67done
68mdconfig -d -u $mdstart
69exit
70EOF
71#include <sys/types.h>
72#include <err.h>
73#include <stdio.h>
74#include <unistd.h>
75
76int
77main(void)
78{
79	if (chdir("dir") == -1)
80		err(1, "chdir() #1");
81	sleep(2);
82	fprintf(stderr, "cwd is %s\n", getwd(NULL));
83}
84