mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
test_firmware: Test platform fw loading on non-EFI systems
On non-EFI systems, it wasn't possible to test the platform firmware
loader because it will have never set "checked_fw" during __init.
Instead, allow the test code to override this check. Additionally split
the declarations into a private symbol namespace so there is greater
enforcement of the symbol visibility.
Fixes: 548193cba2
("test_firmware: add support for firmware_request_platform")
Cc: stable@vger.kernel.org
Signed-off-by: Kees Cook <keescook@chromium.org>
Acked-by: Ard Biesheuvel <ardb@kernel.org>
Link: https://lore.kernel.org/r/20200909225354.3118328-1-keescook@chromium.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
1c30474826
commit
baaabecfc8
@@ -26,6 +26,8 @@
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/efi_embedded_fw.h>
|
||||
|
||||
MODULE_IMPORT_NS(TEST_FIRMWARE);
|
||||
|
||||
#define TEST_FIRMWARE_NAME "test-firmware.bin"
|
||||
#define TEST_FIRMWARE_NUM_REQS 4
|
||||
#define TEST_FIRMWARE_BUF_SIZE SZ_1K
|
||||
@@ -489,6 +491,9 @@ out:
|
||||
static DEVICE_ATTR_WO(trigger_request);
|
||||
|
||||
#ifdef CONFIG_EFI_EMBEDDED_FIRMWARE
|
||||
extern struct list_head efi_embedded_fw_list;
|
||||
extern bool efi_embedded_fw_checked;
|
||||
|
||||
static ssize_t trigger_request_platform_store(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
@@ -501,6 +506,7 @@ static ssize_t trigger_request_platform_store(struct device *dev,
|
||||
};
|
||||
struct efi_embedded_fw efi_embedded_fw;
|
||||
const struct firmware *firmware = NULL;
|
||||
bool saved_efi_embedded_fw_checked;
|
||||
char *name;
|
||||
int rc;
|
||||
|
||||
@@ -513,6 +519,8 @@ static ssize_t trigger_request_platform_store(struct device *dev,
|
||||
efi_embedded_fw.data = (void *)test_data;
|
||||
efi_embedded_fw.length = sizeof(test_data);
|
||||
list_add(&efi_embedded_fw.list, &efi_embedded_fw_list);
|
||||
saved_efi_embedded_fw_checked = efi_embedded_fw_checked;
|
||||
efi_embedded_fw_checked = true;
|
||||
|
||||
pr_info("loading '%s'\n", name);
|
||||
rc = firmware_request_platform(&firmware, name, dev);
|
||||
@@ -530,6 +538,7 @@ static ssize_t trigger_request_platform_store(struct device *dev,
|
||||
rc = count;
|
||||
|
||||
out:
|
||||
efi_embedded_fw_checked = saved_efi_embedded_fw_checked;
|
||||
release_firmware(firmware);
|
||||
list_del(&efi_embedded_fw.list);
|
||||
kfree(name);
|
||||
|
Reference in New Issue
Block a user