All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yury Norov <ynorov@caviumnetworks.com>
To: "Zhangjian (Bamvor)" <bamvor.zhangjian@huawei.com>
Cc: <arnd@arndb.de>, <pinskia@gmail.com>,
	<Prasun.Kapoor@caviumnetworks.com>,
	Andreas Schwab <schwab@suse.de>,
	"dingtianhong@huawei.com" <dingtianhong@huawei.com>,
	<heiko.carstens@de.ibm.com>, <linux-kernel@vger.kernel.org>,
	Alexander Graf <agraf@suse.de>, <klimov.linux@gmail.com>,
	<broonie@kernel.org>, <jan.dakinevich@gmail.com>,
	<joseph@codesourcery.com>, <catalin.marinas@arm.com>,
	<schwidefsky@de.ibm.com>, <Nathan_Lynch@mentor.com>,
	Bamvor Zhang Jian <bamvor.zhangjian@linaro.org>,
	<linux-arm-kernel@lists.infradead.org>,
	<christoph.muellner@theobroma-systems.com>
Subject: Re: [RFC5 PATCH v6 00/21] ILP32 for ARM64
Date: Tue, 22 Mar 2016 04:49:48 +0300	[thread overview]
Message-ID: <20160322014948.GA9275@yury-N73SV> (raw)
In-Reply-To: <20160321184312.GB26563@yury-N73SV>

On Mon, Mar 21, 2016 at 09:43:12PM +0300, Yury Norov wrote:
> On Mon, Mar 21, 2016 at 07:23:28PM +0800, Zhangjian (Bamvor) wrote:
> > >>So this most probably means that ilp32 code doesn't handle one of cloned
> > >>item properly. I have already discovered a bug where child processes
> > >>used parent TLS,
> > >It is a kernel bug or glibc bug? Could you please explain it or show the patch?
> > >The current ILP32 patches looks good to me. Recently, I backport these patches
> > >to our 4.1 kernel. And I saw crash frequently even if I only do a single print
> > >or infinite loop. There is some small changes about tls register after 4.1. I
> > >am not sure if it is a similar issue. It is great if you have some suggestions/
> > >ideas.
> > My issue is because I forget to change is_compat_task to
> > is_a32_compat_task in arch/arm64/kernel/process.c such piece of code
> > is delete after commit d00a3810c162 ("arm64: context-switch user tls
> > register tpidr_el0 for compat tasks). It is not exist in upstream
> > kernel, never mind.
> > 
> > Meanwhile, I found that it seem that there is another is_compat_task
> > in tls_thread_flush. Is it relative the issue you mentioned?
> > 
> > ```
> > diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
> > index 432b094..9ab968c 100644
> > --- a/arch/arm64/kernel/process.c
> > +++ b/arch/arm64/kernel/process.c
> > @@ -209,7 +209,7 @@ static void tls_thread_flush(void)
> >  {
> >         asm ("msr tpidr_el0, xzr");
> > 
> > -       if (is_compat_task()) {
> > +       if (is_a32_compat_task()) {
> >                 current->thread.tp_value = 0;
> > 
> >                 /*
> > ```
> > 
> > Regards
> > 
> > Bamvor
> 
> Hi,
> 
> This fix looks correct, though doesn't fix issue.
> Thank you.
> 
> Yury.

Hi again.

Next fix helps with SIGSEGV crash of trigo test. But now it hangs on
futex, so work is not finished yet. Nevertheless, you can apply it and
do your tests.

Signed-off-by: Yury Norov <ynorov@caviumnetworks.com>
---
 arch/arm64/kernel/signal_ilp32.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/arch/arm64/kernel/signal_ilp32.c b/arch/arm64/kernel/signal_ilp32.c
index 455b0fb..1bb0ea8 100644
--- a/arch/arm64/kernel/signal_ilp32.c
+++ b/arch/arm64/kernel/signal_ilp32.c
@@ -107,6 +107,7 @@ int ilp32_setup_rt_frame(int usig, struct ksignal *ksig,
 
 	if (!frame)
 		return 1;
+	err |= copy_siginfo_to_user32(&frame->info, &ksig->info);
 
 	__put_user_error(0, &frame->sig.uc.uc_flags, err);
 	__put_user_error(NULL, &frame->sig.uc.uc_link, err);
@@ -115,12 +116,9 @@ int ilp32_setup_rt_frame(int usig, struct ksignal *ksig,
 	err |= setup_sigframe(&frame->sig, regs, set);
 	if (err == 0) {
 		setup_return(regs, &ksig->ka, frame,
-			offsetof(struct ilp32_rt_sigframe, sig), usig);
-		if (ksig->ka.sa.sa_flags & SA_SIGINFO) {
-			err |= copy_siginfo_to_user32(&frame->info, &ksig->info);
-			regs->regs[1] = (unsigned long)&frame->info;
-			regs->regs[2] = (unsigned long)&frame->sig.uc;
-		}
+				offsetof(struct ilp32_rt_sigframe, sig), usig);
+		regs->regs[1] = (unsigned long)&frame->info;
+		regs->regs[2] = (unsigned long)&frame->sig.uc;
 	}
 
 	return err;
-- 
2.5.0

WARNING: multiple messages have this Message-ID (diff)
From: ynorov@caviumnetworks.com (Yury Norov)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC5 PATCH v6 00/21] ILP32 for ARM64
Date: Tue, 22 Mar 2016 04:49:48 +0300	[thread overview]
Message-ID: <20160322014948.GA9275@yury-N73SV> (raw)
In-Reply-To: <20160321184312.GB26563@yury-N73SV>

On Mon, Mar 21, 2016 at 09:43:12PM +0300, Yury Norov wrote:
> On Mon, Mar 21, 2016 at 07:23:28PM +0800, Zhangjian (Bamvor) wrote:
> > >>So this most probably means that ilp32 code doesn't handle one of cloned
> > >>item properly. I have already discovered a bug where child processes
> > >>used parent TLS,
> > >It is a kernel bug or glibc bug? Could you please explain it or show the patch?
> > >The current ILP32 patches looks good to me. Recently, I backport these patches
> > >to our 4.1 kernel. And I saw crash frequently even if I only do a single print
> > >or infinite loop. There is some small changes about tls register after 4.1. I
> > >am not sure if it is a similar issue. It is great if you have some suggestions/
> > >ideas.
> > My issue is because I forget to change is_compat_task to
> > is_a32_compat_task in arch/arm64/kernel/process.c such piece of code
> > is delete after commit d00a3810c162 ("arm64: context-switch user tls
> > register tpidr_el0 for compat tasks). It is not exist in upstream
> > kernel, never mind.
> > 
> > Meanwhile, I found that it seem that there is another is_compat_task
> > in tls_thread_flush. Is it relative the issue you mentioned?
> > 
> > ```
> > diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
> > index 432b094..9ab968c 100644
> > --- a/arch/arm64/kernel/process.c
> > +++ b/arch/arm64/kernel/process.c
> > @@ -209,7 +209,7 @@ static void tls_thread_flush(void)
> >  {
> >         asm ("msr tpidr_el0, xzr");
> > 
> > -       if (is_compat_task()) {
> > +       if (is_a32_compat_task()) {
> >                 current->thread.tp_value = 0;
> > 
> >                 /*
> > ```
> > 
> > Regards
> > 
> > Bamvor
> 
> Hi,
> 
> This fix looks correct, though doesn't fix issue.
> Thank you.
> 
> Yury.

Hi again.

Next fix helps with SIGSEGV crash of trigo test. But now it hangs on
futex, so work is not finished yet. Nevertheless, you can apply it and
do your tests.

Signed-off-by: Yury Norov <ynorov@caviumnetworks.com>
---
 arch/arm64/kernel/signal_ilp32.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/arch/arm64/kernel/signal_ilp32.c b/arch/arm64/kernel/signal_ilp32.c
index 455b0fb..1bb0ea8 100644
--- a/arch/arm64/kernel/signal_ilp32.c
+++ b/arch/arm64/kernel/signal_ilp32.c
@@ -107,6 +107,7 @@ int ilp32_setup_rt_frame(int usig, struct ksignal *ksig,
 
 	if (!frame)
 		return 1;
+	err |= copy_siginfo_to_user32(&frame->info, &ksig->info);
 
 	__put_user_error(0, &frame->sig.uc.uc_flags, err);
 	__put_user_error(NULL, &frame->sig.uc.uc_link, err);
@@ -115,12 +116,9 @@ int ilp32_setup_rt_frame(int usig, struct ksignal *ksig,
 	err |= setup_sigframe(&frame->sig, regs, set);
 	if (err == 0) {
 		setup_return(regs, &ksig->ka, frame,
-			offsetof(struct ilp32_rt_sigframe, sig), usig);
-		if (ksig->ka.sa.sa_flags & SA_SIGINFO) {
-			err |= copy_siginfo_to_user32(&frame->info, &ksig->info);
-			regs->regs[1] = (unsigned long)&frame->info;
-			regs->regs[2] = (unsigned long)&frame->sig.uc;
-		}
+				offsetof(struct ilp32_rt_sigframe, sig), usig);
+		regs->regs[1] = (unsigned long)&frame->info;
+		regs->regs[2] = (unsigned long)&frame->sig.uc;
 	}
 
 	return err;
-- 
2.5.0

  reply	other threads:[~2016-03-22  1:50 UTC|newest]

Thread overview: 143+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-14 17:22 [RFC5 PATCH v6 00/21] ILP32 for ARM64 Yury Norov
2016-01-14 17:22 ` Yury Norov
2016-01-14 17:22 ` [PATCH v6 01/21] arm64: ilp32: add documentation on the ILP32 ABI " Yury Norov
2016-01-14 17:22   ` Yury Norov
2016-01-14 17:22 ` [PATCH v6 02/21] arm64: ensure the kernel is compiled for LP64 Yury Norov
2016-01-14 17:22   ` Yury Norov
2016-01-14 17:23 ` [PATCH v6 03/21] arm64: rename COMPAT to AARCH32_EL0 in Kconfig Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-01-14 17:23 ` [PATCH v6 04/21] arm64: change some CONFIG_COMPAT over to use CONFIG_AARCH32_EL0 instead Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-01-14 17:23 ` [PATCH v6 05/21] arm64: compat: change config dependences to aarch32 Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-01-14 17:23 ` [PATCH v6 06/21] arm64:uapi: set __BITS_PER_LONG correctly for ILP32 and LP64 Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-01-14 17:23 ` [PATCH v6 07/21] thread: move thread bits accessors to separated file Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-01-14 17:23 ` [PATCH v6 08/21] arm64: introduce is_a32_task and is_a32_thread (for AArch32 compat) Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-01-14 17:23 ` [PATCH v6 09/21] arm64: ilp32: add is_ilp32_compat_{task,thread} and TIF_32BIT_AARCH64 Yury Norov
2016-01-14 17:23   ` [PATCH v6 09/21] arm64: ilp32: add is_ilp32_compat_{task, thread} " Yury Norov
2016-01-14 17:23 ` [PATCH v6 10/21] arm64: introduce binfmt_elf32.c Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-01-14 17:23 ` [PATCH v6 11/21] arm64: ilp32: introduce binfmt_ilp32.c Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-01-14 17:23 ` [PATCH v6 12/21] arm64: ptrace: handle ptrace_request differently for aarch32 and ilp32 Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-01-14 17:23 ` [PATCH v6 13/21] arm64:ilp32: add sys_ilp32.c and a separate table (in entry.S) to use it Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-01-14 17:23 ` [PATCH v6 14/21] arm64: signal: wrap struct ucontext, fp and lr with struct sigframe Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-01-14 17:23 ` [PATCH v6 15/21] arm64: signal: share lp64 signal routines to ilp32 Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-01-14 17:23 ` [PATCH v6 16/21] arm64: signal32: move ilp32 and aarch32 common code to separated file Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-01-14 17:23 ` [PATCH v6 17/21] arm64: ilp32: introduce ilp32-specific handlers for sigframe Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-02-29  8:27   ` Andreas Schwab
2016-02-29  8:27     ` Andreas Schwab
2016-01-14 17:23 ` [PATCH v6 18/21] arm64:ilp32: add vdso-ilp32 and use for signal return Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-01-14 17:23 ` [PATCH v6 19/21] arm64:ilp32: add ARM64_ILP32 to Kconfig Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-01-14 17:23 ` [PATCH v6 20/21] all: s390: make compat wrappers the generic solution Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-01-14 18:11   ` Yury Norov
2016-01-14 18:11     ` Yury Norov
2016-01-15 12:46   ` Heiko Carstens
2016-01-15 12:46     ` Heiko Carstens
2016-01-19 17:52     ` Yury Norov
2016-01-20  8:16       ` Heiko Carstens
2016-01-20  8:16         ` Heiko Carstens
2016-01-20 12:17         ` Yury Norov
2016-01-20 12:17           ` Yury Norov
2016-01-14 17:23 ` [PATCH v6 21/21] arm64: ilp32: wrap syscalls to remove top 32-bit vulnerability Yury Norov
2016-01-14 17:23   ` Yury Norov
2016-01-18 13:18 ` [RFC5 PATCH v6 00/21] ILP32 for ARM64 Zhangjian (Bamvor)
2016-01-18 13:18   ` Zhangjian (Bamvor)
2016-01-18 13:26   ` Andreas Schwab
2016-01-18 13:26     ` Andreas Schwab
2016-01-18 13:41     ` Bamvor Zhang Jian
2016-01-18 13:41       ` Bamvor Zhang Jian
2016-01-29  9:59 ` Zhangjian (Bamvor)
2016-01-29  9:59   ` Zhangjian (Bamvor)
2016-01-29 17:09   ` Yury Norov
2016-01-29 17:09     ` Yury Norov
2016-01-30  4:15     ` Zhangjian (Bamvor)
2016-01-30  4:15       ` Zhangjian (Bamvor)
2016-02-18 22:35       ` Yury Norov
2016-02-18 22:35         ` Yury Norov
2016-02-19  8:23         ` Arnd Bergmann
2016-02-19  8:23           ` Arnd Bergmann
2016-02-19 12:59           ` Yury Norov
2016-02-19 12:59             ` Yury Norov
2016-02-19 14:06             ` Arnd Bergmann
2016-02-19 14:06               ` Arnd Bergmann
2016-02-29 15:39           ` Yury Norov
2016-02-29 15:39             ` Yury Norov
2016-02-29 16:00           ` Andreas Schwab
2016-02-29 16:00             ` Andreas Schwab
2016-02-29 16:30             ` Arnd Bergmann
2016-02-29 16:30               ` Arnd Bergmann
2016-02-25 10:50         ` Andreas Schwab
2016-02-25 10:50           ` Andreas Schwab
2016-02-25 20:28           ` Yury Norov
2016-02-25 20:28             ` Yury Norov
2016-03-18 10:28             ` Zhangjian (Bamvor)
2016-03-18 10:28               ` Zhangjian (Bamvor)
2016-03-18 15:49               ` Yury Norov
2016-03-18 15:49                 ` Yury Norov
2016-03-18 15:55                 ` Alexander Graf
2016-03-18 15:55                   ` Alexander Graf
2016-03-18 16:46                   ` Yury Norov
2016-03-18 16:46                     ` Yury Norov
2016-03-20  8:12                     ` Zhangjian (Bamvor)
2016-03-20  8:12                       ` Zhangjian (Bamvor)
2016-03-21 11:23                       ` Zhangjian (Bamvor)
2016-03-21 11:23                         ` Zhangjian (Bamvor)
2016-03-21 18:43                         ` Yury Norov
2016-03-21 18:43                           ` Yury Norov
2016-03-22  1:49                           ` Yury Norov [this message]
2016-03-22  1:49                             ` Yury Norov
2016-03-21  9:07                 ` Andreas Schwab
2016-03-21  9:07                   ` Andreas Schwab
2016-03-21  9:43                   ` Arnd Bergmann
2016-03-21  9:43                     ` Arnd Bergmann
2016-03-21 10:52                     ` Andreas Schwab
2016-03-21 10:52                       ` Andreas Schwab
2016-03-21 17:02                       ` Arnd Bergmann
2016-03-21 17:02                         ` Arnd Bergmann
2016-03-26 12:36                     ` Zhangjian (Bamvor)
2016-03-26 12:36                       ` Zhangjian (Bamvor)
2016-03-29 10:58                       ` Arnd Bergmann
2016-03-29 10:58                         ` Arnd Bergmann
2016-03-29 12:01                         ` Yury Norov
2016-03-29 12:01                           ` Yury Norov
2016-03-29 12:42                           ` Arnd Bergmann
2016-03-29 12:42                             ` Arnd Bergmann
2016-03-29 13:21                           ` Zhangjian (Bamvor)
2016-03-29 13:21                             ` Zhangjian (Bamvor)
2016-03-29 13:27                             ` Arnd Bergmann
2016-03-29 13:27                               ` Arnd Bergmann
2016-03-29 15:54                               ` Joseph Myers
2016-03-29 15:54                                 ` Joseph Myers
2016-03-29 19:30                                 ` Arnd Bergmann
2016-03-29 19:30                                   ` Arnd Bergmann
2016-03-29 20:15                                   ` Joseph Myers
2016-03-29 20:15                                     ` Joseph Myers
2016-03-29 20:24                                     ` Arnd Bergmann
2016-03-29 20:24                                       ` Arnd Bergmann
2016-03-29 21:00                                       ` Joseph Myers
2016-03-29 21:00                                         ` Joseph Myers
2016-03-29 21:39                                         ` Arnd Bergmann
2016-03-29 21:39                                           ` Arnd Bergmann
2016-03-31  7:35                               ` Zhangjian (Bamvor)
2016-03-31  7:35                                 ` Zhangjian (Bamvor)
2016-03-21 18:40                   ` Yury Norov
2016-03-21 18:40                     ` Yury Norov
2016-03-26 13:08                     ` Zhangjian (Bamvor)
2016-03-26 13:08                       ` Zhangjian (Bamvor)
2016-03-26 13:45                     ` Zhangjian (Bamvor)
2016-03-26 13:45                       ` Zhangjian (Bamvor)
2016-03-26 22:46                       ` Yury Norov
2016-03-26 22:46                         ` Yury Norov

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=20160322014948.GA9275@yury-N73SV \
    --to=ynorov@caviumnetworks.com \
    --cc=Nathan_Lynch@mentor.com \
    --cc=Prasun.Kapoor@caviumnetworks.com \
    --cc=agraf@suse.de \
    --cc=arnd@arndb.de \
    --cc=bamvor.zhangjian@huawei.com \
    --cc=bamvor.zhangjian@linaro.org \
    --cc=broonie@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=christoph.muellner@theobroma-systems.com \
    --cc=dingtianhong@huawei.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=jan.dakinevich@gmail.com \
    --cc=joseph@codesourcery.com \
    --cc=klimov.linux@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pinskia@gmail.com \
    --cc=schwab@suse.de \
    --cc=schwidefsky@de.ibm.com \
    /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.