lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 0473/1039] openrisc: Add clone3 ABI wrapper
    Date
    From: Stafford Horne <shorne@gmail.com>

    [ Upstream commit 433fe39f674d58bc7a3e8254a5d2ffc290b7e04e ]

    Like fork and clone the clone3 syscall needs a wrapper to save callee
    saved registers, which is required by the OpenRISC ABI. This came up
    after auditing code following a discussion with Rob Landley and Arnd
    Bergmann [0].

    Tested with the clone3 kselftests and there were no issues.

    [0] https://lore.kernel.org/all/41206fc7-f8ce-98aa-3718-ba3e1431e320@landley.net/T/#m9c0cdb2703813b9df4da04cf6b30de1f1aa89944

    Fixes: 07e83dfbe16c ("openrisc: Enable the clone3 syscall")
    Cc: Rob Landley <rob@landley.net>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Stafford Horne <shorne@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/openrisc/include/asm/syscalls.h | 2 ++
    arch/openrisc/kernel/entry.S | 5 +++++
    2 files changed, 7 insertions(+)

    diff --git a/arch/openrisc/include/asm/syscalls.h b/arch/openrisc/include/asm/syscalls.h
    index 3a7eeae6f56a8..aa1c7e98722e3 100644
    --- a/arch/openrisc/include/asm/syscalls.h
    +++ b/arch/openrisc/include/asm/syscalls.h
    @@ -22,9 +22,11 @@ asmlinkage long sys_or1k_atomic(unsigned long type, unsigned long *v1,

    asmlinkage long __sys_clone(unsigned long clone_flags, unsigned long newsp,
    void __user *parent_tid, void __user *child_tid, int tls);
    +asmlinkage long __sys_clone3(struct clone_args __user *uargs, size_t size);
    asmlinkage long __sys_fork(void);

    #define sys_clone __sys_clone
    +#define sys_clone3 __sys_clone3
    #define sys_fork __sys_fork

    #endif /* __ASM_OPENRISC_SYSCALLS_H */
    diff --git a/arch/openrisc/kernel/entry.S b/arch/openrisc/kernel/entry.S
    index 59c6d3aa7081e..dc5b45e9e72b5 100644
    --- a/arch/openrisc/kernel/entry.S
    +++ b/arch/openrisc/kernel/entry.S
    @@ -1170,6 +1170,11 @@ ENTRY(__sys_clone)
    l.j _fork_save_extra_regs_and_call
    l.nop

    +ENTRY(__sys_clone3)
    + l.movhi r29,hi(sys_clone3)
    + l.j _fork_save_extra_regs_and_call
    + l.ori r29,r29,lo(sys_clone3)
    +
    ENTRY(__sys_fork)
    l.movhi r29,hi(sys_fork)
    l.ori r29,r29,lo(sys_fork)
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-01-24 23:10    [W:2.527 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site