• Maria Yu's avatar
    arm64: module: Fix PLT counting when CONFIG_RANDOMIZE_BASE=n · d3568644
    Maria Yu authored
    The counting of module PLTs has been broken when CONFIG_RANDOMIZE_BASE=n
    since commit:
    
      3e35d303 ("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: 3e35d303 ("arm64: module: rework module VA range selection")
    Signed-off-by: default avatarMaria Yu <quic_aiquny@quicinc.com>
    Cc: <stable@vger.kernel.org> # 6.5.x
    Acked-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Fixes: 3e35d303 ("arm64: module: rework module VA range selection")
    Reviewed-by: default avatarMark Rutland <mark.rutland@arm.com>
    Link: https://lore.kernel.org/r/20231024010954.6768-1-quic_aiquny@quicinc.comSigned-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    d3568644
module-plts.c 10.6 KB