In rare transient cases, not yet made possible, pte_offset_map() and
pte_offset_map_lock() may not find a page table: handle appropriately.

Signed-off-by: Hugh Dickins <hu...@google.com>
---
 arch/microblaze/kernel/signal.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/arch/microblaze/kernel/signal.c b/arch/microblaze/kernel/signal.c
index c3aebec71c0c..c78a0ff48066 100644
--- a/arch/microblaze/kernel/signal.c
+++ b/arch/microblaze/kernel/signal.c
@@ -194,7 +194,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t 
*set,
 
        preempt_disable();
        ptep = pte_offset_map(pmdp, address);
-       if (pte_present(*ptep)) {
+       if (ptep && pte_present(*ptep)) {
                address = (unsigned long) page_address(pte_page(*ptep));
                /* MS: I need add offset in page */
                address += ((unsigned long)frame->tramp) & ~PAGE_MASK;
@@ -203,7 +203,8 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t 
*set,
                invalidate_icache_range(address, address + 8);
                flush_dcache_range(address, address + 8);
        }
-       pte_unmap(ptep);
+       if (ptep)
+               pte_unmap(ptep);
        preempt_enable();
        if (err)
                return -EFAULT;
-- 
2.35.3

Reply via email to