1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #!/bin/sh
- # SPDX-License-Identifier: GPL-2.0-or-later
- #
- # Copyright (c) 2019 FUJITSU LIMITED. All rights reserved.
- # Author: Xiao Yang <yangx.jy@cn.fujitsu.com>
- TST_SETUP=binfmt_misc_setup
- TST_CLEANUP=binfmt_misc_cleanup
- TST_NEEDS_DRIVERS="binfmt_misc"
- TST_NEEDS_TMPDIR=1
- TST_NEEDS_ROOT=1
- TST_NEEDS_CMDS="${TST_NEEDS_CMDS} modprobe mount umount mkdir rm"
- . tst_test.sh
- rmod_binfmt_misc=0
- umount_binfmt_misc=0
- binfmt_misc_mntpoint="ltp_binfmt_misc"
- remove_binary_type()
- {
- local name=$1
- (echo -1 >"$name") 2>/dev/null
- [ $? -ne 0 -o -f "$name" ] && \
- tst_res TWARN "Fail to remove a binary type"
- }
- get_binfmt_misc_mntpoint()
- {
- local mntpoint
- mntpoint=$(awk '/ binfmt_misc / { print $2 }' /proc/mounts)
- [ -z "$mntpoint" ] && tst_brk TBROK "Can't get binfmt_misc mntpoint"
- echo "$mntpoint"
- }
- binfmt_misc_setup()
- {
- local mntpoint
- if ! grep -q "binfmt_misc" /proc/filesystems; then
- ROD modprobe binfmt_misc
- rmod_binfmt_misc=1
- fi
- # Match fs type accurately, because autofs is also mounted on
- # /proc/sys/fs/binfmt_misc on some distros, as below:
- # cat /proc/mounts | grep binfmt_misc
- # systemd-1 /proc/sys/fs/binfmt_misc autofs ...
- # binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc ...
- mntpoint=$(awk '/ binfmt_misc / { print $2 }' /proc/mounts)
- [ -n "$mntpoint" ] && return
- ROD mkdir ${binfmt_misc_mntpoint}
- ROD mount -t binfmt_misc none ${binfmt_misc_mntpoint}
- umount_binfmt_misc=1
- }
- binfmt_misc_cleanup()
- {
- if [ ${umount_binfmt_misc} -ne 0 ]; then
- umount ${binfmt_misc_mntpoint}
- umount_binfmt_misc=0
- fi
- [ -d ${binfmt_misc_mntpoint} ] && rm -rf ${binfmt_misc_mntpoint}
- if [ ${rmod_binfmt_misc} -ne 0 ]; then
- modprobe -r binfmt_misc
- rmod_binfmt_misc=0
- fi
- }
|