~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/kexec/kexec_common_lib.sh

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #!/bin/sh
  2 # SPDX-License-Identifier: GPL-2.0
  3 #
  4 # Kselftest framework defines: ksft_pass=0, ksft_fail=1, ksft_skip=4
  5 
  6 VERBOSE="${VERBOSE:-1}"
  7 IKCONFIG="/tmp/config-`uname -r`"
  8 KERNEL_IMAGE="/boot/vmlinuz-`uname -r`"
  9 SECURITYFS=$(grep "securityfs" /proc/mounts | awk '{print $2}')
 10 
 11 log_info()
 12 {
 13         [ $VERBOSE -ne 0 ] && echo "[INFO] $1"
 14 }
 15 
 16 # The ksefltest framework requirement returns 0 for PASS.
 17 log_pass()
 18 {
 19         [ $VERBOSE -ne 0 ] && echo "$1 [PASS]"
 20         exit 0
 21 }
 22 
 23 # The ksefltest framework requirement returns 1 for FAIL.
 24 log_fail()
 25 {
 26         [ $VERBOSE -ne 0 ] && echo "$1 [FAIL]"
 27         exit 1
 28 }
 29 
 30 # The ksefltest framework requirement returns 4 for SKIP.
 31 log_skip()
 32 {
 33         [ $VERBOSE -ne 0 ] && echo "$1"
 34         exit 4
 35 }
 36 
 37 # Check efivar SecureBoot-$(the UUID) and SetupMode-$(the UUID).
 38 # (Based on kdump-lib.sh)
 39 get_efivarfs_secureboot_mode()
 40 {
 41         local efivarfs="/sys/firmware/efi/efivars"
 42         local secure_boot_file=""
 43         local setup_mode_file=""
 44         local secureboot_mode=0
 45         local setup_mode=0
 46 
 47         # Make sure that efivar_fs is mounted in the normal location
 48         if ! grep -q "^\S\+ $efivarfs efivarfs" /proc/mounts; then
 49                 log_info "efivars is not mounted on $efivarfs"
 50                 return 0;
 51         fi
 52         secure_boot_file=$(find "$efivarfs" -name SecureBoot-* 2>/dev/null)
 53         setup_mode_file=$(find "$efivarfs" -name SetupMode-* 2>/dev/null)
 54         if [ -f "$secure_boot_file" ] && [ -f "$setup_mode_file" ]; then
 55                 secureboot_mode=$(hexdump -v -e '/1 "%d\ "' \
 56                         "$secure_boot_file"|cut -d' ' -f 5)
 57                 setup_mode=$(hexdump -v -e '/1 "%d\ "' \
 58                         "$setup_mode_file"|cut -d' ' -f 5)
 59 
 60                 if [ $secureboot_mode -eq 1 ] && [ $setup_mode -eq 0 ]; then
 61                         log_info "secure boot mode enabled (CONFIG_EFIVAR_FS)"
 62                         return 1;
 63                 fi
 64         fi
 65         return 0;
 66 }
 67 
 68 # On powerpc platform, check device-tree property
 69 # /proc/device-tree/ibm,secureboot/os-secureboot-enforcing
 70 # to detect secureboot state.
 71 get_ppc64_secureboot_mode()
 72 {
 73         local secure_boot_file="/proc/device-tree/ibm,secureboot/os-secureboot-enforcing"
 74         # Check for secure boot file existence
 75         if [ -f $secure_boot_file ]; then
 76                 log_info "Secureboot is enabled (Device tree)"
 77                 return 1;
 78         fi
 79         log_info "Secureboot is not enabled (Device tree)"
 80         return 0;
 81 }
 82 
 83 # Return the architecture of the system
 84 get_arch()
 85 {
 86         echo $(arch)
 87 }
 88 
 89 # Check efivar SecureBoot-$(the UUID) and SetupMode-$(the UUID).
 90 # The secure boot mode can be accessed as the last integer of
 91 # "od -An -t u1 /sys/firmware/efi/efivars/SecureBoot-*".  The efi
 92 # SetupMode can be similarly accessed.
 93 # Return 1 for SecureBoot mode enabled and SetupMode mode disabled.
 94 get_secureboot_mode()
 95 {
 96         local secureboot_mode=0
 97         local system_arch=$(get_arch)
 98 
 99         if [ "$system_arch" == "ppc64le" ]; then
100                 get_ppc64_secureboot_mode
101                 secureboot_mode=$?
102         else
103                 get_efivarfs_secureboot_mode
104                 secureboot_mode=$?
105         fi
106 
107         if [ $secureboot_mode -eq 0 ]; then
108                 log_info "secure boot mode not enabled"
109         fi
110         return $secureboot_mode;
111 }
112 
113 require_root_privileges()
114 {
115         if [ $(id -ru) -ne 0 ]; then
116                 log_skip "requires root privileges"
117         fi
118 }
119 
120 # Look for config option in Kconfig file.
121 # Return 1 for found and 0 for not found.
122 kconfig_enabled()
123 {
124         local config="$1"
125         local msg="$2"
126 
127         grep -E -q $config $IKCONFIG
128         if [ $? -eq 0 ]; then
129                 log_info "$msg"
130                 return 1
131         fi
132         return 0
133 }
134 
135 # Attempt to get the kernel config first by checking the modules directory
136 # then via proc, and finally by extracting it from the kernel image or the
137 # configs.ko using scripts/extract-ikconfig.
138 # Return 1 for found.
139 get_kconfig()
140 {
141         local proc_config="/proc/config.gz"
142         local module_dir="/lib/modules/`uname -r`"
143         local configs_module="$module_dir/kernel/kernel/configs.ko*"
144 
145         if [ -f $module_dir/config ]; then
146                 IKCONFIG=$module_dir/config
147                 return 1
148         fi
149 
150         if [ ! -f $proc_config ]; then
151                 modprobe configs > /dev/null 2>&1
152         fi
153         if [ -f $proc_config ]; then
154                 cat $proc_config | gunzip > $IKCONFIG 2>/dev/null
155                 if [ $? -eq 0 ]; then
156                         return 1
157                 fi
158         fi
159 
160         local extract_ikconfig="$module_dir/source/scripts/extract-ikconfig"
161         if [ ! -f $extract_ikconfig ]; then
162                 log_skip "extract-ikconfig not found"
163         fi
164 
165         $extract_ikconfig $KERNEL_IMAGE > $IKCONFIG 2>/dev/null
166         if [ $? -eq 1 ]; then
167                 if [ ! -f $configs_module ]; then
168                         log_skip "CONFIG_IKCONFIG not enabled"
169                 fi
170                 $extract_ikconfig $configs_module > $IKCONFIG
171                 if [ $? -eq 1 ]; then
172                         log_skip "CONFIG_IKCONFIG not enabled"
173                 fi
174         fi
175         return 1
176 }
177 
178 # Make sure that securityfs is mounted
179 mount_securityfs()
180 {
181         if [ -z $SECURITYFS ]; then
182                 SECURITYFS=/sys/kernel/security
183                 mount -t securityfs security $SECURITYFS
184         fi
185 
186         if [ ! -d "$SECURITYFS" ]; then
187                 log_fail "$SECURITYFS :securityfs is not mounted"
188         fi
189 }
190 
191 # The policy rule format is an "action" followed by key-value pairs.  This
192 # function supports up to two key-value pairs, in any order.
193 # For example: action func=<keyword> [appraise_type=<type>]
194 # Return 1 for found and 0 for not found.
195 check_ima_policy()
196 {
197         local action="$1"
198         local keypair1="$2"
199         local keypair2="$3"
200         local ret=0
201 
202         mount_securityfs
203 
204         local ima_policy=$SECURITYFS/ima/policy
205         if [ ! -e $ima_policy ]; then
206                 log_fail "$ima_policy not found"
207         fi
208 
209         if [ -n $keypair2 ]; then
210                 grep -e "^$action.*$keypair1" "$ima_policy" | \
211                         grep -q -e "$keypair2"
212         else
213                 grep -q -e "^$action.*$keypair1" "$ima_policy"
214         fi
215 
216         # invert "grep -q" result, returning 1 for found.
217         [ $? -eq 0 ] && ret=1
218         return $ret
219 }

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php