From cdf157f9f2113947155f7f48837fd86c02d8d3e3 Mon Sep 17 00:00:00 2001 From: virtbuilder_pel7x64builder0 Date: Wed, 7 Aug 2019 16:52:09 +0200 Subject: [PATCH] ovmf package update (changed from edk2-ovmf) Signed-off-by: virtbuilder_pel7x64builder0 --- SOURCES/edk2-ovmf-logo.bmp | Bin 0 -> 130370 bytes SOURCES/ovmf-vars-generator | 273 ++++++++++++++++++++++++++++++++++++ SPECS/ovmf.spec | 151 ++++++++++++++++++++ 3 files changed, 424 insertions(+) create mode 100644 SOURCES/edk2-ovmf-logo.bmp create mode 100644 SOURCES/ovmf-vars-generator create mode 100644 SPECS/ovmf.spec diff --git a/SOURCES/edk2-ovmf-logo.bmp b/SOURCES/edk2-ovmf-logo.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b3be84cb776a0f5867513ff9ea34fe5542f3e6ba GIT binary patch literal 130370 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 +# - Kashyap Chamarthy +# +# Licensed under MIT License, for full text see LICENSE +# +# Purpose: Launch a QEMU guest and enroll ithe UEFI keys into an OVMF +# variables ("VARS") file. Then boot a Linux kernel with QEMU. +# Finally, perform a check to verify if Secure Boot +# is enabled. + +from __future__ import print_function + +import argparse +import os +import logging +import tempfile +import shutil +import string +import subprocess + + +def strip_special(line): + return ''.join([c for c in str(line) if c in string.printable]) + + +def generate_qemu_cmd(args, readonly, *extra_args): + if args.disable_smm: + machinetype = 'pc' + else: + machinetype = 'q35,smm=on' + machinetype += ',accel=%s' % ('kvm' if args.enable_kvm else 'tcg') + return [ + args.qemu_binary, + '-machine', machinetype, + '-display', 'none', + '-no-user-config', + '-nodefaults', + '-m', '256', + '-smp', '2,sockets=2,cores=1,threads=1', + '-chardev', 'pty,id=charserial1', + '-device', 'isa-serial,chardev=charserial1,id=serial1', + '-global', 'driver=cfi.pflash01,property=secure,value=%s' % ( + 'off' if args.disable_smm else 'on'), + '-drive', + 'file=%s,if=pflash,format=raw,unit=0,readonly=on' % ( + args.ovmf_binary), + '-drive', + 'file=%s,if=pflash,format=raw,unit=1,readonly=%s' % ( + args.out_temp, 'on' if readonly else 'off'), + '-serial', 'stdio'] + list(extra_args) + + +def download(url, target, suffix, no_download): + istemp = False + if target and os.path.exists(target): + return target, istemp + if not target: + temped = tempfile.mkstemp(prefix='qosb.', suffix='.%s' % suffix) + os.close(temped[0]) + target = temped[1] + istemp = True + if no_download: + raise Exception('%s did not exist, but downloading was disabled' % + target) + import requests + logging.debug('Downloading %s to %s', url, target) + r = requests.get(url, stream=True) + with open(target, 'wb') as f: + for chunk in r.iter_content(chunk_size=1024): + if chunk: + f.write(chunk) + return target, istemp + + +def enroll_keys(args): + shutil.copy(args.ovmf_template_vars, args.out_temp) + + logging.info('Starting enrollment') + + cmd = generate_qemu_cmd( + args, + False, + '-drive', + 'file=%s,format=raw,if=none,media=cdrom,id=drive-cd1,' + 'readonly=on' % args.uefi_shell_iso, + '-device', + 'ide-cd,drive=drive-cd1,id=cd1,' + 'bootindex=1') + p = subprocess.Popen(cmd, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + logging.info('Performing enrollment') + # Wait until the UEFI shell starts (first line is printed) + read = p.stdout.readline() + #if b'char device redirected' in read: + # read = p.stdout.readline() + #if args.print_output: + # print(strip_special(read), end='') + # print() + # Send the escape char to enter the UEFI shell early + p.stdin.write(b'\x1b') + p.stdin.flush() + # And then run the following three commands from the UEFI shell: + # change into the first file system device; install the default + # keys and certificates, and reboot + p.stdin.write(b'fs0:\r\n') + p.stdin.write(b'EnrollDefaultKeys.efi\r\n') + p.stdin.write(b'reset -s\r\n') + p.stdin.flush() + #while True: + # read = p.stdout.readline() + # if args.print_output: + # print('OUT: %s' % strip_special(read), end='') + # print() + # if b'info: success' in read: + # break + #p.wait() + if args.print_output: + print(strip_special(p.stdout.read()), end='') + logging.info('Finished enrollment') + + +def test_keys(args): + logging.info('Grabbing test kernel') + kernel, kerneltemp = download(args.kernel_url, args.kernel_path, + 'kernel', args.no_download) + + logging.info('Starting verification') + try: + cmd = generate_qemu_cmd( + args, + True, + '-append', 'console=tty0 console=ttyS0,115200n8', + '-kernel', kernel) + p = subprocess.Popen(cmd, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + logging.info('Performing verification') + while True: + read = p.stdout.readline() + if args.print_output: + print('OUT: %s' % strip_special(read), end='') + print() + if b'Secure boot disabled' in read: + raise Exception('Secure Boot was disabled') + elif b'Secure boot enabled' in read: + logging.info('Confirmed: Secure Boot is enabled') + break + elif b'Kernel is locked down from EFI secure boot' in read: + logging.info('Confirmed: Secure Boot is enabled') + break + p.kill() + if args.print_output: + print(strip_special(p.stdout.read()), end='') + logging.info('Finished verification') + finally: + if kerneltemp: + os.remove(kernel) + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument('output', help='Filename for output vars file') + parser.add_argument('--out-temp', help=argparse.SUPPRESS) + parser.add_argument('--force', help='Overwrite existing output file', + action='store_true') + parser.add_argument('--print-output', help='Print the QEMU guest output', + action='store_true') + parser.add_argument('--verbose', '-v', help='Increase verbosity', + action='count') + parser.add_argument('--quiet', '-q', help='Decrease verbosity', + action='count') + parser.add_argument('--qemu-binary', help='QEMU binary path', + default='/usr/bin/qemu-system-x86_64') + parser.add_argument('--enable-kvm', help='Enable KVM acceleration', + action='store_true') + parser.add_argument('--ovmf-binary', help='OVMF secureboot code file', + default='/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd') + parser.add_argument('--ovmf-template-vars', help='OVMF empty vars file', + default='/usr/share/edk2/ovmf/OVMF_VARS.fd') + parser.add_argument('--uefi-shell-iso', help='Path to uefi shell iso', + default='/usr/share/edk2/ovmf/UefiShell.iso') + parser.add_argument('--skip-enrollment', + help='Skip enrollment, only test', action='store_true') + parser.add_argument('--skip-testing', + help='Skip testing generated "VARS" file', + action='store_true') + parser.add_argument('--kernel-path', + help='Specify a consistent path for kernel') + parser.add_argument('--no-download', action='store_true', + help='Never download a kernel') + parser.add_argument('--fedora-version', + help='Fedora version to get kernel for checking', + default='27') + parser.add_argument('--kernel-url', help='Kernel URL', + default='https://download.fedoraproject.org/pub/fedora' + '/linux/releases/%(version)s/Everything/x86_64' + '/os/images/pxeboot/vmlinuz') + parser.add_argument('--disable-smm', + help=('Don\'t restrict varstore pflash writes to ' + 'guest code that executes in SMM. Use this ' + 'option only if your OVMF binary doesn\'t have ' + 'the edk2 SMM driver stack built into it ' + '(possibly because your QEMU binary lacks SMM ' + 'emulation). Note that without restricting ' + 'varstore pflash writes to guest code that ' + 'executes in SMM, a malicious guest kernel, ' + 'used for testing, could undermine Secure ' + 'Boot.'), + action='store_true') + args = parser.parse_args() + args.kernel_url = args.kernel_url % {'version': args.fedora_version} + + validate_args(args) + return args + + +def validate_args(args): + if (os.path.exists(args.output) + and not args.force + and not args.skip_enrollment): + raise Exception('%s already exists' % args.output) + + if args.skip_enrollment and not os.path.exists(args.output): + raise Exception('%s does not yet exist' % args.output) + + verbosity = (args.verbose or 1) - (args.quiet or 0) + if verbosity >= 2: + logging.basicConfig(level=logging.DEBUG) + elif verbosity == 1: + logging.basicConfig(level=logging.INFO) + elif verbosity < 0: + logging.basicConfig(level=logging.ERROR) + else: + logging.basicConfig(level=logging.WARN) + + if args.skip_enrollment: + args.out_temp = args.output + else: + temped = tempfile.mkstemp(prefix='qosb.', suffix='.vars') + os.close(temped[0]) + args.out_temp = temped[1] + logging.debug('Temp output: %s', args.out_temp) + + +def move_to_dest(args): + shutil.copy(args.out_temp, args.output) + os.remove(args.out_temp) + + +def main(): + args = parse_args() + if not args.skip_enrollment: + enroll_keys(args) + if not args.skip_testing: + test_keys(args) + if not args.skip_enrollment: + move_to_dest(args) + if args.skip_testing: + logging.info('Created %s' % args.output) + else: + logging.info('Created and verified %s' % args.output) + else: + logging.info('Verified %s', args.output) + + +if __name__ == '__main__': + main() diff --git a/SPECS/ovmf.spec b/SPECS/ovmf.spec new file mode 100644 index 0000000..bf81d39 --- /dev/null +++ b/SPECS/ovmf.spec @@ -0,0 +1,151 @@ +%global debug_package %{nil} +%global __python %{__python} +%define GITDATE 201905 +%define OPENSSLVER 1_1_1b + +Name: ovmf +Version: %{GITDATE} +Release: 1%{?dist} +Summary: UEFI firmware for 64-bit virtual machines +Group: Applications/Emulators +License: BSD and OpenSSL and MIT +URL: http://www.tianocore.org +Source0: https://github.com/tianocore/edk2/archive/edk2-stable%{GITDATE}.tar.gz +Source1: https://github.com/openssl/openssl/archive/OpenSSL_%{OPENSSLVER}.tar.gz +Source2: ovmf-vars-generator +Source3: edk2-ovmf-logo.bmp +ExclusiveArch: x86_64 +BuildRequires: python2-devel +BuildRequires: libuuid-devel +BuildRequires: /usr/bin/iasl +BuildRequires: binutils gcc git +BuildRequires: nasm +BuildRequires: dosfstools +BuildRequires: mtools +BuildRequires: genisoimage +BuildRequires: qemu-kvm >= 1.5.3-44 +BuildRequires: kernel >= 3.10.0-52 +BuildRequires: rpmdevtools + + +%description +EDK II is a modern, feature-rich, cross-platform firmware development +environment for the UEFI and PI specifications. This package contains sample +64-bit UEFI firmware builds for QEMU and KVM. + + +%prep +%setup -q -n edk2-edk2-stable%{GITDATE} +tar xvf %{SOURCE1} -C CryptoPkg/Library/OpensslLib/ +mv CryptoPkg/Library/OpensslLib/openssl-OpenSSL_%{OPENSSLVER}/* CryptoPkg/Library/OpensslLib/openssl/ +cp %{SOURCE2} . +cp %{SOURCE3} MdeModulePkg/Logo/Logo.bmp + + +%build +make -j32 -C BaseTools/ +source ./edksetup.sh +make -C "$EDK_TOOLS_PATH" + +SMP_MFLAGS="%{?_smp_mflags}" +if [[ x"$SMP_MFLAGS" = x-j* ]]; then + CC_FLAGS="$CC_FLAGS -n ${SMP_MFLAGS#-j}" +elif [ -n "%{?jobs}" ]; then + CC_FLAGS="$CC_FLAGS -n %{?jobs}" +fi + +CC_FLAGS="$CC_FLAGS --cmd-len=65536 -t GCC48 -b DEBUG --hash" + +# Build with SB but without SMM; include UEFI shell. +build ${CC_FLAGS} -D FD_SIZE_4MB -a X64 -p OvmfPkg/OvmfPkgX64.dsc -D SECURE_BOOT_ENABLE +# Build with SB and SMM; exclude UEFI shell. +build -D SECURE_BOOT_ENABLE -D EXCLUDE_SHELL_FROM_FD ${CC_FLAGS} -a IA32 -a X64 -p OvmfPkg/OvmfPkgIa32X64.dsc -D SMM_REQUIRE -D FD_SIZE_4MB +# Sanity check: the varstore templates must be identical. +cmp Build/OvmfX64/DEBUG_GCC4?/FV/OVMF_VARS.fd Build/Ovmf3264/DEBUG_GCC4?/FV/OVMF_VARS.fd + +# Prepare an ISO image that boots the UEFI shell. +( + UEFI_SHELL_BINARY=Build/Ovmf3264/DEBUG_GCC48/X64/Shell.efi + ENROLLER_BINARY=Build/Ovmf3264/DEBUG_GCC48/X64/EnrollDefaultKeys.efi + UEFI_SHELL_IMAGE=uefi_shell.img + ISO_IMAGE=UefiShell.iso + + UEFI_SHELL_BINARY_BNAME=$(basename -- "$UEFI_SHELL_BINARY") + UEFI_SHELL_SIZE=$(stat --format=%s -- "$UEFI_SHELL_BINARY") + ENROLLER_SIZE=$(stat --format=%s -- "$ENROLLER_BINARY") + + # add 1MB then 10% for metadata + UEFI_SHELL_IMAGE_KB=$(( + (UEFI_SHELL_SIZE + ENROLLER_SIZE + 1 * 1024 * 1024) * 11 / 10 / 1024 + )) + + # create non-partitioned FAT image + rm -f -- "$UEFI_SHELL_IMAGE" + mkdosfs -C "$UEFI_SHELL_IMAGE" -n UEFI_SHELL -- "$UEFI_SHELL_IMAGE_KB" + + # copy the shell binary into the FAT image + export MTOOLS_SKIP_CHECK=1 + mmd -i "$UEFI_SHELL_IMAGE" ::efi + mmd -i "$UEFI_SHELL_IMAGE" ::efi/boot + mcopy -i "$UEFI_SHELL_IMAGE" "$UEFI_SHELL_BINARY" ::efi/boot/bootx64.efi + mcopy -i "$UEFI_SHELL_IMAGE" "$ENROLLER_BINARY" :: + mdir -i "$UEFI_SHELL_IMAGE" -/ :: + + # build ISO with FAT image file as El Torito EFI boot image + genisoimage -input-charset ASCII -J -rational-rock \ + -efi-boot "$UEFI_SHELL_IMAGE" -no-emul-boot \ + -o "$ISO_IMAGE" -- "$UEFI_SHELL_IMAGE" +) + +# Enroll the default certificates in a separate variable store template. Base +# RHEL7 qemu-kvm does not emulate SMM, but we don't need SMM for the enrollment +# here. +chmod +x ./ovmf-vars-generator +./ovmf-vars-generator --verbose --verbose \ + --qemu-binary /usr/bin/qemu-system-x86_64 \ + --ovmf-binary Build/OvmfX64/DEBUG_GCC4?/FV/OVMF_CODE.fd \ + --ovmf-template-vars Build/OvmfX64/DEBUG_GCC4?/FV/OVMF_VARS.fd \ + --uefi-shell-iso UefiShell.iso \ + --skip-testing \ + --disable-smm \ + OVMF_VARS.secboot.fd + + +%install + +copy_license() { + install -m 0644 $1 $RPM_BUILD_ROOT%{_docdir}/%{name}/Licenses/$2-License.txt +} + +mkdir -p $RPM_BUILD_ROOT%{_docdir}/%{name}/Licenses +copy_license License.txt edk2 +copy_license OvmfPkg/License.txt OvmfPkg + +mkdir -p $RPM_BUILD_ROOT%{_datadir}/OVMF + +install -m 0644 Build/OvmfX64/DEBUG_GCC4?/FV/OVMF_CODE.fd $RPM_BUILD_ROOT%{_datadir}/OVMF/OVMF_CODE.fd +install -m 0644 Build/Ovmf3264/DEBUG_GCC4?/FV/OVMF_CODE.fd $RPM_BUILD_ROOT%{_datadir}/OVMF/OVMF_CODE.secboot.fd +install -m 0644 Build/OvmfX64/DEBUG_GCC4?/FV/OVMF_VARS.fd $RPM_BUILD_ROOT%{_datadir}/OVMF/OVMF_VARS.fd +install -m 0644 OVMF_VARS.secboot.fd $RPM_BUILD_ROOT%{_datadir}/OVMF/OVMF_VARS.secboot.fd +install -m 0644 UefiShell.iso $RPM_BUILD_ROOT%{_datadir}/OVMF/UefiShell.iso +install -m 0644 OvmfPkg/README $RPM_BUILD_ROOT%{_docdir}/%{name}/README + +copy_license CryptoPkg/Library/OpensslLib/openssl/LICENSE OpensslLib + + +%files +%defattr(-,root,root,-) +%dir %{_docdir}/%{name}/Licenses +%doc %{_docdir}/%{name}/Licenses/edk2-License.txt +%doc %{_docdir}/%{name}/Licenses/OvmfPkg-License.txt +%doc %{_docdir}/%{name}/Licenses/OpensslLib-License.txt +%doc %{_docdir}/%{name}/README +%dir %{_datadir}/OVMF/ +%{_datadir}/OVMF/OVMF_CODE.fd +%{_datadir}/OVMF/OVMF_CODE.secboot.fd +%{_datadir}/OVMF/OVMF_VARS.fd +%{_datadir}/OVMF/OVMF_VARS.secboot.fd +%{_datadir}/OVMF/UefiShell.iso + + +%changelog