arm64: module: fix relocation of movz instruction with negative immediate
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Tue, 5 Jan 2016 09:18:51 +0000 (10:18 +0100)
committerAlex Shi <alex.shi@linaro.org>
Wed, 11 May 2016 09:01:07 +0000 (17:01 +0800)
commit12037cecc2cfc56e01851c0fbf605be9e05bbe95
tree94b9fe5cf8aab3602da49aa8e04fae9bc69b86bc
parentd2b08280e2c1f40fa209aaaaf86c9b730de28204
arm64: module: fix relocation of movz instruction with negative immediate

The test whether a movz instruction with a signed immediate should be
turned into a movn instruction (i.e., when the immediate is negative)
is flawed, since the value of imm is always positive. Also, the
subsequent bounds check is incorrect since the limit update never
executes, due to the fact that the imm_type comparison will always be
false for negative signed immediates.

Let's fix this by performing the sign test on sval directly, and
replacing the bounds check with a simple comparison against U16_MAX.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
[will: tidied up use of sval, renamed MOVK enum value to MOVKZ]
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit b24a557527f97ad88619d5bd4c8017c635056d69)
Signed-off-by: Alex Shi <alex.shi@linaro.org>
arch/arm64/kernel/module.c