fix: kernel AppArmor 2-pass olddefconfig and QEMU test direct kernel boot
The stock TinyCore kernel config has "# CONFIG_SECURITY is not set" which caused make olddefconfig to silently revert all security configs in a single pass. Fix by applying security configs (AppArmor, Audit, LSM) after the first olddefconfig resolves base dependencies, then running a second pass. Added mandatory verification that exits on missing critical configs. All QEMU test scripts converted from broken -cdrom + -append pattern to direct kernel boot (-kernel + -initrd) via shared test/lib/qemu-helpers.sh helper library. The -append flag only works with -kernel, not -cdrom. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -96,17 +96,6 @@ echo "==> Enabling required kernel configs..."
|
||||
./scripts/config --enable CONFIG_MEMCG
|
||||
./scripts/config --enable CONFIG_CFS_BANDWIDTH
|
||||
|
||||
# Security: AppArmor LSM + Audit subsystem
|
||||
echo "==> Enabling AppArmor + Audit kernel configs..."
|
||||
./scripts/config --enable CONFIG_AUDIT
|
||||
./scripts/config --enable CONFIG_AUDITSYSCALL
|
||||
./scripts/config --enable CONFIG_SECURITY
|
||||
./scripts/config --enable CONFIG_SECURITYFS
|
||||
./scripts/config --enable CONFIG_SECURITY_NETWORK
|
||||
./scripts/config --enable CONFIG_SECURITY_APPARMOR
|
||||
./scripts/config --set-str CONFIG_LSM "lockdown,yama,apparmor"
|
||||
./scripts/config --set-str CONFIG_DEFAULT_SECURITY "apparmor"
|
||||
|
||||
# --- Strip unnecessary subsystems for smallest footprint ---
|
||||
# This is a headless K8s edge appliance — no sound, GPU, wireless, etc.
|
||||
echo "==> Disabling unnecessary subsystems for minimal footprint..."
|
||||
@@ -156,13 +145,29 @@ echo "==> Disabling unnecessary subsystems for minimal footprint..."
|
||||
# FPGA (not needed)
|
||||
./scripts/config --disable FPGA
|
||||
|
||||
# Resolve dependencies (olddefconfig accepts defaults for new options)
|
||||
# First pass: resolve base dependencies before adding security configs.
|
||||
# The stock TC config has "# CONFIG_SECURITY is not set" which causes
|
||||
# olddefconfig to strip security-related options if applied in a single pass.
|
||||
make olddefconfig
|
||||
|
||||
# Verify CONFIG_CGROUP_BPF is set
|
||||
if grep -q 'CONFIG_CGROUP_BPF=y' .config; then
|
||||
echo " CONFIG_CGROUP_BPF=y confirmed in .config"
|
||||
else
|
||||
# Security: AppArmor LSM + Audit subsystem
|
||||
# Applied AFTER first olddefconfig to ensure CONFIG_SECURITY dependencies
|
||||
# (SYSFS, MULTIUSER) are resolved before enabling the security subtree.
|
||||
echo "==> Enabling AppArmor + Audit kernel configs..."
|
||||
./scripts/config --enable CONFIG_AUDIT
|
||||
./scripts/config --enable CONFIG_AUDITSYSCALL
|
||||
./scripts/config --enable CONFIG_SECURITY
|
||||
./scripts/config --enable CONFIG_SECURITYFS
|
||||
./scripts/config --enable CONFIG_SECURITY_NETWORK
|
||||
./scripts/config --enable CONFIG_SECURITY_APPARMOR
|
||||
./scripts/config --set-str CONFIG_LSM "lockdown,yama,apparmor"
|
||||
./scripts/config --set-str CONFIG_DEFAULT_SECURITY "apparmor"
|
||||
|
||||
# Second pass: resolve security config dependencies
|
||||
make olddefconfig
|
||||
|
||||
# Verify critical configs are set
|
||||
if ! grep -q 'CONFIG_CGROUP_BPF=y' .config; then
|
||||
echo "ERROR: CONFIG_CGROUP_BPF not set after olddefconfig"
|
||||
grep 'CGROUP_BPF' .config || echo " (CGROUP_BPF not found in .config)"
|
||||
echo ""
|
||||
@@ -170,10 +175,25 @@ else
|
||||
grep -E 'CONFIG_BPF=|CONFIG_BPF_SYSCALL=' .config || echo " BPF not found"
|
||||
exit 1
|
||||
fi
|
||||
echo " CONFIG_CGROUP_BPF=y confirmed"
|
||||
|
||||
# Show what changed
|
||||
echo " Config diff from stock:"
|
||||
diff "$KERNEL_CFG" .config | grep '^[<>]' | head -20 || echo " (no differences beyond CGROUP_BPF)"
|
||||
if ! grep -q 'CONFIG_SECURITY_APPARMOR=y' .config; then
|
||||
echo "ERROR: CONFIG_SECURITY_APPARMOR not set after olddefconfig"
|
||||
echo " Security-related configs:"
|
||||
grep -E 'CONFIG_SECURITY=|CONFIG_SECURITYFS=|CONFIG_SECURITY_APPARMOR=' .config
|
||||
exit 1
|
||||
fi
|
||||
echo " CONFIG_SECURITY_APPARMOR=y confirmed"
|
||||
|
||||
if ! grep -q 'CONFIG_AUDIT=y' .config; then
|
||||
echo "ERROR: CONFIG_AUDIT not set after olddefconfig"
|
||||
exit 1
|
||||
fi
|
||||
echo " CONFIG_AUDIT=y confirmed"
|
||||
|
||||
# Show what changed (security-related)
|
||||
echo " Key config values:"
|
||||
grep -E 'CONFIG_SECURITY=|CONFIG_SECURITY_APPARMOR=|CONFIG_AUDIT=|CONFIG_LSM=|CONFIG_CGROUP_BPF=' .config | sed 's/^/ /'
|
||||
|
||||
# --- Build kernel + modules ---
|
||||
NPROC=$(nproc 2>/dev/null || echo 4)
|
||||
|
||||
Reference in New Issue
Block a user