forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-10-09 244b2c5ca8b14627e4a17755e5922221e121c771
kernel/drivers/firmware/efi/efi.c
....@@ -66,7 +66,7 @@
6666
6767 struct workqueue_struct *efi_rts_wq;
6868
69
-static bool disable_runtime = IS_ENABLED(CONFIG_PREEMPT_RT);
69
+static bool disable_runtime;
7070 static int __init setup_noefi(char *arg)
7171 {
7272 disable_runtime = true;
....@@ -96,9 +96,6 @@
9696
9797 if (parse_option_str(str, "noruntime"))
9898 disable_runtime = true;
99
-
100
- if (parse_option_str(str, "runtime"))
101
- disable_runtime = false;
10299
103100 if (parse_option_str(str, "nosoftreserve"))
104101 set_bit(EFI_MEM_NO_SOFT_RESERVE, &efi.flags);
....@@ -388,8 +385,8 @@
388385 efi_kobj = kobject_create_and_add("efi", firmware_kobj);
389386 if (!efi_kobj) {
390387 pr_err("efi: Firmware registration failed.\n");
391
- destroy_workqueue(efi_rts_wq);
392
- return -ENOMEM;
388
+ error = -ENOMEM;
389
+ goto err_destroy_wq;
393390 }
394391
395392 if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE |
....@@ -432,7 +429,10 @@
432429 generic_ops_unregister();
433430 err_put:
434431 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
+
436436 return error;
437437 }
438438
....@@ -593,7 +593,7 @@
593593
594594 seed = early_memremap(efi_rng_seed, sizeof(*seed));
595595 if (seed != NULL) {
596
- size = min(seed->size, EFI_RANDOM_SEED_SIZE);
596
+ size = min_t(u32, seed->size, SZ_1K); // sanity check
597597 early_memunmap(seed, sizeof(*seed));
598598 } else {
599599 pr_err("Could not map UEFI random seed!\n");
....@@ -602,8 +602,8 @@
602602 seed = early_memremap(efi_rng_seed,
603603 sizeof(*seed) + size);
604604 if (seed != NULL) {
605
- pr_notice("seeding entropy pool\n");
606605 add_bootloader_randomness(seed->bits, size);
606
+ memzero_explicit(seed->bits, size);
607607 early_memunmap(seed, sizeof(*seed) + size);
608608 } else {
609609 pr_err("Could not map UEFI random seed!\n");
....@@ -950,6 +950,8 @@
950950 /* first try to find a slot in an existing linked list entry */
951951 for (prsv = efi_memreserve_root->next; prsv; ) {
952952 rsv = memremap(prsv, sizeof(*rsv), MEMREMAP_WB);
953
+ if (!rsv)
954
+ return -ENOMEM;
953955 index = atomic_fetch_add_unless(&rsv->count, 1, rsv->size);
954956 if (index < rsv->size) {
955957 rsv->entry[index].base = addr;