lkml.org 
[lkml]   [2019]   [Dec]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 074/219] x86/mm: Use the correct function type for native_set_fixmap()
    Date
    From: Sami Tolvanen <samitolvanen@google.com>

    [ Upstream commit f53e2cd0b8ab7d9e390414470bdbd830f660133f ]

    We call native_set_fixmap indirectly through the function pointer
    struct pv_mmu_ops::set_fixmap, which expects the first parameter to be
    'unsigned' instead of 'enum fixed_addresses'. This patch changes the
    function type for native_set_fixmap to match the pointer, which fixes
    indirect call mismatches with Control-Flow Integrity (CFI) checking.

    Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: H . Peter Anvin <hpa@zytor.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Rik van Riel <riel@surriel.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lkml.kernel.org/r/20190913211402.193018-1-samitolvanen@google.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/x86/include/asm/fixmap.h | 2 +-
    arch/x86/mm/pgtable.c | 4 ++--
    2 files changed, 3 insertions(+), 3 deletions(-)

    diff --git a/arch/x86/include/asm/fixmap.h b/arch/x86/include/asm/fixmap.h
    index 6390bd8c141b..5e12b2319d7a 100644
    --- a/arch/x86/include/asm/fixmap.h
    +++ b/arch/x86/include/asm/fixmap.h
    @@ -159,7 +159,7 @@ extern pte_t *kmap_pte;
    extern pte_t *pkmap_page_table;

    void __native_set_fixmap(enum fixed_addresses idx, pte_t pte);
    -void native_set_fixmap(enum fixed_addresses idx,
    +void native_set_fixmap(unsigned /* enum fixed_addresses */ idx,
    phys_addr_t phys, pgprot_t flags);

    #ifndef CONFIG_PARAVIRT
    diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c
    index 59274e2c1ac4..bf52106ab9c4 100644
    --- a/arch/x86/mm/pgtable.c
    +++ b/arch/x86/mm/pgtable.c
    @@ -660,8 +660,8 @@ void __native_set_fixmap(enum fixed_addresses idx, pte_t pte)
    fixmaps_set++;
    }

    -void native_set_fixmap(enum fixed_addresses idx, phys_addr_t phys,
    - pgprot_t flags)
    +void native_set_fixmap(unsigned /* enum fixed_addresses */ idx,
    + phys_addr_t phys, pgprot_t flags)
    {
    /* Sanitize 'prot' against any unsupported bits: */
    pgprot_val(flags) &= __default_kernel_pte_mask;
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-12-29 18:30    [W:4.303 / U:0.192 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site