hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/firmware/efi/efi.c
....@@ -385,8 +385,8 @@
385385 efi_kobj = kobject_create_and_add("efi", firmware_kobj);
386386 if (!efi_kobj) {
387387 pr_err("efi: Firmware registration failed.\n");
388
- destroy_workqueue(efi_rts_wq);
389
- return -ENOMEM;
388
+ error = -ENOMEM;
389
+ goto err_destroy_wq;
390390 }
391391
392392 if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE |
....@@ -429,7 +429,10 @@
429429 generic_ops_unregister();
430430 err_put:
431431 kobject_put(efi_kobj);
432
- destroy_workqueue(efi_rts_wq);
432
+err_destroy_wq:
433
+ if (efi_rts_wq)
434
+ destroy_workqueue(efi_rts_wq);
435
+
433436 return error;
434437 }
435438
....@@ -590,7 +593,7 @@
590593
591594 seed = early_memremap(efi_rng_seed, sizeof(*seed));
592595 if (seed != NULL) {
593
- size = min(seed->size, EFI_RANDOM_SEED_SIZE);
596
+ size = min_t(u32, seed->size, SZ_1K); // sanity check
594597 early_memunmap(seed, sizeof(*seed));
595598 } else {
596599 pr_err("Could not map UEFI random seed!\n");
....@@ -599,8 +602,8 @@
599602 seed = early_memremap(efi_rng_seed,
600603 sizeof(*seed) + size);
601604 if (seed != NULL) {
602
- pr_notice("seeding entropy pool\n");
603605 add_bootloader_randomness(seed->bits, size);
606
+ memzero_explicit(seed->bits, size);
604607 early_memunmap(seed, sizeof(*seed) + size);
605608 } else {
606609 pr_err("Could not map UEFI random seed!\n");
....@@ -947,6 +950,8 @@
947950 /* first try to find a slot in an existing linked list entry */
948951 for (prsv = efi_memreserve_root->next; prsv; ) {
949952 rsv = memremap(prsv, sizeof(*rsv), MEMREMAP_WB);
953
+ if (!rsv)
954
+ return -ENOMEM;
950955 index = atomic_fetch_add_unless(&rsv->count, 1, rsv->size);
951956 if (index < rsv->size) {
952957 rsv->entry[index].base = addr;