From: Mark Wielaard Date: Sun, 28 Apr 2019 11:29:53 +0000 (+0200) Subject: libdwfl: Make sure to left shift a unsigned 64bit value in expr_eval. X-Git-Tag: elfutils-0.177~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f42d2dc90d2e0cfb3974f67e2ffe3d7b1723157;p=thirdparty%2Felfutils.git libdwfl: Make sure to left shift a unsigned 64bit value in expr_eval. In frame_unwind.c expr_eval we left shift 1 up to 56 bits. We have to make sure we don't left shift a 32bit signed value (that would be undefined behavior). So shift a 1ULL value instead. Signed-off-by: Mark Wielaard --- diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 3e19d9bd1..7c9a018b8 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2019-04-28 Mark Wielaard + + * frame_unwind.c (expr_eval): Make sure we left shift a unsigned + 64bit value. + 2019-04-28 Mark Wielaard * cu.c (addrarange): Only call realloc when naranges is not zero. diff --git a/libdwfl/frame_unwind.c b/libdwfl/frame_unwind.c index 8da691ee5..d7dfa5a94 100644 --- a/libdwfl/frame_unwind.c +++ b/libdwfl/frame_unwind.c @@ -336,7 +336,7 @@ expr_eval (Dwfl_Frame *state, Dwarf_Frame *frame, const Dwarf_Op *ops, val1 >>= (addr_bytes - op->number) * 8; #else if (op->number < 8) - val1 &= (1 << (op->number * 8)) - 1; + val1 &= (1ULL << (op->number * 8)) - 1; #endif } if (! push (val1))