From: Mark Yao Date: Fri, 28 Apr 2017 07:59:23 +0000 (+0800) Subject: video/rockchip: rga2: do some check for user memory X-Git-Tag: release-20171130_firefly~4^2~702 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=68093164542c8e2e857a0edda55721ef968fb808;p=firefly-linux-kernel-4.4.55.git video/rockchip: rga2: do some check for user memory Change-Id: Idbf3d918f127ad53e2d05e56fadcf0b7a4fea2b4 Signed-off-by: Mark Yao --- diff --git a/drivers/video/rockchip/rga2/rga2_mmu_info.c b/drivers/video/rockchip/rga2/rga2_mmu_info.c index d77a95745194..c22419f211e4 100644 --- a/drivers/video/rockchip/rga2/rga2_mmu_info.c +++ b/drivers/video/rockchip/rga2/rga2_mmu_info.c @@ -339,17 +339,20 @@ static int rga2_MapUserMemory(struct page **pages, uint32_t *pageTable, break; } pgd = pgd_offset(current->mm, (Memory + i) << PAGE_SHIFT); - if (pgd_val(*pgd) == 0) { + if (pgd_none(*pgd) || unlikely(pgd_bad(*pgd))) { + pr_err("RGA2 failed to get pgd\n"); status = RGA2_OUT_OF_RESOURCES; break; } pud = pud_offset(pgd, (Memory + i) << PAGE_SHIFT); - if (!pud) { + if (pud_none(*pud) || unlikely(pud_bad(*pud))) { + pr_err("RGA2 failed to get pud\n"); status = RGA2_OUT_OF_RESOURCES; break; } pmd = pmd_offset(pud, (Memory + i) << PAGE_SHIFT); - if (!pmd) { + if (pmd_none(*pmd) || unlikely(pmd_bad(*pmd))) { + pr_err("RGA2 failed to get pmd\n"); status = RGA2_OUT_OF_RESOURCES; break; } @@ -357,6 +360,7 @@ static int rga2_MapUserMemory(struct page **pages, uint32_t *pageTable, (Memory + i) << PAGE_SHIFT, &ptl); if (!pte) { + pr_err("RGA2 failed to get pte\n"); pte_unmap_unlock(pte, ptl); status = RGA2_OUT_OF_RESOURCES; break;