• Robert Jarzmik's avatar
    ARM: 8431/1: fix alignement of __bug_table section entries · a4a5a737
    Robert Jarzmik authored
    On old ARM chips, unaligned accesses to memory are not trapped and
    fixed.  On module load, symbols are relocated, and the relocation of
    __bug_table symbols is done on a u32 basis. Yet the section is not
    aligned to a multiple of 4 address, but to a multiple of 2.
    
    This triggers an Oops on pxa architecture, where address 0xbf0021ea
    is the first relocation in the __bug_table section :
      apply_relocate(): pxa3xx_nand: section 13 reloc 0 sym ''
      Unable to handle kernel paging request at virtual address bf0021ea
      pgd = e1cd0000
      [bf0021ea] *pgd=c1cce851, *pte=c1cde04f, *ppte=c1cde01f
      Internal error: Oops: 23 [#1] ARM
      Modules linked in:
      CPU: 0 PID: 606 Comm: insmod Not tainted 4.2.0-rc8-next-20150828-cm-x300+ #887
      Hardware name: CM-X300 module
      task: e1c68700 ti: e1c3e000 task.ti: e1c3e000
      PC is at apply_relocate+0x2f4/0x3d4
      LR is at 0xbf0021ea
      pc : [<c000e7c8>]    lr : [<bf0021ea>]    psr: 80000013
      sp : e1c3fe30  ip : 60000013  fp : e49e8c60
      r10: e49e8fa8  r9 : 00000000  r8 : e49e7c58
      r7 : e49e8c38  r6 : e49e8a58  r5 : e49e8920  r4 : e49e8918
      r3 : bf0021ea  r2 : bf007034  r1 : 00000000  r0 : bf000000
      Flags: Nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
      Control: 0000397f  Table: c1cd0018  DAC: 00000051
      Process insmod (pid: 606, stack limit = 0xe1c3e198)
      [<c000e7c8>] (apply_relocate) from [<c005ce5c>] (load_module+0x1248/0x1f5c)
      [<c005ce5c>] (load_module) from [<c005dc54>] (SyS_init_module+0xe4/0x170)
      [<c005dc54>] (SyS_init_module) from [<c000a420>] (ret_fast_syscall+0x0/0x38)
    
    Fix this by ensuring entries in __bug_table are all aligned to at least
    of multiple of 4. This transforms a module section  __bug_table as :
    -   [12] __bug_table       PROGBITS        00000000 002232 000018 00   A  0   0  1
    +   [12] __bug_table       PROGBITS        00000000 002232 000018 00   A  0   0  4
    Signed-off-by: default avatarRobert Jarzmik <robert.jarzmik@free.fr>
    Reviewed-by: default avatarDave Martin <Dave.Martin@arm.com>
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    a4a5a737
bug.h 2.5 KB