diff options
author | Maria Yu <quic_aiquny@quicinc.com> | 2023-10-24 09:09:54 +0800 |
---|---|---|
committer | Catalin Marinas <catalin.marinas@arm.com> | 2023-10-24 15:12:48 +0100 |
commit | d35686444fc80950c731e33a2f6ad4a55822be9b (patch) | |
tree | 316f827e2bd52855952c803abf4dc536f10ca252 /drivers/perf/arm-cmn.c | |
parent | c54e52f84d7aa590e90e1f73f462517ac40051e1 (diff) | |
download | linux-d35686444fc80950c731e33a2f6ad4a55822be9b.tar.gz linux-d35686444fc80950c731e33a2f6ad4a55822be9b.tar.bz2 linux-d35686444fc80950c731e33a2f6ad4a55822be9b.zip |
arm64: module: Fix PLT counting when CONFIG_RANDOMIZE_BASE=n
The counting of module PLTs has been broken when CONFIG_RANDOMIZE_BASE=n
since commit:
3e35d303ab7d22c4 ("arm64: module: rework module VA range selection")
Prior to that commit, when CONFIG_RANDOMIZE_BASE=n, the kernel image and
all modules were placed within a 128M region, and no PLTs were necessary
for B or BL. Hence count_plts() and partition_branch_plt_relas() skipped
handling B and BL when CONFIG_RANDOMIZE_BASE=n.
After that commit, modules can be placed anywhere within a 2G window
regardless of CONFIG_RANDOMIZE_BASE, and hence PLTs may be necessary for
B and BL even when CONFIG_RANDOMIZE_BASE=n. Unfortunately that commit
failed to update count_plts() and partition_branch_plt_relas()
accordingly.
Due to this, module_emit_plt_entry() may fail if an insufficient number
of PLT entries have been reserved, resulting in modules failing to load
with -ENOEXEC.
Fix this by counting PLTs regardless of CONFIG_RANDOMIZE_BASE in
count_plts() and partition_branch_plt_relas().
Fixes: 3e35d303ab7d ("arm64: module: rework module VA range selection")
Signed-off-by: Maria Yu <quic_aiquny@quicinc.com>
Cc: <stable@vger.kernel.org> # 6.5.x
Acked-by: Ard Biesheuvel <ardb@kernel.org>
Fixes: 3e35d303ab7d ("arm64: module: rework module VA range selection")
Reviewed-by: Mark Rutland <mark.rutland@arm.com>
Link: https://lore.kernel.org/r/20231024010954.6768-1-quic_aiquny@quicinc.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'drivers/perf/arm-cmn.c')
0 files changed, 0 insertions, 0 deletions