| .. | .. |
|---|
| 66 | 66 | |
|---|
| 67 | 67 | struct workqueue_struct *efi_rts_wq; |
|---|
| 68 | 68 | |
|---|
| 69 | | -static bool disable_runtime = IS_ENABLED(CONFIG_PREEMPT_RT); |
|---|
| 69 | +static bool disable_runtime; |
|---|
| 70 | 70 | static int __init setup_noefi(char *arg) |
|---|
| 71 | 71 | { |
|---|
| 72 | 72 | disable_runtime = true; |
|---|
| .. | .. |
|---|
| 96 | 96 | |
|---|
| 97 | 97 | if (parse_option_str(str, "noruntime")) |
|---|
| 98 | 98 | disable_runtime = true; |
|---|
| 99 | | - |
|---|
| 100 | | - if (parse_option_str(str, "runtime")) |
|---|
| 101 | | - disable_runtime = false; |
|---|
| 102 | 99 | |
|---|
| 103 | 100 | if (parse_option_str(str, "nosoftreserve")) |
|---|
| 104 | 101 | set_bit(EFI_MEM_NO_SOFT_RESERVE, &efi.flags); |
|---|
| .. | .. |
|---|
| 388 | 385 | efi_kobj = kobject_create_and_add("efi", firmware_kobj); |
|---|
| 389 | 386 | if (!efi_kobj) { |
|---|
| 390 | 387 | pr_err("efi: Firmware registration failed.\n"); |
|---|
| 391 | | - destroy_workqueue(efi_rts_wq); |
|---|
| 392 | | - return -ENOMEM; |
|---|
| 388 | + error = -ENOMEM; |
|---|
| 389 | + goto err_destroy_wq; |
|---|
| 393 | 390 | } |
|---|
| 394 | 391 | |
|---|
| 395 | 392 | if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE | |
|---|
| .. | .. |
|---|
| 432 | 429 | generic_ops_unregister(); |
|---|
| 433 | 430 | err_put: |
|---|
| 434 | 431 | kobject_put(efi_kobj); |
|---|
| 435 | | - destroy_workqueue(efi_rts_wq); |
|---|
| 432 | +err_destroy_wq: |
|---|
| 433 | + if (efi_rts_wq) |
|---|
| 434 | + destroy_workqueue(efi_rts_wq); |
|---|
| 435 | + |
|---|
| 436 | 436 | return error; |
|---|
| 437 | 437 | } |
|---|
| 438 | 438 | |
|---|
| .. | .. |
|---|
| 593 | 593 | |
|---|
| 594 | 594 | seed = early_memremap(efi_rng_seed, sizeof(*seed)); |
|---|
| 595 | 595 | if (seed != NULL) { |
|---|
| 596 | | - size = min(seed->size, EFI_RANDOM_SEED_SIZE); |
|---|
| 596 | + size = min_t(u32, seed->size, SZ_1K); // sanity check |
|---|
| 597 | 597 | early_memunmap(seed, sizeof(*seed)); |
|---|
| 598 | 598 | } else { |
|---|
| 599 | 599 | pr_err("Could not map UEFI random seed!\n"); |
|---|
| .. | .. |
|---|
| 602 | 602 | seed = early_memremap(efi_rng_seed, |
|---|
| 603 | 603 | sizeof(*seed) + size); |
|---|
| 604 | 604 | if (seed != NULL) { |
|---|
| 605 | | - pr_notice("seeding entropy pool\n"); |
|---|
| 606 | 605 | add_bootloader_randomness(seed->bits, size); |
|---|
| 606 | + memzero_explicit(seed->bits, size); |
|---|
| 607 | 607 | early_memunmap(seed, sizeof(*seed) + size); |
|---|
| 608 | 608 | } else { |
|---|
| 609 | 609 | pr_err("Could not map UEFI random seed!\n"); |
|---|
| .. | .. |
|---|
| 950 | 950 | /* first try to find a slot in an existing linked list entry */ |
|---|
| 951 | 951 | for (prsv = efi_memreserve_root->next; prsv; ) { |
|---|
| 952 | 952 | rsv = memremap(prsv, sizeof(*rsv), MEMREMAP_WB); |
|---|
| 953 | + if (!rsv) |
|---|
| 954 | + return -ENOMEM; |
|---|
| 953 | 955 | index = atomic_fetch_add_unless(&rsv->count, 1, rsv->size); |
|---|
| 954 | 956 | if (index < rsv->size) { |
|---|
| 955 | 957 | rsv->entry[index].base = addr; |
|---|