#!/bin/bash list="$1" buildroot=${list%/*} blacklist() { cat > "$buildroot/etc/modprobe.d/$1-blacklist.conf" <<-__EOF__ # This kernel module can be automatically loaded by non-root users. To # enhance system security, the module is blacklisted by default to ensure # system administrators make the module available for use as needed. # See https://access.redhat.com/articles/3760101 for more details. # # Remove the blacklist by adding a comment # at the start of the line. blacklist $1 __EOF__ } check_blacklist() { if modinfo "$buildroot/$1" | grep -q '^alias:\s\+net-'; then mod="${1##*/}" mod="${mod%.ko*}" echo "$mod has an alias that allows auto-loading. Blacklisting." blacklist "$mod" fi } foreachp() { P=$(nproc) bgcount=0 while read mod; do $1 "$mod" & bgcount=$((bgcount + 1)) if [ $bgcount -eq $P ]; then wait -n bgcount=$((bgcount - 1)) fi done wait } [ -d "$buildroot/etc/modprobe.d/" ] || mkdir -p "$buildroot/etc/modprobe.d/" if [ -s $list ]; then cat $list | foreachp check_blacklist if ls $buildroot/etc/modprobe.d/* >& /dev/null ; then echo "%defattr(-,root,root)" >> $list echo "%config(noreplace) /etc/modprobe.d/*-blacklist.conf" >> $list fi else # If modules-extra.list is empty the %files section will throw an # error. Add a dummy entry to workaround the problem. echo "%defattr(-,root,root)" >> $list fi