Skip to content

Commit

Permalink
Merge tag 'efi-2023-07-rc1-2' of https://source.denx.de/u-boot/custod…
Browse files Browse the repository at this point in the history
…ians/u-boot-efi

Pull request for efi-2023-07-rc1-2

Documentation:

* Describe Python coding style

UEFI:

* Enable tests for authenticated capsules on the sandbox
* Fix pylint warnings
* Correct struct efi_hii_keyboard_layout definition
  • Loading branch information
trini committed Apr 22, 2023
2 parents 802132c + b10bfd0 commit 39bc4e1
Show file tree
Hide file tree
Showing 10 changed files with 78 additions and 84 deletions.
1 change: 1 addition & 0 deletions configs/sandbox_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,7 @@ CONFIG_ERRNO_STR=y
CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
CONFIG_EFI_CAPSULE_ON_DISK=y
CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
CONFIG_EFI_CAPSULE_AUTHENTICATE=y
CONFIG_EFI_SECURE_BOOT=y
CONFIG_TEST_FDTDEC=y
CONFIG_UNIT_TEST=y
Expand Down
1 change: 1 addition & 0 deletions configs/sandbox_flattree_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ CONFIG_ERRNO_STR=y
CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
CONFIG_EFI_CAPSULE_ON_DISK=y
CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y
CONFIG_EFI_CAPSULE_AUTHENTICATE=y
CONFIG_UNIT_TEST=y
CONFIG_UT_TIME=y
CONFIG_UT_DM=y
7 changes: 7 additions & 0 deletions doc/develop/codingstyle.rst
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ The following rules apply:
applies only to Linux, not to U-Boot. Only large hunks which are copied
unchanged from Linux may retain that comment format.

* Python code shall conform to `PEP8 (Style Guide for Python Code)
<https://peps.python.org/pep-0008/>`_. Use `pylint
<https://github.com/pylint-dev/pylint>`_ for checking the code.

* Use patman to send your patches (``tools/patman/patman -H`` for full
instructions). With a few tags in your commits this will check your patches
and take care of emailing them.
Expand Down Expand Up @@ -67,6 +71,9 @@ documentation is strongly advised. The Linux kernel `kernel-doc
<https://www.kernel.org/doc/html/latest/doc-guide/kernel-doc.html>`_
documentation applies with no changes.

Our Python code documentation follows `PEP257 (Docstring Conventions)
<https://peps.python.org/pep-0257/>`_.

Use structures for I/O access
-----------------------------

Expand Down
2 changes: 1 addition & 1 deletion include/efi_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -1173,7 +1173,7 @@ struct efi_hii_keyboard_layout {
efi_guid_t guid;
u32 layout_descriptor_string_offset;
u8 descriptor_count;
struct efi_key_descriptor descriptors[];
/* struct efi_key_descriptor descriptors[]; follows here */
} __packed;

struct efi_hii_keyboard_package {
Expand Down
6 changes: 0 additions & 6 deletions lib/efi_loader/efi_capsule.c
Original file line number Diff line number Diff line change
Expand Up @@ -404,12 +404,6 @@ efi_status_t efi_capsule_authenticate(const void *capsule, efi_uintn_t capsule_s

return status;
}
#else
efi_status_t efi_capsule_authenticate(const void *capsule, efi_uintn_t capsule_size,
void **image, efi_uintn_t *image_size)
{
return EFI_UNSUPPORTED;
}
#endif /* CONFIG_EFI_CAPSULE_AUTHENTICATE */

static __maybe_unused bool fwu_empty_capsule(struct efi_capsule_header *capsule)
Expand Down
27 changes: 9 additions & 18 deletions test/py/tests/test_efi_capsule/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,21 @@
# Copyright (c) 2020, Linaro Limited
# Author: AKASHI Takahiro <[email protected]>

import os
import os.path
import re
from subprocess import call, check_call, check_output, CalledProcessError
import pytest
from capsule_defs import *
"""Fixture for UEFI capsule test
"""

#
# Fixture for UEFI capsule test
#
from subprocess import call, check_call, CalledProcessError
import pytest
from capsule_defs import CAPSULE_DATA_DIR, CAPSULE_INSTALL_DIR, EFITOOLS_PATH

@pytest.fixture(scope='session')
def efi_capsule_data(request, u_boot_config):
"""Set up a file system to be used in UEFI capsule and
authentication test.
Args:
request: Pytest request object.
u_boot_config: U-boot configuration.
"""Set up a file system to be used in UEFI capsule and authentication test
and return a ath to disk image to be used for testing
Return:
A path to disk image to be used for testing
request -- Pytest request object.
u_boot_config -- U-boot configuration.
"""
global CAPSULE_DATA_DIR, CAPSULE_INSTALL_DIR

mnt_point = u_boot_config.persistent_data_dir + '/test_efi_capsule'
data_dir = mnt_point + CAPSULE_DATA_DIR
Expand Down
35 changes: 17 additions & 18 deletions test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
# SPDX-License-Identifier: GPL-2.0+
# Copyright (c) 2020, Linaro Limited
# Author: AKASHI Takahiro <[email protected]>
#
# U-Boot UEFI: Firmware Update Test

"""
"""U-Boot UEFI: Firmware Update Test
This test verifies capsule-on-disk firmware update for FIT images
"""

from subprocess import check_call, check_output, CalledProcessError
import pytest
from capsule_defs import *
from capsule_defs import CAPSULE_DATA_DIR, CAPSULE_INSTALL_DIR


@pytest.mark.boardspec('sandbox_flattree')
Expand All @@ -24,15 +21,18 @@
@pytest.mark.buildconfigspec('cmd_nvedit_efi')
@pytest.mark.buildconfigspec('cmd_sf')
@pytest.mark.slow
class TestEfiCapsuleFirmwareFit(object):
class TestEfiCapsuleFirmwareFit():
"""Test capsule-on-disk firmware update for FIT images
"""

def test_efi_capsule_fw1(
self, u_boot_config, u_boot_console, efi_capsule_data):
"""
Test Case 1 - Update U-Boot and U-Boot environment on SPI Flash
but with an incorrect GUID value in the capsule
No update should happen
0x100000-0x150000: U-Boot binary (but dummy)
0x150000-0x200000: U-Boot environment (but dummy)
"""Test Case 1
Update U-Boot and U-Boot environment on SPI Flash
but with an incorrect GUID value in the capsule
No update should happen
0x100000-0x150000: U-Boot binary (but dummy)
0x150000-0x200000: U-Boot environment (but dummy)
"""
# other tests might have run and the
# system might not be in a clean state.
Expand Down Expand Up @@ -74,8 +74,6 @@ def test_efi_capsule_fw1(

capsule_early = u_boot_config.buildconfig.get(
'config_efi_capsule_on_disk_early')
capsule_auth = u_boot_config.buildconfig.get(
'config_efi_capsule_authenticate')

# reboot
u_boot_console.restart_uboot(expect_reset = capsule_early)
Expand Down Expand Up @@ -107,11 +105,12 @@ def test_efi_capsule_fw1(

def test_efi_capsule_fw2(
self, u_boot_config, u_boot_console, efi_capsule_data):
"""Test Case 2
Update U-Boot and U-Boot environment on SPI Flash
0x100000-0x150000: U-Boot binary (but dummy)
0x150000-0x200000: U-Boot environment (but dummy)
"""
Test Case 2 - Update U-Boot and U-Boot environment on SPI Flash
0x100000-0x150000: U-Boot binary (but dummy)
0x150000-0x200000: U-Boot environment (but dummy)
"""

disk_img = efi_capsule_data
with u_boot_console.log.section('Test Case 2-a, before reboot'):
output = u_boot_console.run_command_list([
Expand Down
41 changes: 21 additions & 20 deletions test/py/tests/test_efi_capsule/test_capsule_firmware_signed_fit.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@
# Copyright (c) 2022, Arm Limited
# Author: AKASHI Takahiro <[email protected]>,
# adapted to FIT images by Vincent Stehlé <[email protected]>
#
# U-Boot UEFI: Firmware Update (Signed capsule with FIT images) Test

"""
"""U-Boot UEFI: Firmware Update (Signed capsule with FIT images) Test
This test verifies capsule-on-disk firmware update
with signed capsule files containing FIT images
"""
Expand All @@ -25,15 +23,18 @@
@pytest.mark.buildconfigspec('cmd_nvedit_efi')
@pytest.mark.buildconfigspec('cmd_sf')
@pytest.mark.slow
class TestEfiCapsuleFirmwareSignedFit(object):
class TestEfiCapsuleFirmwareSignedFit():
"""Capsule-on-disk firmware update test
"""

def test_efi_capsule_auth1(
self, u_boot_config, u_boot_console, efi_capsule_data):
"""
Test Case 1 - Update U-Boot on SPI Flash, FIT image format
0x100000-0x150000: U-Boot binary (but dummy)
"""Test Case 1
Update U-Boot on SPI Flash, FIT image format
x150000: U-Boot binary (but dummy)
If the capsule is properly signed, the authentication
should pass and the firmware be updated.
If the capsule is properly signed, the authentication
should pass and the firmware be updated.
"""
disk_img = efi_capsule_data
with u_boot_console.log.section('Test Case 1-a, before reboot'):
Expand Down Expand Up @@ -103,13 +104,13 @@ def test_efi_capsule_auth1(

def test_efi_capsule_auth2(
self, u_boot_config, u_boot_console, efi_capsule_data):
"""
Test Case 2 - Update U-Boot on SPI Flash, FIT image format
0x100000-0x150000: U-Boot binary (but dummy)
"""Test Case 2
Update U-Boot on SPI Flash, FIT image format
0x100000-0x150000: U-Boot binary (but dummy)
If the capsule is signed but with an invalid key,
the authentication should fail and the firmware
not be updated.
If the capsule is signed but with an invalid key,
the authentication should fail and the firmware
not be updated.
"""
disk_img = efi_capsule_data
with u_boot_console.log.section('Test Case 2-a, before reboot'):
Expand Down Expand Up @@ -182,12 +183,12 @@ def test_efi_capsule_auth2(

def test_efi_capsule_auth3(
self, u_boot_config, u_boot_console, efi_capsule_data):
"""
Test Case 3 - Update U-Boot on SPI Flash, FIT image format
0x100000-0x150000: U-Boot binary (but dummy)
"""Test Case 3
Update U-Boot on SPI Flash, FIT image format
0x100000-0x150000: U-Boot binary (but dummy)
If the capsule is not signed, the authentication
should fail and the firmware not be updated.
If the capsule is not signed, the authentication
should fail and the firmware not be updated.
"""
disk_img = efi_capsule_data
with u_boot_console.log.section('Test Case 3-a, before reboot'):
Expand Down
38 changes: 18 additions & 20 deletions test/py/tests/test_efi_capsule/test_capsule_firmware_signed_raw.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
# SPDX-License-Identifier: GPL-2.0+
# Copyright (c) 2021, Linaro Limited
# Author: AKASHI Takahiro <[email protected]>
#
# U-Boot UEFI: Firmware Update (Signed capsule with raw images) Test

"""
"""U-Boot UEFI: Firmware Update (Signed capsule with raw images) Test
This test verifies capsule-on-disk firmware update
with signed capsule files containing raw images
"""
Expand All @@ -23,15 +21,17 @@
@pytest.mark.buildconfigspec('cmd_nvedit_efi')
@pytest.mark.buildconfigspec('cmd_sf')
@pytest.mark.slow
class TestEfiCapsuleFirmwareSignedRaw(object):
class TestEfiCapsuleFirmwareSignedRaw():
"""Firmware Update (Signed capsule with raw images) Test
"""

def test_efi_capsule_auth1(
self, u_boot_config, u_boot_console, efi_capsule_data):
"""
Test Case 1 - Update U-Boot on SPI Flash, raw image format
0x100000-0x150000: U-Boot binary (but dummy)
"""Test Case 1 - Update U-Boot on SPI Flash, raw image format
0x100000-0x150000: U-Boot binary (but dummy)
If the capsule is properly signed, the authentication
should pass and the firmware be updated.
If the capsule is properly signed, the authentication
should pass and the firmware be updated.
"""
disk_img = efi_capsule_data
with u_boot_console.log.section('Test Case 1-a, before reboot'):
Expand Down Expand Up @@ -100,13 +100,12 @@ def test_efi_capsule_auth1(

def test_efi_capsule_auth2(
self, u_boot_config, u_boot_console, efi_capsule_data):
"""
Test Case 2 - Update U-Boot on SPI Flash, raw image format
0x100000-0x150000: U-Boot binary (but dummy)
"""Test Case 2 - Update U-Boot on SPI Flash, raw image format
0x100000-0x150000: U-Boot binary (but dummy)
If the capsule is signed but with an invalid key,
the authentication should fail and the firmware
not be updated.
If the capsule is signed but with an invalid key,
the authentication should fail and the firmware
not be updated.
"""
disk_img = efi_capsule_data
with u_boot_console.log.section('Test Case 2-a, before reboot'):
Expand Down Expand Up @@ -179,12 +178,11 @@ def test_efi_capsule_auth2(

def test_efi_capsule_auth3(
self, u_boot_config, u_boot_console, efi_capsule_data):
"""
Test Case 3 - Update U-Boot on SPI Flash, raw image format
0x100000-0x150000: U-Boot binary (but dummy)
"""Test Case 3 - Update U-Boot on SPI Flash, raw image format
0x100000-0x150000: U-Boot binary (but dummy)
If the capsule is not signed, the authentication
should fail and the firmware not be updated.
If the capsule is not signed, the authentication
should fail and the firmware not be updated.
"""
disk_img = efi_capsule_data
with u_boot_console.log.section('Test Case 3-a, before reboot'):
Expand Down
4 changes: 3 additions & 1 deletion test/py/tests/test_efi_fit.py
Original file line number Diff line number Diff line change
Expand Up @@ -433,11 +433,13 @@ def launch_efi(enable_fdt, enable_comp):
sys_arch = cons.config.buildconfig.get('config_sys_arch', '"sandbox"')[1:-1]
is_sandbox = sys_arch == 'sandbox'

if is_sandbox:
old_dtb = cons.config.dtb

try:
if is_sandbox:
# Use our own device tree file, will be restored afterwards.
control_dtb = make_dtb('internal', False)
old_dtb = cons.config.dtb
cons.config.dtb = control_dtb

# Run tests
Expand Down

0 comments on commit 39bc4e1

Please sign in to comment.