diff options
| author | Jakub Kicinski <[email protected]> | 2023-04-20 23:27:33 +0000 |
|---|---|---|
| committer | Jakub Kicinski <[email protected]> | 2023-04-20 23:29:51 +0000 |
| commit | 681c5b51dc6b8ff1ec05555243eccf64a08cb2fd (patch) | |
| tree | 713e0523bc617cbda9ff930568dd2341907b87b8 /arch/riscv/kernel/signal.c | |
| parent | net: libwx: fix memory leak in wx_setup_rx_resources (diff) | |
| parent | wifi: ath9k: Don't mark channelmap stack variable read-only in ath9k_mci_upda... (diff) | |
| download | kernel-681c5b51dc6b8ff1ec05555243eccf64a08cb2fd.tar.gz kernel-681c5b51dc6b8ff1ec05555243eccf64a08cb2fd.zip | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Adjacent changes:
net/mptcp/protocol.h
63740448a32e ("mptcp: fix accept vs worker race")
2a6a870e44dd ("mptcp: stops worker on unaccepted sockets at listener close")
ddb1a072f858 ("mptcp: move first subflow allocation at mpc access time")
Signed-off-by: Jakub Kicinski <[email protected]>
Diffstat (limited to 'arch/riscv/kernel/signal.c')
| -rw-r--r-- | arch/riscv/kernel/signal.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/riscv/kernel/signal.c b/arch/riscv/kernel/signal.c index bfb2afa4135f..dee66c9290cc 100644 --- a/arch/riscv/kernel/signal.c +++ b/arch/riscv/kernel/signal.c @@ -19,6 +19,7 @@ #include <asm/signal32.h> #include <asm/switch_to.h> #include <asm/csr.h> +#include <asm/cacheflush.h> extern u32 __user_rt_sigreturn[2]; @@ -181,6 +182,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, { struct rt_sigframe __user *frame; long err = 0; + unsigned long __maybe_unused addr; frame = get_sigframe(ksig, regs, sizeof(*frame)); if (!access_ok(frame, sizeof(*frame))) @@ -209,7 +211,12 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, if (copy_to_user(&frame->sigreturn_code, __user_rt_sigreturn, sizeof(frame->sigreturn_code))) return -EFAULT; - regs->ra = (unsigned long)&frame->sigreturn_code; + + addr = (unsigned long)&frame->sigreturn_code; + /* Make sure the two instructions are pushed to icache. */ + flush_icache_range(addr, addr + sizeof(frame->sigreturn_code)); + + regs->ra = addr; #endif /* CONFIG_MMU */ /* |
