UPSTREAM: 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)
committerDmitry Shmidt <dimitrysh@google.com>
Tue, 31 May 2016 20:25:56 +0000 (13:25 -0700)
commitef55b4532be92094b0a1f03f2e1a50d4b49a30ae
tree728b24bef9906ca57c04d779d906eac556c9f6ab
parentfd2e341b4741a29e04f2010ced14edf5d2aa3ee0
UPSTREAM: 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.

Change-Id: I9ad3d8bfd91e5fdc6434b1be6c3062dfec193176
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>
arch/arm64/kernel/module.c