qusal/salt/dom0/files/bin/qvm-pci-regain
Ben Grande bdd4c789c1
fix: avoid echo usage
Echo can interpret operand as an option and checking every variable to
be echoed is troublesome while with printf, if the format specifier is
present before the operand, printing as string can be enforced.
2024-08-06 18:15:24 +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(){
printf '%s\n' "Usage: ${0##*/} --i-like-danger <DEVICE>"
printf '%s\n' "Example: ${0##*/} --i-like-danger 0000:00:1b.0"
printf '%s\n' "Warning: Strongly discouraged to reattach PCI devices to"
printf '%s\n' "Warning: dom0, 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}"
printf '%s\n' "${device}" | tee -- /sys/bus/pci/drivers/pciback/unbind
modalias="$(cat -- "/sys/bus/pci/devices/${device}/modalias")"
module="$(modprobe -R "${modalias}" | head -n 1)"
printf '%s\n' "${device}" | tee -- "/sys/bus/pci/drivers/${module}/bind"