Patch "mm/memory.c: fix potential pte_unmap_unlock pte error" 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

    mm/memory.c: fix potential pte_unmap_unlock pte error

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:
     mm-memory.c-fix-potential-pte_unmap_unlock-pte-error.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 dca2e563bc6af35211124e62039fe07e6b5f7c54
Author: Miaohe Lin <linmiaohe@xxxxxxxxxx>
Date:   Wed Feb 24 12:04:33 2021 -0800

    mm/memory.c: fix potential pte_unmap_unlock pte error
    
    [ Upstream commit 90a3e375d324b2255b83e3dd29e99e2b05d82aaf ]
    
    Since commit 42e4089c7890 ("x86/speculation/l1tf: Disallow non privileged
    high MMIO PROT_NONE mappings"), when the first pfn modify is not allowed,
    we would break the loop with pte unchanged.  Then the wrong pte - 1 would
    be passed to pte_unmap_unlock.
    
    Andi said:
    
     "While the fix is correct, I'm not sure if it actually is a real bug.
      Is there any architecture that would do something else than unlocking
      the underlying page? If it's just the underlying page then it should
      be always the same page, so no bug"
    
    Link: https://lkml.kernel.org/r/20210109080118.20885-1-linmiaohe@xxxxxxxxxx
    Fixes: 42e4089c789 ("x86/speculation/l1tf: Disallow non privileged high MMIO PROT_NONE mappings")
    Signed-off-by: Hongxiang Lou <louhongxiang@xxxxxxxxxx>
    Signed-off-by: Miaohe Lin <linmiaohe@xxxxxxxxxx>
    Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
    Cc: Dave Hansen <dave.hansen@xxxxxxxxx>
    Cc: Andi Kleen <ak@xxxxxxxxxxxxxxx>
    Cc: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>
    Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/mm/memory.c b/mm/memory.c
index eb5722027160a..f9522481f95cd 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -2165,11 +2165,11 @@ static int remap_pte_range(struct mm_struct *mm, pmd_t *pmd,
 			unsigned long addr, unsigned long end,
 			unsigned long pfn, pgprot_t prot)
 {
-	pte_t *pte;
+	pte_t *pte, *mapped_pte;
 	spinlock_t *ptl;
 	int err = 0;
 
-	pte = pte_alloc_map_lock(mm, pmd, addr, &ptl);
+	mapped_pte = pte = pte_alloc_map_lock(mm, pmd, addr, &ptl);
 	if (!pte)
 		return -ENOMEM;
 	arch_enter_lazy_mmu_mode();
@@ -2183,7 +2183,7 @@ static int remap_pte_range(struct mm_struct *mm, pmd_t *pmd,
 		pfn++;
 	} while (pte++, addr += PAGE_SIZE, addr != end);
 	arch_leave_lazy_mmu_mode();
-	pte_unmap_unlock(pte - 1, ptl);
+	pte_unmap_unlock(mapped_pte, ptl);
 	return err;
 }
 



[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