powerpc: Prepare func_desc_t for refactorisation
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Tue, 15 Feb 2022 12:41:00 +0000 (13:41 +0100)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 16 Feb 2022 12:25:11 +0000 (23:25 +1100)
In preparation of making func_desc_t generic, change the ELFv2
version to a struct containing 'addr' element.

This allows using single helpers common to ELFv1 and ELFv2 and
reduces the amount of #ifdef's

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Reviewed-by: Kees Cook <keescook@chromium.org>
Acked-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/5c36105e08b27b98450535bff48d71b690c19739.1644928018.git.christophe.leroy@csgroup.eu
arch/powerpc/kernel/module_64.c

index d2082f236bc109f5ccc34fb1670798bd5a46d33a..f81bab3eb8e91db46d9b65984604d1fa188c303e 100644 (file)
 #ifdef PPC64_ELF_ABI_v2
 
 /* An address is simply the address of the function. */
-typedef unsigned long func_desc_t;
+typedef struct {
+       unsigned long addr;
+} func_desc_t;
 
 static func_desc_t func_desc(unsigned long addr)
 {
-       return addr;
-}
-static unsigned long func_addr(unsigned long addr)
-{
-       return addr;
-}
-static unsigned long stub_func_addr(func_desc_t func)
-{
-       return func;
+       func_desc_t desc = {
+               .addr = addr,
+       };
+
+       return desc;
 }
 
 /* PowerPC64 specific values for the Elf64_Sym st_other field.  */
@@ -70,14 +68,6 @@ static func_desc_t func_desc(unsigned long addr)
 {
        return *(struct func_desc *)addr;
 }
-static unsigned long func_addr(unsigned long addr)
-{
-       return func_desc(addr).addr;
-}
-static unsigned long stub_func_addr(func_desc_t func)
-{
-       return func.addr;
-}
 static unsigned int local_entry_offset(const Elf64_Sym *sym)
 {
        return 0;
@@ -93,6 +83,16 @@ void *dereference_module_function_descriptor(struct module *mod, void *ptr)
 }
 #endif
 
+static unsigned long func_addr(unsigned long addr)
+{
+       return func_desc(addr).addr;
+}
+
+static unsigned long stub_func_addr(func_desc_t func)
+{
+       return func.addr;
+}
+
 #define STUB_MAGIC 0x73747562 /* stub */
 
 /* Like PPC32, we need little trampolines to do > 24-bit jumps (into