[PATCH] fix an undefined behavior

Yunlian Jiang yunlian at chromium.org
Wed Oct 28 14:23:38 PDT 2015


A shift has undefined behaviour if the mathematical result
(lhs * 2^{rhs}) doesn't fit in the range of the resulting type.
In other words, you can't left shift into the sign bit of a
signed integer type.
The error message is:

mm-broadband-modem.c:3308:15: runtime error: left shift of 1 by 31
places cannot be represented in type 'int'
SUMMARY: AddressSanitizer: undefined-behavior mm-broadband-modem.c:3308:15 in
---
 src/mm-broadband-modem.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index d2bfd91..8526646 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -3315,7 +3315,7 @@ get_next_facility_lock_status
(LoadEnabledFacilityLocksContext *ctx)
     guint i;

     for (i = ctx->current; i < sizeof (MMModem3gppFacility) * 8; i++) {
-        guint32 facility = 1 << i;
+        guint32 facility = 1u << i;

         /* Found the next one to query! */
         if (ctx->facilities & facility) {
--
2.6.0.rc2.230.g3dd15c0
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-fix-a-undifined-behavior.patch
Type: text/x-patch
Size: 1223 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/modemmanager-devel/attachments/20151028/24da79e3/attachment.bin>


More information about the ModemManager-devel mailing list