From: Vineet Gupta <Vineet.Gupta1@synopsys.com> To: Al Viro <viro@ZenIV.linux.org.uk> Cc: <linux-arch@vger.kernel.org>, <linux-kernel@vger.kernel.org> Subject: Re: [RFC PATCH v1 16/31] ARC: Signal handling Date: Fri, 28 Dec 2012 18:04:09 +0530 [thread overview] Message-ID: <50DD91C1.3000809@synopsys.com> (raw) In-Reply-To: <20121116052628.GC22671@ZenIV.linux.org.uk> On Friday 16 November 2012 10:56 AM, Al Viro wrote: >> + if (insyscall) { >> + /* No handler for syscall: restart it */ >> + if (regs->r0 == -ERESTARTNOHAND || >> + regs->r0 == -ERESTARTSYS || regs->r0 == -ERESTARTNOINTR) { >> + regs->r0 = regs->orig_r0; >> + regs->ret -= 4; >> + } else if (regs->r0 == -ERESTART_RESTARTBLOCK) { >> + regs->r8 = __NR_restart_syscall; >> + regs->ret -= 4; >> + } > > What's to prevent double decrement on ->ret if two signals arrive? Note > that e.g. x86 gets away with similar code only because it uses the same > register for syscall number and return value; since none of -ERESTART... > is a valid syscall number, we either won't get into an analog of that code at > all (-ENOSYS is not restart-worthy) or will revert to a value that is > a valid syscall number, so all subsequent do_signal() calls will not hit > that code. This is subtle and unfortunately not spelled out in the > architectures where it is enough. Ok that is fixed now, by saving additional state in pt_regs->orig_r8 (which required redoing how we kept information in it). - long orig_r8; /*to distinguish bet excp, sys call, int1 or int2 - * syscalls -> 1 to NR_SYSCALLS - * Exceptions -> NR_SYSCALLS + 1 - * Break-point-> NR_SYSCALLS + 2 - */ + unsigned long event_type:16, orig_r8:16; Alternately, I could have set orig_r8 to a special value, that would have been simpler, but it would have meant potential breakage if one of the intermediate signals was tracing related - leading to a ptrace(peekxxx) which relies on orig_r8 to have correct state. Also there's tracehook stuff which could enquire for orig syscall number in orig_r8. > You need to make sure that after the first restart in_syscall() will be false. > Same ought to be done in sigreturn(), BTW... > Sure, this becomes very simple given the infrastructure above - patches follow for you to take a quick peek. Also on the topic, it seems the altstack handling is done unconditionally by most of arches - while ARC Port does it based on a magic value. The reason being to avoid needless calling (only to return) in sigreturn path. What's the recommendation there. Thx, Vineet
WARNING: multiple messages have this Message-ID (diff)
From: Vineet Gupta <Vineet.Gupta1@synopsys.com> To: Al Viro <viro@ZenIV.linux.org.uk> Cc: linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [RFC PATCH v1 16/31] ARC: Signal handling Date: Fri, 28 Dec 2012 18:04:09 +0530 [thread overview] Message-ID: <50DD91C1.3000809@synopsys.com> (raw) In-Reply-To: <20121116052628.GC22671@ZenIV.linux.org.uk> On Friday 16 November 2012 10:56 AM, Al Viro wrote: >> + if (insyscall) { >> + /* No handler for syscall: restart it */ >> + if (regs->r0 == -ERESTARTNOHAND || >> + regs->r0 == -ERESTARTSYS || regs->r0 == -ERESTARTNOINTR) { >> + regs->r0 = regs->orig_r0; >> + regs->ret -= 4; >> + } else if (regs->r0 == -ERESTART_RESTARTBLOCK) { >> + regs->r8 = __NR_restart_syscall; >> + regs->ret -= 4; >> + } > > What's to prevent double decrement on ->ret if two signals arrive? Note > that e.g. x86 gets away with similar code only because it uses the same > register for syscall number and return value; since none of -ERESTART... > is a valid syscall number, we either won't get into an analog of that code at > all (-ENOSYS is not restart-worthy) or will revert to a value that is > a valid syscall number, so all subsequent do_signal() calls will not hit > that code. This is subtle and unfortunately not spelled out in the > architectures where it is enough. Ok that is fixed now, by saving additional state in pt_regs->orig_r8 (which required redoing how we kept information in it). - long orig_r8; /*to distinguish bet excp, sys call, int1 or int2 - * syscalls -> 1 to NR_SYSCALLS - * Exceptions -> NR_SYSCALLS + 1 - * Break-point-> NR_SYSCALLS + 2 - */ + unsigned long event_type:16, orig_r8:16; Alternately, I could have set orig_r8 to a special value, that would have been simpler, but it would have meant potential breakage if one of the intermediate signals was tracing related - leading to a ptrace(peekxxx) which relies on orig_r8 to have correct state. Also there's tracehook stuff which could enquire for orig syscall number in orig_r8. > You need to make sure that after the first restart in_syscall() will be false. > Same ought to be done in sigreturn(), BTW... > Sure, this becomes very simple given the infrastructure above - patches follow for you to take a quick peek. Also on the topic, it seems the altstack handling is done unconditionally by most of arches - while ARC Port does it based on a magic value. The reason being to avoid needless calling (only to return) in sigreturn path. What's the recommendation there. Thx, Vineet
next prev parent reply other threads:[~2012-12-28 12:34 UTC|newest] Thread overview: 141+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-11-07 9:47 [RFC Patch v1 00/31] Synopsys ARC Linux kernel Port Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 01/31] ARC: Generic Headers Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 02/31] ARC: irqflags Vineet Gupta 2012-11-12 19:50 ` Thomas Gleixner 2013-01-01 7:44 ` Vineet Gupta 2013-01-01 7:44 ` Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 03/31] ARC: atomic/bitops/cmpxchg/barriers Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 04/31] asm-generic headers: uaccess.h to conditionally define segment_eq() Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 05/31] ARC: uaccess friends Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 06/31] asm-generic headers: Allow yet more arch overrides in checksum.h Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 07/31] ARC: checksum/byteorder/swab routines Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 08/31] ARC: Fundamental ARCH data-types/defines Vineet Gupta 2012-11-08 7:10 ` Jonas Bonn 2012-11-08 18:52 ` Vineet Gupta 2012-11-08 20:36 ` Jonas Bonn 2012-11-12 13:58 ` Vineet Gupta 2012-11-12 14:12 ` Arnd Bergmann 2012-11-07 9:47 ` [RFC PATCH v1 09/31] ARC: spinlock/rwlock/mutex primitives Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 10/31] ARC: string library Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 11/31] ARC: Low level IRQ/Trap/Exception(non-MMU) Handling Vineet Gupta 2012-11-16 4:58 ` Al Viro 2012-12-27 9:00 ` Vineet Gupta 2012-12-27 9:00 ` Vineet Gupta 2012-12-27 13:29 ` Vineet Gupta 2012-12-27 13:29 ` Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 12/31] ARC: Interrupt Handling Vineet Gupta 2012-11-12 20:08 ` Thomas Gleixner 2013-01-01 10:46 ` Vineet Gupta 2013-01-01 10:46 ` Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 13/31] ARC: Non-MMU Exception Handling Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 14/31] ARC: syscall support Vineet Gupta 2012-11-07 14:21 ` Arnd Bergmann 2012-11-09 9:50 ` James Hogan 2012-11-09 9:50 ` James Hogan 2012-11-13 11:41 ` James Hogan 2012-11-13 11:41 ` James Hogan 2012-11-13 12:01 ` Jonas Bonn 2012-11-13 12:11 ` James Hogan 2012-11-13 12:11 ` James Hogan 2012-11-14 12:23 ` Arnd Bergmann 2012-11-14 12:31 ` James Hogan 2012-11-14 12:31 ` James Hogan 2012-11-13 10:13 ` Gilad Ben-Yossef 2012-11-13 10:37 ` Arnd Bergmann 2012-11-15 6:15 ` Vineet Gupta 2012-11-15 6:15 ` Vineet Gupta 2012-11-15 12:35 ` Arnd Bergmann 2013-01-17 5:13 ` Vineet Gupta 2013-01-17 5:13 ` Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 15/31] ARC: Process/scheduling/clock/Timers/Delay Management Vineet Gupta 2012-11-12 20:29 ` Thomas Gleixner 2013-01-02 7:13 ` Vineet Gupta 2013-01-02 7:13 ` Vineet Gupta 2013-01-02 8:45 ` Vineet Gupta 2013-01-02 8:45 ` Vineet Gupta 2013-01-04 13:01 ` Frederic Weisbecker 2012-11-07 9:47 ` [RFC PATCH v1 16/31] ARC: Signal handling Vineet Gupta 2012-11-16 5:26 ` Al Viro 2012-12-28 12:34 ` Vineet Gupta [this message] 2012-12-28 12:34 ` Vineet Gupta 2012-12-28 12:42 ` [PATCH 1/2] ARC: [Review] Preparing to fix incorrect syscall restarts due to signals Vineet Gupta 2012-12-28 12:42 ` Vineet Gupta 2012-12-28 12:42 ` [PATCH 2/2] ARC: [Review] Prevent incorrect syscall restarts Vineet Gupta 2012-12-28 12:42 ` Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 17/31] ARC: Cache Flush Management Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 18/31] ARC: Page Table Management Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 19/31] ARC: MMU Context Management Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 20/31] ARC: MMU Exception Handling Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 21/31] ARC: TLB flush Handling Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 22/31] ARC: Page Fault handling (incl uaccess fixup) Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 23/31] ARC: I/O and DMA Mappings Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 24/31] ARC: startup #1: low-level, setup_arch(), /proc/cpuinfo, mem init Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 25/31] ARC: [plat-arcfpga] Hooking up platform to ARC UART Vineet Gupta 2012-11-07 14:16 ` Arnd Bergmann 2013-01-07 13:10 ` Vineet Gupta 2013-01-07 13:10 ` Vineet Gupta 2013-01-07 13:46 ` Arnd Bergmann 2013-01-07 14:04 ` Vineet Gupta 2013-01-07 14:04 ` Vineet Gupta 2013-01-07 14:36 ` Arnd Bergmann 2013-01-14 7:35 ` early init dt for earlyprintk (was Re: [RFC PATCH v1 25/31] ARC: [plat-arcfpga] Hooking up platform to ARC UART) Vineet Gupta 2013-01-14 7:35 ` Vineet Gupta 2013-01-14 9:48 ` James Hogan 2013-01-14 9:48 ` James Hogan 2013-01-14 10:09 ` Vineet Gupta 2013-01-14 10:09 ` Vineet Gupta 2013-01-14 10:54 ` Arnd Bergmann 2013-01-17 7:29 ` [RFC PATCH v1 25/31] ARC: [plat-arcfpga] Hooking up platform to ARC UART Vineet Gupta 2013-01-17 7:29 ` Vineet Gupta 2013-01-17 10:52 ` Arnd Bergmann 2012-11-07 9:47 ` [RFC PATCH v1 26/31] ARC: Build system: Makefiles, Kconfig, Linker script Vineet Gupta 2012-11-07 14:13 ` Arnd Bergmann 2013-01-02 14:30 ` Vineet Gupta 2013-01-02 14:48 ` Arnd Bergmann 2013-01-03 7:58 ` Vineet Gupta 2013-01-03 7:58 ` Vineet Gupta 2013-01-03 8:25 ` Arnd Bergmann 2013-03-11 12:29 ` SYSV IPC broken for no-legacy syscall kernels (was Re: [RFC PATCH v1 26/31] ARC: Build system: Makefiles, Kconfig, Linker script) Vineet Gupta 2013-03-11 12:29 ` Vineet Gupta 2013-03-11 12:44 ` James Hogan 2013-03-11 12:44 ` James Hogan 2013-03-11 12:56 ` Vineet Gupta 2013-03-11 12:56 ` Vineet Gupta 2013-03-11 13:07 ` James Hogan 2013-03-11 13:07 ` James Hogan 2013-03-11 13:30 ` Arnd Bergmann 2013-03-11 13:48 ` Vineet Gupta 2013-03-11 13:48 ` Vineet Gupta 2013-03-11 14:50 ` Arnd Bergmann 2012-11-15 17:49 ` [RFC PATCH v1 26/31] ARC: Build system: Makefiles, Kconfig, Linker script James Hogan 2012-11-15 17:49 ` James Hogan 2012-11-15 19:30 ` Ralf Baechle 2012-11-16 6:36 ` Vineet Gupta 2012-11-16 6:36 ` Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 27/31] ARC: Last bits (stubs) to get to a running kernel with UART Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 28/31] ARC: split ret_from_fork, simplify kernel_thread() Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 29/31] ARC: switch to generic kernel_thread() Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 30/31] ARC: switch to generic kernel_execve() and sys_execve() Vineet Gupta 2012-11-16 4:08 ` Al Viro 2012-11-17 14:01 ` Vineet Gupta 2012-11-17 14:01 ` Vineet Gupta 2012-11-07 9:47 ` [RFC PATCH v1 31/31] ARC: [plat-arcfpga] defconfig Vineet Gupta 2012-11-07 14:06 ` Arnd Bergmann 2012-11-12 14:18 ` James Hogan 2012-11-12 14:18 ` James Hogan 2012-11-12 14:21 ` Arnd Bergmann 2012-11-07 14:36 ` [RFC Patch v1 00/31] Synopsys ARC Linux kernel Port Arnd Bergmann 2012-11-08 19:09 ` Vineet Gupta 2012-11-07 20:46 ` Gilad Ben-Yossef 2012-11-20 13:47 ` Pavel Machek 2012-11-20 13:49 ` Vineet Gupta 2012-11-20 13:49 ` Vineet Gupta 2012-11-20 13:59 ` Pavel Machek 2012-11-20 14:17 ` Vineet Gupta 2012-11-20 14:17 ` Vineet Gupta 2013-01-18 19:46 ` Pavel Machek 2013-01-18 22:17 ` Arnd Bergmann 2013-01-19 10:15 ` Pavel Machek 2013-01-19 12:32 ` Vineet Gupta 2013-01-19 12:32 ` Vineet Gupta 2013-01-19 17:02 ` Pavel Machek
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=50DD91C1.3000809@synopsys.com \ --to=vineet.gupta1@synopsys.com \ --cc=linux-arch@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=viro@ZenIV.linux.org.uk \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.