From 4b4ee3ee0beb4f39efe5eb9581f07bddc4201240 Mon Sep 17 00:00:00 2001 From: Martin Schwidefsky Date: Mon, 1 Dec 2014 18:05:35 +0100 Subject: [PATCH] s390/simd: clear vector register pointer on fork/clone The copy_thread function fails to reset the p->thread.vxrs pointer. This causes the child to use the same vector register save area, causing both data corruptions and multiple frees of the memory for the save area after the tasks sharing the save area terminate. Signed-off-by: Martin Schwidefsky --- arch/s390/kernel/process.c | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c index 4192dfd55ddc..aa7a83948c7b 100644 --- a/arch/s390/kernel/process.c +++ b/arch/s390/kernel/process.c @@ -153,6 +153,7 @@ int copy_thread(unsigned long clone_flags, unsigned long new_stackp, save_fp_ctl(&p->thread.fp_regs.fpc); save_fp_regs(p->thread.fp_regs.fprs); p->thread.fp_regs.pad = 0; + p->thread.vxrs = NULL; /* Set a new TLS ? */ if (clone_flags & CLONE_SETTLS) { unsigned long tls = frame->childregs.gprs[6];