.. | .. |
---|
385 | 385 | efi_kobj = kobject_create_and_add("efi", firmware_kobj); |
---|
386 | 386 | if (!efi_kobj) { |
---|
387 | 387 | pr_err("efi: Firmware registration failed.\n"); |
---|
388 | | - destroy_workqueue(efi_rts_wq); |
---|
389 | | - return -ENOMEM; |
---|
| 388 | + error = -ENOMEM; |
---|
| 389 | + goto err_destroy_wq; |
---|
390 | 390 | } |
---|
391 | 391 | |
---|
392 | 392 | if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE | |
---|
.. | .. |
---|
429 | 429 | generic_ops_unregister(); |
---|
430 | 430 | err_put: |
---|
431 | 431 | 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 | + |
---|
433 | 436 | return error; |
---|
434 | 437 | } |
---|
435 | 438 | |
---|
.. | .. |
---|
590 | 593 | |
---|
591 | 594 | seed = early_memremap(efi_rng_seed, sizeof(*seed)); |
---|
592 | 595 | if (seed != NULL) { |
---|
593 | | - size = min(seed->size, EFI_RANDOM_SEED_SIZE); |
---|
| 596 | + size = min_t(u32, seed->size, SZ_1K); // sanity check |
---|
594 | 597 | early_memunmap(seed, sizeof(*seed)); |
---|
595 | 598 | } else { |
---|
596 | 599 | pr_err("Could not map UEFI random seed!\n"); |
---|
.. | .. |
---|
599 | 602 | seed = early_memremap(efi_rng_seed, |
---|
600 | 603 | sizeof(*seed) + size); |
---|
601 | 604 | if (seed != NULL) { |
---|
602 | | - pr_notice("seeding entropy pool\n"); |
---|
603 | 605 | add_bootloader_randomness(seed->bits, size); |
---|
| 606 | + memzero_explicit(seed->bits, size); |
---|
604 | 607 | early_memunmap(seed, sizeof(*seed) + size); |
---|
605 | 608 | } else { |
---|
606 | 609 | pr_err("Could not map UEFI random seed!\n"); |
---|
.. | .. |
---|
947 | 950 | /* first try to find a slot in an existing linked list entry */ |
---|
948 | 951 | for (prsv = efi_memreserve_root->next; prsv; ) { |
---|
949 | 952 | rsv = memremap(prsv, sizeof(*rsv), MEMREMAP_WB); |
---|
| 953 | + if (!rsv) |
---|
| 954 | + return -ENOMEM; |
---|
950 | 955 | index = atomic_fetch_add_unless(&rsv->count, 1, rsv->size); |
---|
951 | 956 | if (index < rsv->size) { |
---|
952 | 957 | rsv->entry[index].base = addr; |
---|