arm64/module: deal with ambiguity in PRELxx relocation ranges
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Thu, 23 May 2019 10:38:54 +0000 (11:38 +0100)
committerWill Deacon <will.deacon@arm.com>
Thu, 23 May 2019 14:34:04 +0000 (15:34 +0100)
commit1cf24a2cc3fd40942b0f9e6199aaec579e89a832
treeb7ac77f874e0c0e4d8c246ef90ebfe70bf5c12cf
parent8212688600edcb4a147ab7e4634c448938f9121a
arm64/module: deal with ambiguity in PRELxx relocation ranges

The R_AARCH64_PREL16 and R_AARCH64_PREL32 relocations are
documented as permitting a range of [-2^15 .. 2^16), resp.
[-2^31 .. 2^32). It is also documented that this means we
cannot detect overflow in some cases, which is bad.

Since we always interpret the targets of these relocations as
signed quantities (e.g., in the ksymtab handling code), let's
tighten the overflow checks so that targets that are out of
range for our signed interpretation of the relocated quantity
get flagged.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm64/kernel/module.c