lkml.org 
[lkml]   [2022]   [Feb]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 03/13] powerpc: Use 'struct func_desc' instead of 'struct ppc64_opd_entry'
    Date
    'struct ppc64_opd_entry' is somehow redundant with 'struct func_desc',
    the later is more correct/complete as it includes the third
    field which is unused.

    So use 'struct func_desc' instead of 'struct ppc64_opd_entry'

    Reviewed-by: Kees Cook <keescook@chromium.org>
    Reviewed-by: Daniel Axtens <dja@axtens.net>
    Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    ---
    arch/powerpc/include/asm/sections.h | 4 ++--
    arch/powerpc/kernel/module_64.c | 10 +++++-----
    2 files changed, 7 insertions(+), 7 deletions(-)

    diff --git a/arch/powerpc/include/asm/sections.h b/arch/powerpc/include/asm/sections.h
    index 38f79e42bf3c..baca39f4c6d3 100644
    --- a/arch/powerpc/include/asm/sections.h
    +++ b/arch/powerpc/include/asm/sections.h
    @@ -61,10 +61,10 @@ static inline int overlaps_kernel_text(unsigned long start, unsigned long end)
    #undef dereference_function_descriptor
    static inline void *dereference_function_descriptor(void *ptr)
    {
    - struct ppc64_opd_entry *desc = ptr;
    + struct func_desc *desc = ptr;
    void *p;

    - if (!get_kernel_nofault(p, (void *)&desc->funcaddr))
    + if (!get_kernel_nofault(p, (void *)&desc->addr))
    ptr = p;
    return ptr;
    }
    diff --git a/arch/powerpc/kernel/module_64.c b/arch/powerpc/kernel/module_64.c
    index 6a45e6ddbe58..46e8eeb7c432 100644
    --- a/arch/powerpc/kernel/module_64.c
    +++ b/arch/powerpc/kernel/module_64.c
    @@ -64,19 +64,19 @@ static unsigned int local_entry_offset(const Elf64_Sym *sym)
    #else

    /* An address is address of the OPD entry, which contains address of fn. */
    -typedef struct ppc64_opd_entry func_desc_t;
    +typedef struct func_desc func_desc_t;

    static func_desc_t func_desc(unsigned long addr)
    {
    - return *(struct ppc64_opd_entry *)addr;
    + return *(struct func_desc *)addr;
    }
    static unsigned long func_addr(unsigned long addr)
    {
    - return func_desc(addr).funcaddr;
    + return func_desc(addr).addr;
    }
    static unsigned long stub_func_addr(func_desc_t func)
    {
    - return func.funcaddr;
    + return func.addr;
    }
    static unsigned int local_entry_offset(const Elf64_Sym *sym)
    {
    @@ -187,7 +187,7 @@ static int relacmp(const void *_x, const void *_y)
    static unsigned long get_stubs_size(const Elf64_Ehdr *hdr,
    const Elf64_Shdr *sechdrs)
    {
    - /* One extra reloc so it's always 0-funcaddr terminated */
    + /* One extra reloc so it's always 0-addr terminated */
    unsigned long relocs = 1;
    unsigned i;

    --
    2.34.1
    \
     
     \ /
      Last update: 2022-02-15 13:42    [W:3.163 / U:0.428 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site