summaryrefslogtreecommitdiff
path: root/arch/mips/kernel/module-rela.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-04-05 02:53:26 +0300
committerLinus Torvalds <torvalds@linux-foundation.org>2016-04-05 02:53:26 +0300
commitc3b1feb024d1a3997a3e689711283c38bb05075e (patch)
treee08830905016227812095b09ee4d64cea5a7024f /arch/mips/kernel/module-rela.c
parent93e2aeaca520743d66ec66b757db3a3e27936e91 (diff)
parent3d50a7fb42992545e45e10b068406546ea699489 (diff)
downloadlinux-c3b1feb024d1a3997a3e689711283c38bb05075e.tar.xz
Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
Pull MIPS fixes from Ralf Baechle: "This is the first round of MIPS fixes for 4.6: - Fix spelling mistakes all over arch/mips - Provide __bswapsi2 so XZ kernel compression will build with older GCC - ATH79 clock fixes. - Fix clock-rated copy-paste erros in ATH79 DTS. - Fix gisb-arb compatible string for 7435 BMIPS - Enable NAND and UBIFS support in CI20. - Fix BUG() assertion caused by inapropriate smp_processor_id() use. - Fix exception handling issues for the sake of debuggers - Fix the last remaining instance of irq_to_gpio in the db1xxx_ss PCMCIA code - Fix MSA unaligned load failures - Panic if kernel is configured for a not TLB-supported page size - Bail out on unsupported relocs in modules. - Partial fix for Qemu breakage after recent IPI rewrite - Wire up the preadv2 and pwrite2 syscalls - Fix the ar724x clock calculation" * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: MIPS: traps.c: Verify the ISA for microMIPS RDHWR emulation MIPS: BMIPS: Fix gisb-arb compatible string for 7435 MIPS: Bail on unsupported module relocs MIPS: dts: qca: ar9132_tl_wr1043nd_v1.dts: use "ref" for reference clock name MIPS: ath79: Fix the ar913x reference clock rate MIPS: ath79: Fix the ar724x clock calculation dt-bindings: clock: qca,ath79-pll: fix copy-paste typos MIPS: traps: Correct the SIGTRAP debug ABI in `do_watch' and `do_trap_or_bp' FIRMWARE: Broadcom: Fix grammar of warning messages in bcm47xx_sprom.c. MIPS: ci20: Enable NAND and UBIFS support in defconfig. MIPS: Fix misspellings in comments. MIPS: tlb-r4k: panic if the MMU doesn't support PAGE_SIZE MIPS: zboot: Remove copied source files on clean MIPS: zboot: Fix the build with XZ compression on older GCC versions MIPS: Wire up preadv2 and pwrite2 syscalls. MIPS: cpu_name_string: Use raw_smp_processor_id(). pcmcia: db1xxx_ss: fix last irq_to_gpio user MIPS: Fix MSA ld unaligned failure cases MIPS: Fix broken malta qemu
Diffstat (limited to 'arch/mips/kernel/module-rela.c')
-rw-r--r--arch/mips/kernel/module-rela.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/arch/mips/kernel/module-rela.c b/arch/mips/kernel/module-rela.c
index 2b70723071c3..9083d63b765c 100644
--- a/arch/mips/kernel/module-rela.c
+++ b/arch/mips/kernel/module-rela.c
@@ -109,9 +109,10 @@ int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab,
struct module *me)
{
Elf_Mips_Rela *rel = (void *) sechdrs[relsec].sh_addr;
+ int (*handler)(struct module *me, u32 *location, Elf_Addr v);
Elf_Sym *sym;
u32 *location;
- unsigned int i;
+ unsigned int i, type;
Elf_Addr v;
int res;
@@ -134,9 +135,21 @@ int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab,
return -ENOENT;
}
- v = sym->st_value + rel[i].r_addend;
+ type = ELF_MIPS_R_TYPE(rel[i]);
+
+ if (type < ARRAY_SIZE(reloc_handlers_rela))
+ handler = reloc_handlers_rela[type];
+ else
+ handler = NULL;
- res = reloc_handlers_rela[ELF_MIPS_R_TYPE(rel[i])](me, location, v);
+ if (!handler) {
+ pr_err("%s: Unknown relocation type %u\n",
+ me->name, type);
+ return -EINVAL;
+ }
+
+ v = sym->st_value + rel[i].r_addend;
+ res = handler(me, location, v);
if (res)
return res;
}