at v5.7-rc3 772 B view raw
1// SPDX-License-Identifier: GPL-2.0 2 3#include <linux/efi_embedded_fw.h> 4#include <linux/property.h> 5#include <linux/security.h> 6#include <linux/vmalloc.h> 7 8#include "fallback.h" 9#include "firmware.h" 10 11int firmware_fallback_platform(struct fw_priv *fw_priv, enum fw_opt opt_flags) 12{ 13 const u8 *data; 14 size_t size; 15 int rc; 16 17 if (!(opt_flags & FW_OPT_FALLBACK_PLATFORM)) 18 return -ENOENT; 19 20 rc = security_kernel_load_data(LOADING_FIRMWARE_EFI_EMBEDDED); 21 if (rc) 22 return rc; 23 24 rc = efi_get_embedded_fw(fw_priv->fw_name, &data, &size); 25 if (rc) 26 return rc; /* rc == -ENOENT when the fw was not found */ 27 28 fw_priv->data = vmalloc(size); 29 if (!fw_priv->data) 30 return -ENOMEM; 31 32 memcpy(fw_priv->data, data, size); 33 fw_priv->size = size; 34 fw_state_done(fw_priv); 35 return 0; 36}