Path: blob/master/drivers/base/firmware_loader/fallback_platform.c
26428 views
// SPDX-License-Identifier: GPL-2.012#include <linux/efi_embedded_fw.h>3#include <linux/property.h>4#include <linux/security.h>5#include <linux/vmalloc.h>67#include "fallback.h"8#include "firmware.h"910int firmware_fallback_platform(struct fw_priv *fw_priv)11{12const u8 *data;13size_t size;14int rc;1516if (!(fw_priv->opt_flags & FW_OPT_FALLBACK_PLATFORM))17return -ENOENT;1819rc = security_kernel_load_data(LOADING_FIRMWARE, true);20if (rc)21return rc;2223rc = efi_get_embedded_fw(fw_priv->fw_name, &data, &size);24if (rc)25return rc; /* rc == -ENOENT when the fw was not found */2627if (fw_priv->data && size > fw_priv->allocated_size)28return -ENOMEM;2930rc = security_kernel_post_load_data((u8 *)data, size, LOADING_FIRMWARE,31"platform");32if (rc)33return rc;3435if (!fw_priv->data)36fw_priv->data = vmalloc(size);37if (!fw_priv->data)38return -ENOMEM;3940memcpy(fw_priv->data, data, size);41fw_priv->size = size;42fw_state_done(fw_priv);43return 0;44}454647