Re: [PATCHv2] ARM32: Support mremap() for sigpage/vDSO

From: Dmitry Safonov
Date: Wed May 24 2017 - 06:13:58 EST


+ Adding back to CC x86 guys - as I've removed in ping messages.

On 05/23/2017 11:09 PM, Russell King - ARM Linux wrote:
On Thu, May 18, 2017 at 02:13:29PM +0300, Dmitry Safonov wrote:
On 04/25/2017 08:18 PM, Dmitry Safonov wrote:
On 04/14/2017 04:25 PM, Dmitry Safonov wrote:
CRIU restores application mappings on the same place where they
were before Checkpoint. That means, that we need to move vDSO
and sigpage during restore on exactly the same place where
they were before C/R.

Make mremap() code update mm->context.{sigpage,vdso} pointers
during VMA move. Sigpage is used for landing after handling
a signal - if the pointer is not updated during moving, the
application might crash on any signal after mremap().

vDSO pointer on ARM32 is used only for setting auxv at this moment,
update it during mremap() in case of future usage.

Without those updates, current work of CRIU on ARM32 is not reliable.
Historically, we error Checkpointing if we find vDSO page on ARM32
and suggest user to disable CONFIG_VDSO.
But that's not correct - it goes from x86 where signal processing
is ended in vDSO blob. For arm32 it's sigpage, which is not disabled
with `CONFIG_VDSO=n'.

Looks like C/R was working by luck - because userspace on ARM32 at
this moment always sets SA_RESTORER.

Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
Cc: Russell King <linux@xxxxxxxxxxxxxxx>
Cc: Will Deacon <will.deacon@xxxxxxx>
Cc: Andy Lutomirski <luto@xxxxxxxxxxxxxx>
Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
Cc: Cyrill Gorcunov <gorcunov@xxxxxxxxxx>
Cc: Pavel Emelyanov <xemul@xxxxxxxxxxxxx>
Cc: Christopher Covington <cov@xxxxxxxxxxxxxx>
Signed-off-by: Dmitry Safonov <dsafonov@xxxxxxxxxxxxx>
---
v2: (buildbot) Fix (unsinged long) to (void*) cast warning.

arch/arm/kernel/process.c | 8 ++++++++
arch/arm/kernel/vdso.c | 18 ++++++++++++++++++
arch/x86/entry/vdso/vma.c | 3 ---
mm/mmap.c | 4 ++++
4 files changed, 30 insertions(+), 3 deletions(-)

Ping?

Ping?

I'm mostly happy with the ARM bits, but I can't take the patch without
acks from others because it touches other architectures/generic code.


Fair enough, thanks.

Andy, does moving of this WARN_ON() looks good to you?
I've done it to reuse it over arches and between vdso/sigpage mappings,
reducing code duplication.

Here is the patch, so you don't need to search it in the mailbox:
https://patchwork.kernel.org/patch/9681273/

--
Dmitry