This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
UBSan fix: avoid undefined behaviour in bitmask
- From: Andrew Haley <aph at redhat dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>, GCJ-patches <java-patches at gcc dot gnu dot org>
- Cc: Jakub Jelinek <jakub at redhat dot com>
- Date: Fri, 28 Mar 2014 17:38:56 +0000
- Subject: UBSan fix: avoid undefined behaviour in bitmask
- Authentication-results: sourceware.org; auth=none
UBSan detected that we were trying to set a non-existent bit in a mask.
I don't think it has mattered before now because when this happens the
value in the mask is not used. However, better safe than sorry.
Andrew.
2014-03-28 Andrew Haley <aph@redhat.com>
* boehm.c (mark_reference_fields): Avoid unsigned integer overflow
when calculating an index into a bitmap descriptor.
Index: gcc/java/boehm.c
===================================================================
--- gcc/java/boehm.c (revision 208839)
+++ gcc/java/boehm.c (working copy)
@@ -107,7 +107,11 @@
bits for all words in the record. This is conservative, but the
size_words != 1 case is impossible in regular java code. */
for (i = 0; i < size_words; ++i)
- *mask = (*mask).set_bit (ubit - count - i - 1);
+ {
+ int bitpos = ubit - count - i - 1;
+ if (bitpos >= 0)
+ *mask = (*mask).set_bit (bitpos);
+ }
if (count >= ubit - 2)
*pointer_after_end = 1;