|
@@ -113,6 +113,15 @@ static int __init setup_add_efi_memmap(char *arg)
|
|
|
}
|
|
|
early_param("add_efi_memmap", setup_add_efi_memmap);
|
|
|
|
|
|
+static bool efi_no_storage_paranoia;
|
|
|
+
|
|
|
+static int __init setup_storage_paranoia(char *arg)
|
|
|
+{
|
|
|
+ efi_no_storage_paranoia = true;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+early_param("efi_no_storage_paranoia", setup_storage_paranoia);
|
|
|
+
|
|
|
|
|
|
static efi_status_t virt_efi_get_time(efi_time_t *tm, efi_time_cap_t *tc)
|
|
|
{
|
|
@@ -1137,7 +1146,10 @@ efi_status_t efi_query_variable_store(u32 attributes, unsigned long size)
|
|
|
*/
|
|
|
|
|
|
if (!storage_size || size > remaining_size ||
|
|
|
- (max_size && size > max_size) ||
|
|
|
+ (max_size && size > max_size))
|
|
|
+ return EFI_OUT_OF_RESOURCES;
|
|
|
+
|
|
|
+ if (!efi_no_storage_paranoia &&
|
|
|
((active_size + size + VAR_METADATA_SIZE > storage_size / 2) &&
|
|
|
(remaining_size - size < storage_size / 2)))
|
|
|
return EFI_OUT_OF_RESOURCES;
|