mm: arm: fix unmatched pte_offset_map/pte_unmap error [1/1]
authorHanjie Lin <hanjie.lin@amlogic.com>
Thu, 16 May 2019 05:38:20 +0000 (13:38 +0800)
committerNick Xie <nick@khadas.com>
Mon, 5 Aug 2019 06:33:21 +0000 (14:33 +0800)
PD#TV-5777

Problem:
[CVTE][T972][9.0][System]: PT190004-1300: Appear auto reboot exception
during downloading Facebook app.
get_user_pfn() may caused unmatched pte_offset_map/pte_unmap call, then
may cause bad task preempt_count and subsequently panic.

Solution:
add matched pte_offset_map/pte_unmap

Verify:
tl1

Change-Id: I98240b443b8a0fae89d0ee93701eb1bfdce51b82
Signed-off-by: Hanjie Lin <hanjie.lin@amlogic.com>
arch/arm/mm/fault.c

index f94ac8c..4fb1399 100644 (file)
@@ -153,8 +153,10 @@ static long get_user_pfn(struct mm_struct *mm, unsigned long addr)
                        break;
 
                pte = pte_offset_map(pmd, addr);
-               if (pte_none(*pte))
+               if (pte_none(*pte)) {
+                       pte_unmap(pte);
                        break;
+               }
 
                pfn = pte_pfn(*pte);
                pte_unmap(pte);