[OE-core] [PATCH 23/42] linux-yocto: Fix build with gcc6 on mips

Khem Raj raj.khem at gmail.com
Wed May 11 17:35:26 UTC 2016


Signed-off-by: Khem Raj <raj.khem at gmail.com>
---
 ...oration-of-MSA-context-in-non-MSA-kernels.patch | 76 ++++++++++++++++++++++
 meta/recipes-kernel/linux/linux-yocto_4.4.bb       |  1 +
 2 files changed, 77 insertions(+)
 create mode 100644 meta/recipes-kernel/linux/linux-yocto/v2-MIPS-Prevent-restoration-of-MSA-context-in-non-MSA-kernels.patch

diff --git a/meta/recipes-kernel/linux/linux-yocto/v2-MIPS-Prevent-restoration-of-MSA-context-in-non-MSA-kernels.patch b/meta/recipes-kernel/linux/linux-yocto/v2-MIPS-Prevent-restoration-of-MSA-context-in-non-MSA-kernels.patch
new file mode 100644
index 0000000..8511df6
--- /dev/null
+++ b/meta/recipes-kernel/linux/linux-yocto/v2-MIPS-Prevent-restoration-of-MSA-context-in-non-MSA-kernels.patch
@@ -0,0 +1,76 @@
+From patchwork Thu Apr 21 17:04:53 2016
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [v2] MIPS: Prevent "restoration" of MSA context in non-MSA kernels
+From: Paul Burton <paul.burton at imgtec.com>
+X-Patchwork-Id: 13164
+Message-Id: <1461258293-8863-1-git-send-email-paul.burton at imgtec.com>
+To: <linux-mips at linux-mips.org>, Ralf Baechle <ralf at linux-mips.org>
+Cc: Michal Toman <michal.toman at imgtec.com>,
+ Paul Burton <paul.burton at imgtec.com>, James Hogan <james.hogan at imgtec.com>,
+ "stable # v4 . 3+" <stable at vger.kernel.org>
+Date: Thu, 21 Apr 2016 18:04:53 +0100
+
+If a kernel doesn't support MSA context (ie. CONFIG_CPU_HAS_MSA=n) then
+it will only keep 64 bits per FP register in thread context, and the
+calls to set_fpr64 in restore_msa_extcontext will overrun the end of the
+FP register context into the FCSR & MSACSR values. GCC 6.x has become
+smart enough to detect this & complain like so:
+
+    arch/mips/kernel/signal.c: In function 'protected_restore_fp_context':
+    ./arch/mips/include/asm/processor.h:114:17: error: array subscript is above array bounds [-Werror=array-bounds]
+      fpr->val##width[FPR_IDX(width, idx)] = val;   \
+      ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
+    ./arch/mips/include/asm/processor.h:118:1: note: in expansion of macro 'BUILD_FPR_ACCESS'
+     BUILD_FPR_ACCESS(64)
+
+The only way to trigger this code to run would be for a program to set
+up an artificial extended MSA context structure following a sigframe &
+execute sigreturn. Whilst this doesn't allow a program to write to any
+state that it couldn't already, it makes little sense to allow this
+"restoration" of MSA context in a system that doesn't support MSA.
+
+Fix this by killing a program with SIGSYS if it tries something as crazy
+as "restoring" fake MSA context in this way, also fixing the build error
+& allowing for most of restore_msa_extcontext to be optimised out of
+kernels without support for MSA.
+
+Signed-off-by: Paul Burton <paul.burton at imgtec.com>
+Reported-by: Michal Toman <michal.toman at imgtec.com>
+Fixes: bf82cb30c7e5 ("MIPS: Save MSA extended context around signals")
+Cc: James Hogan <james.hogan at imgtec.com>
+Cc: stable <stable at vger.kernel.org> # v4.3+
+---
+
+Changes in v2:
+- Prevent potential for malformed errno/signal from protected_restore_fp_context.
+
+ arch/mips/kernel/signal.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c
+index bf792e2..fc7c1f0 100644
+--- a/arch/mips/kernel/signal.c
++++ b/arch/mips/kernel/signal.c
+@@ -195,6 +195,9 @@ static int restore_msa_extcontext(void __user *buf, unsigned int size)
+ 	unsigned int csr;
+ 	int i, err;
+ 
++	if (!config_enabled(CONFIG_CPU_HAS_MSA))
++		return SIGSYS;
++
+ 	if (size != sizeof(*msa))
+ 		return -EINVAL;
+ 
+@@ -398,8 +401,8 @@ int protected_restore_fp_context(void __user *sc)
+ 	}
+ 
+ fp_done:
+-	if (used & USED_EXTCONTEXT)
+-		err |= restore_extcontext(sc_to_extcontext(sc));
++	if (!err && (used & USED_EXTCONTEXT))
++		err = restore_extcontext(sc_to_extcontext(sc));
+ 
+ 	return err ?: sig;
+ }
diff --git a/meta/recipes-kernel/linux/linux-yocto_4.4.bb b/meta/recipes-kernel/linux/linux-yocto_4.4.bb
index fbb592a..a55ac93 100644
--- a/meta/recipes-kernel/linux/linux-yocto_4.4.bb
+++ b/meta/recipes-kernel/linux/linux-yocto_4.4.bb
@@ -24,6 +24,7 @@ SRCREV_meta ?= "9ab4787fe2aea2ae0fcc31a5e067eaba19ef64c8"
 SRC_URI = "git://git.yoctoproject.org/linux-yocto-4.4.git;name=machine;branch=${KBRANCH}; \
            git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-4.4;destsuffix=${KMETA} \
            file://0001-powerpc-ptrace-Fix-out-of-bounds-array-access-warnin.patch \
+           file://v2-MIPS-Prevent-restoration-of-MSA-context-in-non-MSA-kernels.patch \
 "
 
 LINUX_VERSION ?= "4.4.3"
-- 
2.8.2




More information about the Openembedded-core mailing list