lkml.org 
[lkml]   [2009]   [Sep]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 35/72] Blackfin: fix MPU handling of invalid memory accesses
    Date
    From: Graf Yang <graf.yang@analog.com>

    The protect_page() function was incorrectly setting up the hardware tables
    based on possible access capabilities rather than the actual requested
    values. This means we would grant more access to mmap-ed pages than we
    should have. Once we fix this, we need to tweak the signal generated by
    such accesses to aline ourselves with other ports. This allows the LTP
    mmap0{5,6,7} cases to run properly.

    Signed-off-by: Graf Yang <graf.yang@analog.com>
    Signed-off-by: Mike Frysinger <vapier@gentoo.org>
    ---
    arch/blackfin/include/asm/mmu_context.h | 6 +++---
    arch/blackfin/kernel/traps.c | 2 +-
    2 files changed, 4 insertions(+), 4 deletions(-)

    diff --git a/arch/blackfin/include/asm/mmu_context.h b/arch/blackfin/include/asm/mmu_context.h
    index 944e29f..040410b 100644
    --- a/arch/blackfin/include/asm/mmu_context.h
    +++ b/arch/blackfin/include/asm/mmu_context.h
    @@ -127,17 +127,17 @@ static inline void protect_page(struct mm_struct *mm, unsigned long addr,
    unsigned long idx = page >> 5;
    unsigned long bit = 1 << (page & 31);

    - if (flags & VM_MAYREAD)
    + if (flags & VM_READ)
    mask[idx] |= bit;
    else
    mask[idx] &= ~bit;
    mask += page_mask_nelts;
    - if (flags & VM_MAYWRITE)
    + if (flags & VM_WRITE)
    mask[idx] |= bit;
    else
    mask[idx] &= ~bit;
    mask += page_mask_nelts;
    - if (flags & VM_MAYEXEC)
    + if (flags & VM_EXEC)
    mask[idx] |= bit;
    else
    mask[idx] &= ~bit;
    diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c
    index 18c6cd4..644e35e 100644
    --- a/arch/blackfin/kernel/traps.c
    +++ b/arch/blackfin/kernel/traps.c
    @@ -411,7 +411,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
    /* 0x23 - Data CPLB protection violation, handled here */
    case VEC_CPLB_VL:
    info.si_code = ILL_CPLB_VI;
    - sig = SIGBUS;
    + sig = SIGSEGV;
    strerror = KERN_NOTICE EXC_0x23(KERN_NOTICE);
    CHK_DEBUGGER_TRAP_MAYBE();
    break;
    --
    1.6.4.2


    \
     
     \ /
      Last update: 2009-09-14 22:45    [W:8.063 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site