mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-25 04:39:24 +08:00
Avoid possible pointer wrap
PTR supplied to these macros can be read from user input, END is an end of buffer pointer. It's safer to do arithmetic on END than on PTR. * dwarf.c (SAFE_BYTE_GET): Check bounds by subtracting amount from END rather than adding amount to PTR. (SAFE_SIGNED_BYTE_GET, SAFE_BYTE_GET64): Likewise.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2021-05-10 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* dwarf.c (SAFE_BYTE_GET): Check bounds by subtracting amount from
|
||||||
|
END rather than adding amount to PTR.
|
||||||
|
(SAFE_SIGNED_BYTE_GET, SAFE_BYTE_GET64): Likewise.
|
||||||
|
|
||||||
2021-05-09 Alan Modra <amodra@gmail.com>
|
2021-05-09 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* objcopy.c (eq_string): Delete.
|
* objcopy.c (eq_string): Delete.
|
||||||
|
@ -406,7 +406,7 @@ read_leb128 (unsigned char *data,
|
|||||||
amount, (int) sizeof (VAL)); \
|
amount, (int) sizeof (VAL)); \
|
||||||
amount = sizeof (VAL); \
|
amount = sizeof (VAL); \
|
||||||
} \
|
} \
|
||||||
if (((PTR) + amount) >= (END)) \
|
if ((PTR) >= (END) - amount) \
|
||||||
{ \
|
{ \
|
||||||
if ((PTR) < (END)) \
|
if ((PTR) < (END)) \
|
||||||
amount = (END) - (PTR); \
|
amount = (END) - (PTR); \
|
||||||
@ -434,7 +434,7 @@ read_leb128 (unsigned char *data,
|
|||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
unsigned int amount = (AMOUNT); \
|
unsigned int amount = (AMOUNT); \
|
||||||
if (((PTR) + amount) >= (END)) \
|
if ((PTR) >= (END) - amount) \
|
||||||
{ \
|
{ \
|
||||||
if ((PTR) < (END)) \
|
if ((PTR) < (END)) \
|
||||||
amount = (END) - (PTR); \
|
amount = (END) - (PTR); \
|
||||||
@ -460,7 +460,7 @@ read_leb128 (unsigned char *data,
|
|||||||
#define SAFE_BYTE_GET64(PTR, HIGH, LOW, END) \
|
#define SAFE_BYTE_GET64(PTR, HIGH, LOW, END) \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
if (((PTR) + 8) <= (END)) \
|
if ((PTR) <= (END) - 8) \
|
||||||
{ \
|
{ \
|
||||||
byte_get_64 ((PTR), (HIGH), (LOW)); \
|
byte_get_64 ((PTR), (HIGH), (LOW)); \
|
||||||
} \
|
} \
|
||||||
|
Reference in New Issue
Block a user