]> git.baikalelectronics.ru Git - kernel.git/commit
arm64/alternatives: don't patch up internal branches
authorArd Biesheuvel <ardb@kernel.org>
Thu, 9 Jul 2020 12:59:53 +0000 (15:59 +0300)
committerWill Deacon <will@kernel.org>
Thu, 9 Jul 2020 13:57:59 +0000 (14:57 +0100)
commitd2a06ea48c42ceb7d71b72f3cfef7865cb2443fb
tree924de1efea31702de541c915cdab38d2d88e9798
parent99fe2d614315fb338bda47bca7b1aeb3e34dc030
arm64/alternatives: don't patch up internal branches

Commit f0702046de6e ("arm64/alternatives: use subsections for replacement
sequences") moved the alternatives replacement sequences into subsections,
in order to keep the as close as possible to the code that they replace.

Unfortunately, this broke the logic in branch_insn_requires_update,
which assumed that any branch into kernel executable code was a branch
that required updating, which is no longer the case now that the code
sequences that are patched in are in the same section as the patch site
itself.

So the only way to discriminate branches that require updating and ones
that don't is to check whether the branch targets the replacement sequence
itself, and so we can drop the call to kernel_text_address() entirely.

Fixes: f0702046de6e ("arm64/alternatives: use subsections for replacement sequences")
Reported-by: Alexandru Elisei <alexandru.elisei@arm.com>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Tested-by: Alexandru Elisei <alexandru.elisei@arm.com>
Link: https://lore.kernel.org/r/20200709125953.30918-1-ardb@kernel.org
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/kernel/alternative.c