This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] MIPS: Prevent buffer overrun in uninitialised variable fix
- From: Matthew Fortune <Matthew dot Fortune at imgtec dot com>
- To: "Jeff Law <law at redhat dot com> (law at redhat dot com)" <law at redhat dot com>, "'gcc-patches at gcc dot gnu dot org' (gcc-patches at gcc dot gnu dot org)" <gcc-patches at gcc dot gnu dot org>
- Cc: "jakub at redhat dot com" <jakub at redhat dot com>
- Date: Thu, 20 Apr 2017 12:49:49 +0000
- Subject: [PATCH] MIPS: Prevent buffer overrun in uninitialised variable fix
- Authentication-results: sourceware.org; auth=none
Hi Jeff,
I missed a load of test failures while on vacation and just noticed
that the fix you did for a potentially uninitialized variable warning
is overwriting the stack and breaking MSA in MIPS.
I guess you may have intended to set the length appropriately and
only zero the elements that would not be set in the loop:
memset (&orig_perm[nelt], 0, MAX_VECT_LEN - nelt);
but I switched it to just zero initialise the whole array for
simplicity in the patch below.
I thought I'd check with you before committing. Obviously I'd like to
apply this to GCC 7 branch as well.
Thanks,
Matthew
gcc/
* config/mips/mips.c (mips_expand_vec_perm_const): Re-fix
uninitialized variable warning to avoid buffer overrun.
---
gcc/ChangeLog | 5 +++++
gcc/config/mips/mips.c | 2 +-
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c908048..80d3436 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2017-04-20 Matthew Fortune <matthew.fortune@imgtec.com>
+
+ * config/mips/mips.c (mips_expand_vec_perm_const): Re-fix
+ uninitialized variable warning to avoid buffer overrun.
+
2017-04-20 Alexander Monakov <amonakov@ispras.ru>
PR other/71250
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index b35fba7..6bfd86a 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -21358,7 +21358,7 @@ mips_expand_vec_perm_const (rtx operands[4])
/* This is overly conservative, but ensures we don't get an
uninitialized warning on ORIG_PERM. */
- memset (&orig_perm[nelt], 0, MAX_VECT_LEN);
+ memset (orig_perm, 0, MAX_VECT_LEN);
for (i = which = 0; i < nelt; ++i)
{
rtx e = XVECEXP (sel, 0, i);
--
2.2.1