qusal/salt/dom0/files/bin/qvm-pci-regain
Ben Grande 224312ed42
feat: enable all optional shellcheck validations
Make shell a little bit safer with:

- add-default-case
- check-extra-masked-returns
- check-set-e-suppressed
- quote-safe-variables
- check-unassigned-uppercase

Although there are some stylistic decisions for uniformity:

- avoid-nullary-conditions
- deprecated-which
- require-variable-braces
2024-07-10 14:36:05 +02:00

44 lines
1.4 KiB
Bash
Executable File

#!/bin/sh
# SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com
#
# SPDX-License-Identifier: GPL-3.0-or-later
## Credits: https://www.qubes-os.org/doc/how-to-use-pci-devices/#bringing-pci-devices-back-to-dom0
##
## After attaching a PCI device and detaching it, the device is not available
## in Dom0 anymore. This is an intended feature. A device which was previously
## assigned to a less trusted qube could attack dom0 if it were automatically
## reassigned there. In order to re-enable the device in dom0, either reboot
## physical machine or run the following script.
##
## This is useful for testing purposes when testing PCI devices, not
## recommended for users to attach a device to Dom0.
set -eu
usage(){
echo "Usage: ${0##*/} --i-like-danger <DEVICE>"
echo "Example: ${0##*/} --i-like-danger 0000:00:1b.0"
echo "Warning: Strongly discouraged to reattach PCI devices to dom0"
echo "Warning: especially if it doesn't support resetting!"
exit 1
}
case "${1-}" in
--i-like-danger) ;;
*) usage;;
esac
case "${2-}" in
"") usage;;
*) device="${2}"
esac
uid="$(id -u)"
test "${uid}" = "0" || exec sudo "${0}"
echo "${device}" | tee /sys/bus/pci/drivers/pciback/unbind
modalias="$(cat "/sys/bus/pci/devices/${device}/modalias")"
module="$(modprobe -R "${modalias}" | head -n 1)"
echo "${device}" | tee "/sys/bus/pci/drivers/${module}/bind"