From: Christophe Leroy <christophe.leroy@csgroup.eu> To: Dmitry Safonov <dima@arista.com>, linux-kernel@vger.kernel.org Cc: Dmitry Safonov <0x7f454c46@gmail.com>, Andrei Vagin <avagin@gmail.com>, Andy Lutomirski <luto@kernel.org>, Benjamin Herrenschmidt <benh@kernel.crashing.org>, Laurent Dufour <ldufour@linux.ibm.com>, Michael Ellerman <mpe@ellerman.id.au>, Paul Mackerras <paulus@samba.org>, linuxppc-dev@lists.ozlabs.org, stable@vger.kernel.org, Laurent Dufour <ldufour@linux.ibm.com> Subject: Re: [PATCH] powerpc/vdso: Separate vvar vma from vdso Date: Sat, 27 Mar 2021 18:19:37 +0100 [thread overview] Message-ID: <52562f46-6767-ba04-7301-04c6209fe4f1@csgroup.eu> (raw) In-Reply-To: <20210326191720.138155-1-dima@arista.com> Le 26/03/2021 à 20:17, Dmitry Safonov a écrit : > Since commit 511157ab641e ("powerpc/vdso: Move vdso datapage up front") > VVAR page is in front of the VDSO area. In result it breaks CRIU > (Checkpoint Restore In Userspace) [1], where CRIU expects that "[vdso]" > from /proc/../maps points at ELF/vdso image, rather than at VVAR data page. > Laurent made a patch to keep CRIU working (by reading aux vector). > But I think it still makes sence to separate two mappings into different > VMAs. It will also make ppc64 less "special" for userspace and as > a side-bonus will make VVAR page un-writable by debugger (which previously > would COW page and can be unexpected). > > I opportunistically Cc stable on it: I understand that usually such > stuff isn't a stable material, but that will allow us in CRIU have > one workaround less that is needed just for one release (v5.11) on > one platform (ppc64), which we otherwise have to maintain. Why is that a workaround, and why for one release only ? I think the solution proposed by Laurentto use the aux vector AT_SYSINFO_EHDR should work with any past and future release. > I wouldn't go as far as to say that the commit 511157ab641e is ABI > regression as no other userspace got broken, but I'd really appreciate > if it gets backported to v5.11 after v5.12 is released, so as not > to complicate already non-simple CRIU-vdso code. Thanks! > > Cc: Andrei Vagin <avagin@gmail.com> > Cc: Andy Lutomirski <luto@kernel.org> > Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> > Cc: Christophe Leroy <christophe.leroy@csgroup.eu> > Cc: Laurent Dufour <ldufour@linux.ibm.com> > Cc: Michael Ellerman <mpe@ellerman.id.au> > Cc: Paul Mackerras <paulus@samba.org> > Cc: linuxppc-dev@lists.ozlabs.org > Cc: stable@vger.kernel.org # v5.11 > [1]: https://github.com/checkpoint-restore/criu/issues/1417 > Signed-off-by: Dmitry Safonov <dima@arista.com> > Tested-by: Christophe Leroy <christophe.leroy@csgroup.eu> I tested it with sifreturn_vdso selftest and it worked, because that selftest doesn't involve VDSO data. But if I do a mremap() on the VDSO text vma without remapping VVAR to keep the same distance between the two vmas, gettimeofday() crashes. The reason is that the code obtains the address of the data by calculating a fix difference from its own address with the below macro, the delta being resolved at link time: .macro get_datapage ptr bcl 20, 31, .+4 999: mflr \ptr #if CONFIG_PPC_PAGE_SHIFT > 14 addis \ptr, \ptr, (_vdso_datapage - 999b)@ha #endif addi \ptr, \ptr, (_vdso_datapage - 999b)@l .endm So the datapage needs to remain at the same distance from the code at all time. Wondering how the other architectures do to have two independant VMAs and be able to move one independantly of the other. Christophe
WARNING: multiple messages have this Message-ID (diff)
From: Christophe Leroy <christophe.leroy@csgroup.eu> To: Dmitry Safonov <dima@arista.com>, linux-kernel@vger.kernel.org Cc: Dmitry Safonov <0x7f454c46@gmail.com>, stable@vger.kernel.org, Andrei Vagin <avagin@gmail.com>, Paul Mackerras <paulus@samba.org>, Andy Lutomirski <luto@kernel.org>, Laurent Dufour <ldufour@linux.ibm.com>, linuxppc-dev@lists.ozlabs.org Subject: Re: [PATCH] powerpc/vdso: Separate vvar vma from vdso Date: Sat, 27 Mar 2021 18:19:37 +0100 [thread overview] Message-ID: <52562f46-6767-ba04-7301-04c6209fe4f1@csgroup.eu> (raw) In-Reply-To: <20210326191720.138155-1-dima@arista.com> Le 26/03/2021 à 20:17, Dmitry Safonov a écrit : > Since commit 511157ab641e ("powerpc/vdso: Move vdso datapage up front") > VVAR page is in front of the VDSO area. In result it breaks CRIU > (Checkpoint Restore In Userspace) [1], where CRIU expects that "[vdso]" > from /proc/../maps points at ELF/vdso image, rather than at VVAR data page. > Laurent made a patch to keep CRIU working (by reading aux vector). > But I think it still makes sence to separate two mappings into different > VMAs. It will also make ppc64 less "special" for userspace and as > a side-bonus will make VVAR page un-writable by debugger (which previously > would COW page and can be unexpected). > > I opportunistically Cc stable on it: I understand that usually such > stuff isn't a stable material, but that will allow us in CRIU have > one workaround less that is needed just for one release (v5.11) on > one platform (ppc64), which we otherwise have to maintain. Why is that a workaround, and why for one release only ? I think the solution proposed by Laurentto use the aux vector AT_SYSINFO_EHDR should work with any past and future release. > I wouldn't go as far as to say that the commit 511157ab641e is ABI > regression as no other userspace got broken, but I'd really appreciate > if it gets backported to v5.11 after v5.12 is released, so as not > to complicate already non-simple CRIU-vdso code. Thanks! > > Cc: Andrei Vagin <avagin@gmail.com> > Cc: Andy Lutomirski <luto@kernel.org> > Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> > Cc: Christophe Leroy <christophe.leroy@csgroup.eu> > Cc: Laurent Dufour <ldufour@linux.ibm.com> > Cc: Michael Ellerman <mpe@ellerman.id.au> > Cc: Paul Mackerras <paulus@samba.org> > Cc: linuxppc-dev@lists.ozlabs.org > Cc: stable@vger.kernel.org # v5.11 > [1]: https://github.com/checkpoint-restore/criu/issues/1417 > Signed-off-by: Dmitry Safonov <dima@arista.com> > Tested-by: Christophe Leroy <christophe.leroy@csgroup.eu> I tested it with sifreturn_vdso selftest and it worked, because that selftest doesn't involve VDSO data. But if I do a mremap() on the VDSO text vma without remapping VVAR to keep the same distance between the two vmas, gettimeofday() crashes. The reason is that the code obtains the address of the data by calculating a fix difference from its own address with the below macro, the delta being resolved at link time: .macro get_datapage ptr bcl 20, 31, .+4 999: mflr \ptr #if CONFIG_PPC_PAGE_SHIFT > 14 addis \ptr, \ptr, (_vdso_datapage - 999b)@ha #endif addi \ptr, \ptr, (_vdso_datapage - 999b)@l .endm So the datapage needs to remain at the same distance from the code at all time. Wondering how the other architectures do to have two independant VMAs and be able to move one independantly of the other. Christophe
next prev parent reply other threads:[~2021-03-27 17:20 UTC|newest] Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-03-26 19:17 [PATCH] powerpc/vdso: Separate vvar vma from vdso Dmitry Safonov 2021-03-26 19:17 ` Dmitry Safonov 2021-03-27 17:19 ` Christophe Leroy [this message] 2021-03-27 17:19 ` Christophe Leroy 2021-03-27 17:43 ` Dmitry Safonov 2021-03-27 17:43 ` Dmitry Safonov 2021-03-29 9:51 ` Laurent Dufour 2021-03-29 9:51 ` Laurent Dufour 2021-03-29 15:14 ` Laurent Dufour 2021-03-29 15:14 ` Laurent Dufour 2021-03-29 19:59 ` Dmitry Safonov 2021-03-29 19:59 ` Dmitry Safonov 2021-03-30 8:41 ` Christophe Leroy 2021-03-30 8:41 ` Christophe Leroy 2021-03-31 9:59 ` Michael Ellerman 2021-03-31 9:59 ` Michael Ellerman 2021-03-31 18:53 ` Dmitry Safonov 2021-03-31 18:53 ` Dmitry Safonov 2021-03-30 10:17 ` Christophe Leroy 2021-03-30 10:17 ` Christophe Leroy 2021-03-31 18:15 ` Dmitry Safonov 2021-03-31 18:15 ` Dmitry Safonov 2021-04-19 3:59 ` Michael Ellerman 2021-04-19 3:59 ` Michael Ellerman
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=52562f46-6767-ba04-7301-04c6209fe4f1@csgroup.eu \ --to=christophe.leroy@csgroup.eu \ --cc=0x7f454c46@gmail.com \ --cc=avagin@gmail.com \ --cc=benh@kernel.crashing.org \ --cc=dima@arista.com \ --cc=ldufour@linux.ibm.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=luto@kernel.org \ --cc=mpe@ellerman.id.au \ --cc=paulus@samba.org \ --cc=stable@vger.kernel.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: 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.