All of lore.kernel.org
 help / color / mirror / Atom feed
From: jpihet@mvista.com (Jean Pihet)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] check put_user fail in do_signal when enable OABI_COMPACT
Date: Tue, 27 Oct 2009 20:12:52 +0100	[thread overview]
Message-ID: <200910272012.53488.jpihet@mvista.com> (raw)
In-Reply-To: <alpine.LFD.2.00.0910271454110.10545@xanadu.home>

Nicolas,

On Tuesday 27 October 2009 19:59:36 Nicolas Pitre wrote:
...
> > Side question: does the put_user requires a flush of some sort? If not,
> > why?
>
> No because it stores data into the d-cache directly at the virtual
> address to be used by user space.  Previously the d-cache needed to
> be cleaned for data to hit main memory and the i-cache invalidated for
> the newly stored _code_ to be seen by the instruction path.  Since there
> is no code involved anymore the cache flushes are useless.
>
> > Is it OK to re-send a patch with the call to flush_icache_range removed?
>
> Yes.
Ok here is the updated patch. Let's hope it is the good one that time ;-)

Can it be merged? It applies cleanly on top of Russell's latest patch 
(http://marc.info/?l=linux-arm-kernel&m=125638133624452&w=2).
>
>
> Nicolas

Regards,
Jean

---
>From d862e03679f7ea44fca1bf1ea256bbade3fbe76a Mon Sep 17 00:00:00 2001
From: Jean Pihet <jpihet@mvista.com>
Date: Tue, 27 Oct 2009 10:09:22 +0100
Subject: ARM: Check put_user fail in do_signal when enable OABI_COMPAT

Using OABI, do_signal need to copy restart_syscall to user stack.
It is possible that put_user fail. This triggers flush_icache page
fault and crash kernel.

Signed-off-by: janboe <janboe.ye@gmail.com>

Merged from
http://lists.infradead.org/pipermail/linux-arm-kernel/2009-October/002621.html
on top of
http://marc.info/?l=linux-arm-kernel&m=125638133624452&w=2

Tested with multiple sleeping apps/threads (using the nanosleep syscall) and
suspend/resume.

Signed-off-by: Jean Pihet <jpihet@mvista.com>
---
 arch/arm/kernel/signal.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
index f330974..ea9722a 100644
--- a/arch/arm/kernel/signal.c
+++ b/arch/arm/kernel/signal.c
@@ -676,8 +676,12 @@ static int do_signal(sigset_t *oldset, struct pt_regs 
*regs, int syscall)
 				regs->ARM_sp -= 4;
 				usp = (u32 __user *)regs->ARM_sp;
 
-				put_user(regs->ARM_pc, usp);
-				regs->ARM_pc = KERN_RESTART_CODE;
+				if (put_user(regs->ARM_pc, usp) == 0) {
+					regs->ARM_pc = KERN_RESTART_CODE;
+				} else {
+					regs->ARM_sp += 4;
+					force_sigsegv(0, current);
+				}
 #endif
 			}
 		}
-- 
1.6.2.5.168.g3823

  reply	other threads:[~2009-10-27 19:12 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-21 11:07 [PATCH] check put_user fail in do_signal when enable OABI_COMPACT Janboe Ye
2009-10-22  3:35 ` ye janboe
2009-10-24 10:49   ` Russell King - ARM Linux
2009-10-25  6:23     ` ye janboe
2009-10-25 15:44       ` Russell King - ARM Linux
2009-10-26  2:59         ` ye janboe
2009-10-27 14:14           ` Jean Pihet
2009-10-27 14:28             ` Russell King - ARM Linux
2009-10-27 14:41               ` ye janboe
2009-10-27 15:42             ` Mikael Pettersson
2009-10-27 17:57               ` Jean Pihet
2009-10-27 18:08                 ` Nicolas Pitre
2009-10-27 18:37                   ` Jean Pihet
2009-10-27 18:59                     ` Nicolas Pitre
2009-10-27 19:12                       ` Jean Pihet [this message]
2009-10-27 19:35                         ` Nicolas Pitre
2009-10-27 19:42                           ` Russell King - ARM Linux
2009-10-27 19:52                             ` Nicolas Pitre
2009-10-28 10:16                           ` Jean Pihet
2009-10-28 16:13                             ` Nicolas Pitre
2009-10-28 16:23                               ` Jean Pihet
2009-10-28 17:00                                 ` Jean Pihet
2009-10-28 17:24                                   ` Nicolas Pitre
2009-10-28 19:32                                   ` Jamie Lokier
2009-11-04 13:33                                   ` Jean Pihet
2009-11-04 19:32                                     ` Russell King - ARM Linux
2009-11-23 13:59                                       ` Jean Pihet
2009-11-23 14:06                                         ` Russell King - ARM Linux
2009-11-23 16:20                                           ` Jean Pihet

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=200910272012.53488.jpihet@mvista.com \
    --to=jpihet@mvista.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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: link
Be 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.