-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
selftests/ima: kexec_load syscall test
The kernel CONFIG_KEXEC_VERIFY_SIG option is limited to verifying a kernel image's signature, when loaded via the kexec_file_load syscall. There is no method for verifying a kernel image's signature loaded via the kexec_load syscall. This test verifies loading the kernel image via the kexec_load syscall fails when the kernel CONFIG_KEXEC_VERIFY_SIG option is enabled on systems with secureboot enabled[1]. [1] Detecting secureboot enabled is architecture specific. Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
- Loading branch information
Mimi Zohar
committed
Dec 11, 2018
1 parent
060190f
commit a802ed0
Showing
4 changed files
with
70 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# Makefile for kexec_load | ||
|
||
uname_M := $(shell uname -m 2>/dev/null || echo not) | ||
ARCH ?= $(shell echo $(uname_M) | sed -e s/i.86/x86/ -e s/x86_64/x86/) | ||
|
||
ifeq ($(ARCH),x86) | ||
TEST_PROGS := test_kexec_load.sh | ||
|
||
include ../lib.mk | ||
|
||
endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
CONFIG_IMA_APPRAISE | ||
CONFIG_IMA_ARCH_POLICY | ||
CONFIG_SECURITYFS | ||
CONFIG_KEXEC_VERIFY_SIG |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
#!/bin/sh | ||
# SPDX-License-Identifier: GPL-2.0+ | ||
# Loading a kernel image via the kexec_load syscall should fail | ||
# when the kerne is CONFIG_KEXEC_VERIFY_SIG enabled and the system | ||
# is booted in secureboot mode. | ||
|
||
TEST="$0" | ||
EFIVARFS="/sys/firmware/efi/efivars" | ||
rc=0 | ||
|
||
# Kselftest framework requirement - SKIP code is 4. | ||
ksft_skip=4 | ||
|
||
# kexec requires root privileges | ||
if [ $UID != 0 ]; then | ||
echo "$TEST: must be run as root" >&2 | ||
exit $ksft_skip | ||
fi | ||
|
||
# Make sure that efivars is mounted in the normal location | ||
if ! grep -q "^\S\+ $EFIVARFS efivarfs" /proc/mounts; then | ||
echo "$TEST: efivars is not mounted on $EFIVARFS" >&2 | ||
exit $ksft_skip | ||
fi | ||
|
||
# Get secureboot mode | ||
file="$EFIVARFS/SecureBoot-*" | ||
if [ ! -e $file ]; then | ||
echo "$TEST: unknown secureboot mode" >&2 | ||
exit $ksft_skip | ||
fi | ||
secureboot=`hexdump $file | awk '{print substr($4,length($4),1)}'` | ||
|
||
# kexec_load should fail in secure boot mode | ||
KERNEL_IMAGE="/boot/vmlinuz-`uname -r`" | ||
kexec -l $KERNEL_IMAGE &>> /dev/null | ||
if [ $? == 0 ]; then | ||
kexec -u | ||
if [ "$secureboot" == "1" ]; then | ||
echo "$TEST: kexec_load succeeded [FAIL]" | ||
rc=1 | ||
else | ||
echo "$TEST: kexec_load succeeded [PASS]" | ||
fi | ||
else | ||
if [ "$secureboot" == "1" ]; then | ||
echo "$TEST: kexec_load failed [PASS]" | ||
else | ||
echo "$TEST: kexec_load failed [FAIL]" | ||
rc=1 | ||
fi | ||
fi | ||
|
||
exit $rc |