aboutsummaryrefslogtreecommitdiff
path: root/sbin/init
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2018-08-23 05:06:27 +0000
committerWarner Losh <imp@FreeBSD.org>2018-08-23 05:06:27 +0000
commit8a317ce4b3f0a38f7eda84dc3b62b997d7d8baa7 (patch)
tree07be8f6a6a674cc3d4d68009ccede7f9caa69890 /sbin/init
parentce1ba01c8a9a3fd1fd8c0860c039a89bc11eb850 (diff)
downloadsrc-8a317ce4b3f0a38f7eda84dc3b62b997d7d8baa7.tar.gz
src-8a317ce4b3f0a38f7eda84dc3b62b997d7d8baa7.zip
Implement blacklisting for devmatch
devmatch_blacklist is a space separated list of modules (w/o the .ko or full path) to exclude from devmatch's processing. Differential Revision: https://reviews.freebsd.org/D16735
Notes
Notes: svn path=/head/; revision=338238
Diffstat (limited to 'sbin/init')
-rw-r--r--sbin/init/rc.conf1
-rwxr-xr-xsbin/init/rc.d/devmatch16
2 files changed, 12 insertions, 5 deletions
diff --git a/sbin/init/rc.conf b/sbin/init/rc.conf
index c48edd241108..ff69cc04f67d 100644
--- a/sbin/init/rc.conf
+++ b/sbin/init/rc.conf
@@ -42,6 +42,7 @@ ddb_config="/etc/ddb.conf" # ddb(8) config file.
devd_enable="YES" # Run devd, to trigger programs on device tree changes.
devd_flags="" # Additional flags for devd(8).
devmatch_enable="YES" # Demand load kernel modules based on device ids.
+devmatch_blacklist="" # List of modules (w/o .ko) to exclude from devmatch.
#kld_list="" # Kernel modules to load after local disks are mounted
kldxref_enable="YES" # Build linker.hints files with kldxref(8).
kldxref_clobber="NO" # Overwrite old linker.hints at boot.
diff --git a/sbin/init/rc.d/devmatch b/sbin/init/rc.d/devmatch
index c7d5be7de96f..234aaf6dae0e 100755
--- a/sbin/init/rc.d/devmatch
+++ b/sbin/init/rc.d/devmatch
@@ -41,15 +41,15 @@ one_nomatch="$2"
devmatch_start()
{
- local x
+ local x m list
if [ -n "$one_nomatch" ]; then
- x=$(devmatch -p "${one_nomatch}" | sort -u)
+ list=$(devmatch -p "${one_nomatch}" | sort -u)
else
- x=$(devmatch | sort -u)
+ list=$(devmatch | sort -u)
fi
- [ -n "$x" ] || return
+ [ -n "$list" ] || return
# While kldload can accept multiple modules
# on the line at once, we loop here in case
@@ -57,8 +57,14 @@ devmatch_start()
# We also optimize against the false positives
# or drivers that have symbolic links that
# confuse devmatch by running it -n.
+ # Finally, we filter out all items in the
+ # devmactch_blacklist.
devctl freeze
- for m in ${x}; do
+ x=$(echo ${devmatch_blacklist} | tr ' ' '#')
+ for m in ${list}; do
+ case "#${x}#" in
+ *"#${m}#"*) continue ;;
+ esac
echo "Autoloading module: ${m}"
kldload -n ${m}
done