Patch "efi: fix potential NULL deref in efi_mem_reserve_persistent" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    efi: fix potential NULL deref in efi_mem_reserve_persistent

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     efi-fix-potential-null-deref-in-efi_mem_reserve_pers.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 4f98fa3b85a2debdd8cb2f3bc17a03311abdaef9
Author: Anton Gusev <aagusev@xxxxxxxxx>
Date:   Fri Feb 3 16:22:13 2023 +0300

    efi: fix potential NULL deref in efi_mem_reserve_persistent
    
    [ Upstream commit 966d47e1f27c45507c5df82b2a2157e5a4fd3909 ]
    
    When iterating on a linked list, a result of memremap is dereferenced
    without checking it for NULL.
    
    This patch adds a check that falls back on allocating a new page in
    case memremap doesn't succeed.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 18df7577adae ("efi/memreserve: deal with memreserve entries in unmapped memory")
    Signed-off-by: Anton Gusev <aagusev@xxxxxxxxx>
    [ardb: return -ENOMEM instead of breaking out of the loop]
    Signed-off-by: Ard Biesheuvel <ardb@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
index a2765d668856..332739f3eded 100644
--- a/drivers/firmware/efi/efi.c
+++ b/drivers/firmware/efi/efi.c
@@ -950,6 +950,8 @@ int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size)
 	/* first try to find a slot in an existing linked list entry */
 	for (prsv = efi_memreserve_root->next; prsv; ) {
 		rsv = memremap(prsv, sizeof(*rsv), MEMREMAP_WB);
+		if (!rsv)
+			return -ENOMEM;
 		index = atomic_fetch_add_unless(&rsv->count, 1, rsv->size);
 		if (index < rsv->size) {
 			rsv->entry[index].base = addr;



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux