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
next prev parent 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: 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.