public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86: signal: check signal stack overflow properly
@ 2009-03-19 17:56 Hiroshi Shimamoto
  2009-03-20 18:03 ` [tip:x86/signal] " Hiroshi Shimamoto
  0 siblings, 1 reply; 6+ messages in thread
From: Hiroshi Shimamoto @ 2009-03-19 17:56 UTC (permalink / raw)
  To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin; +Cc: linux-kernel

From: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>

Impact: cleanup

Check alternate signal stack overflow with proper stack pointer. The stack
pointer of the next signal frame is different if that task has i387 state.

On x86_64, redzone would be included.

No need to check SA_ONSTACK if we're already using alternate signal stack.

Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
---
 arch/x86/kernel/signal.c |   48 +++++++++++++++++++++++++--------------------
 1 files changed, 27 insertions(+), 21 deletions(-)

diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
index 4da412a..62f2164 100644
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -211,31 +211,27 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size,
 {
 	/* Default to using normal stack */
 	unsigned long sp = regs->sp;
+	int onsigstack = on_sig_stack(sp);
 
 #ifdef CONFIG_X86_64
 	/* redzone */
 	sp -= 128;
 #endif /* CONFIG_X86_64 */
 
-	/*
-	 * If we are on the alternate signal stack and would overflow it, don't.
-	 * Return an always-bogus address instead so we will die with SIGSEGV.
-	 */
-	if (on_sig_stack(sp) && !likely(on_sig_stack(sp - frame_size)))
-		return (void __user *) -1L;
-
-	/* This is the X/Open sanctioned signal stack switching.  */
-	if (ka->sa.sa_flags & SA_ONSTACK) {
-		if (sas_ss_flags(sp) == 0)
-			sp = current->sas_ss_sp + current->sas_ss_size;
-	} else {
+	if (!onsigstack) {
+		/* This is the X/Open sanctioned signal stack switching.  */
+		if (ka->sa.sa_flags & SA_ONSTACK) {
+			if (sas_ss_flags(sp) == 0)
+				sp = current->sas_ss_sp + current->sas_ss_size;
+		} else {
 #ifdef CONFIG_X86_32
-		/* This is the legacy signal stack switching. */
-		if ((regs->ss & 0xffff) != __USER_DS &&
-			!(ka->sa.sa_flags & SA_RESTORER) &&
-				ka->sa.sa_restorer)
-			sp = (unsigned long) ka->sa.sa_restorer;
+			/* This is the legacy signal stack switching. */
+			if ((regs->ss & 0xffff) != __USER_DS &&
+				!(ka->sa.sa_flags & SA_RESTORER) &&
+					ka->sa.sa_restorer)
+				sp = (unsigned long) ka->sa.sa_restorer;
 #endif /* CONFIG_X86_32 */
+		}
 	}
 
 	if (used_math()) {
@@ -244,12 +240,22 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size,
 		sp = round_down(sp, 64);
 #endif /* CONFIG_X86_64 */
 		*fpstate = (void __user *)sp;
-
-		if (save_i387_xstate(*fpstate) < 0)
-			return (void __user *)-1L;
 	}
 
-	return (void __user *)align_sigframe(sp - frame_size);
+	sp = align_sigframe(sp - frame_size);
+
+	/*
+	 * If we are on the alternate signal stack and would overflow it, don't.
+	 * Return an always-bogus address instead so we will die with SIGSEGV.
+	 */
+	if (onsigstack && !likely(on_sig_stack(sp)))
+		return (void __user *)-1L;
+
+	/* save i387 state */
+	if (used_math() && save_i387_xstate(*fpstate) < 0)
+		return (void __user *)-1L;
+
+	return (void __user *)sp;
 }
 
 #ifdef CONFIG_X86_32
-- 
1.6.1.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [tip:x86/signal] x86: signal: check signal stack overflow properly
  2009-03-19 17:56 [PATCH] x86: signal: check signal stack overflow properly Hiroshi Shimamoto
@ 2009-03-20 18:03 ` Hiroshi Shimamoto
  2009-03-24 22:00   ` Oleg Nesterov
  2009-04-09 12:22   ` [tip:x86/signal] x86: signal: check signal stack overflow properly Jaswinder Singh Rajput
  0 siblings, 2 replies; 6+ messages in thread
From: Hiroshi Shimamoto @ 2009-03-20 18:03 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, h-shimamoto, hpa, mingo, roland, tglx, mingo

Commit-ID:  14fc9fbc700dc95b4f46ebd588169324fe6deff8
Gitweb:     http://git.kernel.org/tip/14fc9fbc700dc95b4f46ebd588169324fe6deff8
Author:     Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
AuthorDate: Thu, 19 Mar 2009 10:56:29 -0700
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Fri, 20 Mar 2009 19:01:31 +0100

x86: signal: check signal stack overflow properly

Impact: cleanup

Check alternate signal stack overflow with proper stack pointer.
The stack pointer of the next signal frame is different if that
task has i387 state.

On x86_64, redzone would be included.

No need to check SA_ONSTACK if we're already using alternate signal stack.

Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
Cc: Roland McGrath <roland@redhat.com>
LKML-Reference: <49C2874D.3080002@ct.jp.nec.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>


---
 arch/x86/kernel/signal.c |   48 +++++++++++++++++++++++++--------------------
 1 files changed, 27 insertions(+), 21 deletions(-)

diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
index d2cc642..dfcc74a 100644
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -211,31 +211,27 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size,
 {
 	/* Default to using normal stack */
 	unsigned long sp = regs->sp;
+	int onsigstack = on_sig_stack(sp);
 
 #ifdef CONFIG_X86_64
 	/* redzone */
 	sp -= 128;
 #endif /* CONFIG_X86_64 */
 
-	/*
-	 * If we are on the alternate signal stack and would overflow it, don't.
-	 * Return an always-bogus address instead so we will die with SIGSEGV.
-	 */
-	if (on_sig_stack(sp) && !likely(on_sig_stack(sp - frame_size)))
-		return (void __user *) -1L;
-
-	/* This is the X/Open sanctioned signal stack switching.  */
-	if (ka->sa.sa_flags & SA_ONSTACK) {
-		if (sas_ss_flags(sp) == 0)
-			sp = current->sas_ss_sp + current->sas_ss_size;
-	} else {
+	if (!onsigstack) {
+		/* This is the X/Open sanctioned signal stack switching.  */
+		if (ka->sa.sa_flags & SA_ONSTACK) {
+			if (sas_ss_flags(sp) == 0)
+				sp = current->sas_ss_sp + current->sas_ss_size;
+		} else {
 #ifdef CONFIG_X86_32
-		/* This is the legacy signal stack switching. */
-		if ((regs->ss & 0xffff) != __USER_DS &&
-			!(ka->sa.sa_flags & SA_RESTORER) &&
-				ka->sa.sa_restorer)
-			sp = (unsigned long) ka->sa.sa_restorer;
+			/* This is the legacy signal stack switching. */
+			if ((regs->ss & 0xffff) != __USER_DS &&
+				!(ka->sa.sa_flags & SA_RESTORER) &&
+					ka->sa.sa_restorer)
+				sp = (unsigned long) ka->sa.sa_restorer;
 #endif /* CONFIG_X86_32 */
+		}
 	}
 
 	if (used_math()) {
@@ -244,12 +240,22 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size,
 		sp = round_down(sp, 64);
 #endif /* CONFIG_X86_64 */
 		*fpstate = (void __user *)sp;
-
-		if (save_i387_xstate(*fpstate) < 0)
-			return (void __user *)-1L;
 	}
 
-	return (void __user *)align_sigframe(sp - frame_size);
+	sp = align_sigframe(sp - frame_size);
+
+	/*
+	 * If we are on the alternate signal stack and would overflow it, don't.
+	 * Return an always-bogus address instead so we will die with SIGSEGV.
+	 */
+	if (onsigstack && !likely(on_sig_stack(sp)))
+		return (void __user *)-1L;
+
+	/* save i387 state */
+	if (used_math() && save_i387_xstate(*fpstate) < 0)
+		return (void __user *)-1L;
+
+	return (void __user *)sp;
 }
 
 #ifdef CONFIG_X86_32

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [tip:x86/signal] x86: signal: check signal stack overflow properly
  2009-03-20 18:03 ` [tip:x86/signal] " Hiroshi Shimamoto
@ 2009-03-24 22:00   ` Oleg Nesterov
  2009-03-26 17:03     ` Hiroshi Shimamoto
  2009-04-09 12:22   ` [tip:x86/signal] x86: signal: check signal stack overflow properly Jaswinder Singh Rajput
  1 sibling, 1 reply; 6+ messages in thread
From: Oleg Nesterov @ 2009-03-24 22:00 UTC (permalink / raw)
  To: Hiroshi Shimamoto
  Cc: linux-tip-commits, linux-kernel, hpa, mingo, roland, tglx, mingo

On 03/20, Hiroshi Shimamoto wrote:
>
> Commit-ID:  14fc9fbc700dc95b4f46ebd588169324fe6deff8
> Gitweb:     http://git.kernel.org/tip/14fc9fbc700dc95b4f46ebd588169324fe6deff8
> Author:     Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
> AuthorDate: Thu, 19 Mar 2009 10:56:29 -0700
> Committer:  Ingo Molnar <mingo@elte.hu>
> CommitDate: Fri, 20 Mar 2009 19:01:31 +0100
>
> x86: signal: check signal stack overflow properly
>
> Impact: cleanup
>
> Check alternate signal stack overflow with proper stack pointer.
> The stack pointer of the next signal frame is different if that
> task has i387 state.

I think the patch is correct but I have a minor question,

> No need to check SA_ONSTACK if we're already using alternate signal stack.

Yes, but this also mean that we don't need sas_ss_flags() under
"if (!onsigstack)",

> @@ -211,31 +211,27 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size,
>  {
>  	/* Default to using normal stack */
>  	unsigned long sp = regs->sp;
> +	int onsigstack = on_sig_stack(sp);
>
>  #ifdef CONFIG_X86_64
>  	/* redzone */
>  	sp -= 128;
>  #endif /* CONFIG_X86_64 */
>
> -	/*
> -	 * If we are on the alternate signal stack and would overflow it, don't.
> -	 * Return an always-bogus address instead so we will die with SIGSEGV.
> -	 */
> -	if (on_sig_stack(sp) && !likely(on_sig_stack(sp - frame_size)))
> -		return (void __user *) -1L;
> -
> -	/* This is the X/Open sanctioned signal stack switching.  */
> -	if (ka->sa.sa_flags & SA_ONSTACK) {
> -		if (sas_ss_flags(sp) == 0)
> -			sp = current->sas_ss_sp + current->sas_ss_size;
> -	} else {
> +	if (!onsigstack) {
> +		/* This is the X/Open sanctioned signal stack switching.  */
> +		if (ka->sa.sa_flags & SA_ONSTACK) {
> +			if (sas_ss_flags(sp) == 0)
> +				sp = current->sas_ss_sp + current->sas_ss_size;

We can use "->sas_ss_size != 0" instead and avoid the unnecessary
sas_ss_flags()->on_sig_stack() check.

Please note that afaics sas_ss_flags()->on_sig_stack() is actually
wrong because we already adjusted "sp" above for redzone.

Suppose that on_sig_stack(regs->sp) = F, but "sp - 128" falls into
the altstack. In that case SA_ONSTACK won't switch the stack.

Of course, this is only theoretical, but still.

Oleg.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [tip:x86/signal] x86: signal: check signal stack overflow properly
  2009-03-24 22:00   ` Oleg Nesterov
@ 2009-03-26 17:03     ` Hiroshi Shimamoto
  2009-04-01 15:16       ` [tip:x86/urgent] x86: signal: check sas_ss_size instead of sas_ss_flags() Hiroshi Shimamoto
  0 siblings, 1 reply; 6+ messages in thread
From: Hiroshi Shimamoto @ 2009-03-26 17:03 UTC (permalink / raw)
  To: Oleg Nesterov
  Cc: linux-tip-commits, linux-kernel, hpa, mingo, roland, tglx, mingo

Oleg Nesterov wrote:
> On 03/20, Hiroshi Shimamoto wrote:
>> Commit-ID:  14fc9fbc700dc95b4f46ebd588169324fe6deff8
>> Gitweb:     http://git.kernel.org/tip/14fc9fbc700dc95b4f46ebd588169324fe6deff8
>> Author:     Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
>> AuthorDate: Thu, 19 Mar 2009 10:56:29 -0700
>> Committer:  Ingo Molnar <mingo@elte.hu>
>> CommitDate: Fri, 20 Mar 2009 19:01:31 +0100
>>
>> x86: signal: check signal stack overflow properly
>>
>> Impact: cleanup
>>
>> Check alternate signal stack overflow with proper stack pointer.
>> The stack pointer of the next signal frame is different if that
>> task has i387 state.
> 
> I think the patch is correct but I have a minor question,
> 
>> No need to check SA_ONSTACK if we're already using alternate signal stack.
> 
> Yes, but this also mean that we don't need sas_ss_flags() under
> "if (!onsigstack)",
> 
>> @@ -211,31 +211,27 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size,
>>  {
>>  	/* Default to using normal stack */
>>  	unsigned long sp = regs->sp;
>> +	int onsigstack = on_sig_stack(sp);
>>
>>  #ifdef CONFIG_X86_64
>>  	/* redzone */
>>  	sp -= 128;
>>  #endif /* CONFIG_X86_64 */
>>
>> -	/*
>> -	 * If we are on the alternate signal stack and would overflow it, don't.
>> -	 * Return an always-bogus address instead so we will die with SIGSEGV.
>> -	 */
>> -	if (on_sig_stack(sp) && !likely(on_sig_stack(sp - frame_size)))
>> -		return (void __user *) -1L;
>> -
>> -	/* This is the X/Open sanctioned signal stack switching.  */
>> -	if (ka->sa.sa_flags & SA_ONSTACK) {
>> -		if (sas_ss_flags(sp) == 0)
>> -			sp = current->sas_ss_sp + current->sas_ss_size;
>> -	} else {
>> +	if (!onsigstack) {
>> +		/* This is the X/Open sanctioned signal stack switching.  */
>> +		if (ka->sa.sa_flags & SA_ONSTACK) {
>> +			if (sas_ss_flags(sp) == 0)
>> +				sp = current->sas_ss_sp + current->sas_ss_size;
> 
> We can use "->sas_ss_size != 0" instead and avoid the unnecessary
> sas_ss_flags()->on_sig_stack() check.
> 
> Please note that afaics sas_ss_flags()->on_sig_stack() is actually
> wrong because we already adjusted "sp" above for redzone.
> 
> Suppose that on_sig_stack(regs->sp) = F, but "sp - 128" falls into
> the altstack. In that case SA_ONSTACK won't switch the stack.
> 
> Of course, this is only theoretical, but still.

Hi Oleg,

Thanks for pointing out it.
I made a patch you suggested.

I haven't tested enough this patch, sorry.

Thanks,
Hiroshi
========
From: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
Subject: [PATCH] x86: signal: check sas_ss_size instead of sas_ss_flags()

Impact: fix redundant and incorrect check

Checking on_sig_stack() in sas_ss_flags() at get_sigframe() is redundant
and not correct on 64 bit. To check sas_ss_size is enough.

Reported-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
---
 arch/x86/kernel/signal.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
index 62f2164..465b42d 100644
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -221,7 +221,7 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size,
 	if (!onsigstack) {
 		/* This is the X/Open sanctioned signal stack switching.  */
 		if (ka->sa.sa_flags & SA_ONSTACK) {
-			if (sas_ss_flags(sp) == 0)
+			if (current->sas_ss_size)
 				sp = current->sas_ss_sp + current->sas_ss_size;
 		} else {
 #ifdef CONFIG_X86_32
-- 
1.6.1.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [tip:x86/urgent] x86: signal: check sas_ss_size instead of sas_ss_flags()
  2009-03-26 17:03     ` Hiroshi Shimamoto
@ 2009-04-01 15:16       ` Hiroshi Shimamoto
  0 siblings, 0 replies; 6+ messages in thread
From: Hiroshi Shimamoto @ 2009-04-01 15:16 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, h-shimamoto, hpa, mingo, oleg, tglx, mingo

Commit-ID:  0f8f308925ebe0480bd9831d32963ee0b885e24b
Gitweb:     http://git.kernel.org/tip/0f8f308925ebe0480bd9831d32963ee0b885e24b
Author:     Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
AuthorDate: Thu, 26 Mar 2009 10:03:08 -0700
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Wed, 1 Apr 2009 17:13:17 +0200

x86: signal: check sas_ss_size instead of sas_ss_flags()

Impact: fix redundant and incorrect check

Oleg Nesterov noticed wrt commit:

  14fc9fb: x86: signal: check signal stack overflow properly

>> No need to check SA_ONSTACK if we're already using alternate signal stack.
>
> Yes, but this also mean that we don't need sas_ss_flags() under
> "if (!onsigstack)",

Checking on_sig_stack() in sas_ss_flags() at get_sigframe() is redundant
and not correct on 64 bit. To check sas_ss_size is enough.

Reported-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
Cc: roland@redhat.com
LKML-Reference: <49CBB54C.5080201@ct.jp.nec.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>


---
 arch/x86/kernel/signal.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
index dfcc74a..1442516 100644
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -221,7 +221,7 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size,
 	if (!onsigstack) {
 		/* This is the X/Open sanctioned signal stack switching.  */
 		if (ka->sa.sa_flags & SA_ONSTACK) {
-			if (sas_ss_flags(sp) == 0)
+			if (current->sas_ss_size)
 				sp = current->sas_ss_sp + current->sas_ss_size;
 		} else {
 #ifdef CONFIG_X86_32

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [tip:x86/signal] x86: signal: check signal stack overflow properly
  2009-03-20 18:03 ` [tip:x86/signal] " Hiroshi Shimamoto
  2009-03-24 22:00   ` Oleg Nesterov
@ 2009-04-09 12:22   ` Jaswinder Singh Rajput
  1 sibling, 0 replies; 6+ messages in thread
From: Jaswinder Singh Rajput @ 2009-04-09 12:22 UTC (permalink / raw)
  To: mingo, hpa, h-shimamoto, linux-kernel, roland, tglx, mingo
  Cc: linux-tip-commits

Hiroshi-san,

I am getting few sparse warnings from your commited lines.
If possible, please run sparse before sending patch.

On Fri, 2009-03-20 at 18:03 +0000, Hiroshi Shimamoto wrote:
> Commit-ID:  14fc9fbc700dc95b4f46ebd588169324fe6deff8
> Gitweb:     http://git.kernel.org/tip/14fc9fbc700dc95b4f46ebd588169324fe6deff8
> Author:     Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
> AuthorDate: Thu, 19 Mar 2009 10:56:29 -0700
> Committer:  Ingo Molnar <mingo@elte.hu>
> CommitDate: Fri, 20 Mar 2009 19:01:31 +0100
> 
> x86: signal: check signal stack overflow properly
> 
> Impact: cleanup
> 
> Check alternate signal stack overflow with proper stack pointer.
> The stack pointer of the next signal frame is different if that
> task has i387 state.
> 
> On x86_64, redzone would be included.
> 
> No need to check SA_ONSTACK if we're already using alternate signal stack.
> 
> Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
> Cc: Roland McGrath <roland@redhat.com>
> LKML-Reference: <49C2874D.3080002@ct.jp.nec.com>
> Signed-off-by: Ingo Molnar <mingo@elte.hu>
> 
> 
> ---
>  arch/x86/kernel/signal.c |   48 +++++++++++++++++++++++++--------------------
>  1 files changed, 27 insertions(+), 21 deletions(-)
> 
> diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
> index d2cc642..dfcc74a 100644
> --- a/arch/x86/kernel/signal.c
> +++ b/arch/x86/kernel/signal.c
> @@ -244,12 +240,22 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size,
>  		sp = round_down(sp, 64);
>  #endif /* CONFIG_X86_64 */
>  		*fpstate = (void __user *)sp;
> -
> -		if (save_i387_xstate(*fpstate) < 0)
> -			return (void __user *)-1L;
>  	}
>  
> -	return (void __user *)align_sigframe(sp - frame_size);
> +	sp = align_sigframe(sp - frame_size);
> +
> +	/*
> +	 * If we are on the alternate signal stack and would overflow it, don't.
> +	 * Return an always-bogus address instead so we will die with SIGSEGV.
> +	 */
> +	if (onsigstack && !likely(on_sig_stack(sp)))
> +		return (void __user *)-1L;

arch/x86/kernel/signal.c:251:11: warning: cast adds address space to expression (<asn:1>)

> +
> +	/* save i387 state */
> +	if (used_math() && save_i387_xstate(*fpstate) < 0)
> +		return (void __user *)-1L;

arch/x86/kernel/signal.c:255:11: warning: cast adds address space to expression (<asn:1>)
> +
> +	return (void __user *)sp;
>  }
>  
>  #ifdef CONFIG_X86_32


4a612048 arch/x86/kernel/signal_32.c (Hiroshi Shimamoto 2008-11-11 19:09:29 -0800 326)  err |= __put_user(*((u64 *)&retcode), (u64 *)frame->retcode);

arch/x86/kernel/signal.c:326:9: warning: cast removes address space of expression
arch/x86/kernel/signal.c:326:9: warning: incorrect type in argument 1 (different address spaces)
arch/x86/kernel/signal.c:326:9:    expected void const volatile [noderef] <asn:1>*<noident>
arch/x86/kernel/signal.c:326:9:    got unsigned long long [usertype] *<noident>
arch/x86/kernel/signal.c:326:9: warning: cast removes address space of expression
arch/x86/kernel/signal.c:326:9: warning: cast removes address space of expression
arch/x86/kernel/signal.c:326:9: warning: cast removes address space of expression
arch/x86/kernel/signal.c:326:9: warning: cast adds address space to expression (<asn:1>)
arch/x86/kernel/signal.c:326:9: warning: cast removes address space of expression
arch/x86/kernel/signal.c:326:9: warning: cast removes address space of expression
arch/x86/kernel/signal.c:326:9: warning: cast adds address space to expression (<asn:1>)
arch/x86/kernel/signal.c:326:9: warning: cast removes address space of expression
arch/x86/kernel/signal.c:326:9: warning: cast removes address space of expression
arch/x86/kernel/signal.c:326:9: warning: cast adds address space to expression (<asn:1>)
arch/x86/kernel/signal.c:326:9: warning: cast removes address space of expression
arch/x86/kernel/signal.c:326:9: warning: cast removes address space of expression
arch/x86/kernel/signal.c:326:9: warning: cast removes address space of expression

98e3d45e arch/x86/kernel/signal.c    (Hiroshi Shimamoto 2009-01-23 15:50:10 -0800 359)  put_user_try {
98e3d45e arch/x86/kernel/signal.c    (Hiroshi Shimamoto 2009-01-23 15:50:10 -0800 360)          put_user_ex(sig, &frame->sig);
98e3d45e arch/x86/kernel/signal.c    (Hiroshi Shimamoto 2009-01-23 15:50:10 -0800 361)          put_user_ex(&frame->info, &frame->pinfo);

arch/x86/kernel/signal.c:361:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:361:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:361:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:361:3: warning: cast removes address space of expression

98e3d45e arch/x86/kernel/signal.c    (Hiroshi Shimamoto 2009-01-23 15:50:10 -0800 362)          put_user_ex(&frame->uc, &frame->puc);

arch/x86/kernel/signal.c:362:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:362:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:362:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:362:3: warning: cast removes address space of expression

98e3d45e arch/x86/kernel/signal.c    (Hiroshi Shimamoto 2009-01-23 15:50:10 -0800 363)          err |= copy_siginfo_to_user(&frame->info, info);
98e3d45e arch/x86/kernel/signal.c    (Hiroshi Shimamoto 2009-01-23 15:50:10 -0800 364) 

98e3d45e arch/x86/kernel/signal.c    (Hiroshi Shimamoto 2009-01-23 15:50:10 -0800 379)          /* Set up to return from userspace.  */
98e3d45e arch/x86/kernel/signal.c    (Hiroshi Shimamoto 2009-01-23 15:50:10 -0800 380)          restorer = VDSO32_SYMBOL(current->mm->context.vdso, rt_si

arch/x86/kernel/signal.c:380:12: warning: incorrect type in assignment (different address spaces)
arch/x86/kernel/signal.c:380:12:    expected void [noderef] <asn:1>*restorer
arch/x86/kernel/signal.c:380:12:    got void *<noident>


98e3d45e arch/x86/kernel/signal.c    (Hiroshi Shimamoto 2009-01-23 15:50:10 -0800 381)          if (ka->sa.sa_flags & SA_RESTORER)
98e3d45e arch/x86/kernel/signal.c    (Hiroshi Shimamoto 2009-01-23 15:50:10 -0800 382)                  restorer = ka->sa.sa_restorer;
98e3d45e arch/x86/kernel/signal.c    (Hiroshi Shimamoto 2009-01-23 15:50:10 -0800 383)          put_user_ex(restorer, &frame->pretcode);

arch/x86/kernel/signal.c:383:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:383:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:383:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:383:3: warning: cast removes address space of expression

98e3d45e arch/x86/kernel/signal.c    (Hiroshi Shimamoto 2009-01-23 15:50:10 -0800 392)          put_user_ex(*((u64 *)&rt_retcode), (u64 *)frame->retcode)

arch/x86/kernel/signal.c:392:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:392:3: warning: incorrect type in argument 1 (different address spaces)
arch/x86/kernel/signal.c:392:3:    expected void const volatile [noderef] <asn:1>*<noident>
arch/x86/kernel/signal.c:392:3:    got unsigned long long [usertype] *<noident>
arch/x86/kernel/signal.c:392:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:392:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:392:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:392:3: warning: cast adds address space to expression (<asn:1>)
arch/x86/kernel/signal.c:392:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:392:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:392:3: warning: cast adds address space to expression (<asn:1>)
arch/x86/kernel/signal.c:392:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:392:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:392:3: warning: cast adds address space to expression (<asn:1>)
arch/x86/kernel/signal.c:392:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:392:3: warning: cast removes address space of expression
arch/x86/kernel/signal.c:392:3: warning: cast removes address space of expression

--
JSR


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2009-04-09 12:22 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-19 17:56 [PATCH] x86: signal: check signal stack overflow properly Hiroshi Shimamoto
2009-03-20 18:03 ` [tip:x86/signal] " Hiroshi Shimamoto
2009-03-24 22:00   ` Oleg Nesterov
2009-03-26 17:03     ` Hiroshi Shimamoto
2009-04-01 15:16       ` [tip:x86/urgent] x86: signal: check sas_ss_size instead of sas_ss_flags() Hiroshi Shimamoto
2009-04-09 12:22   ` [tip:x86/signal] x86: signal: check signal stack overflow properly Jaswinder Singh Rajput

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox