mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-24 12:23:31 +08:00
PR22245, Fix potential UB in bfd_set_error
Passing enum as a first argument to variadic argument function may lead to undefined behavior. The explanation on CERT site: https://www.securecoding.cert.org/confluence/display/cplusplus/ EXP58-CPP.+Pass+an+object+of+the+correct+type+to+va_start The bug was found by Kirill Nedostoev (nedostoev.ka@phystech.edu) when he tried to build GNU binutils with Clang 7. PR 22245 * bfd.c (bfd_set_error): Avoid UB on passing arg to va_start that undergoes default promotion. * bfd-in2.h: Regenerate.
This commit is contained in:

committed by
Alan Modra

parent
ca2a727a5b
commit
9ba5f27cdd
@ -1,3 +1,10 @@
|
|||||||
|
2017-10-04 Pavel I. Kryukov <kryukov@frtk.ru>
|
||||||
|
|
||||||
|
PR 22245
|
||||||
|
* bfd.c (bfd_set_error): Avoid UB on passing arg to va_start that
|
||||||
|
undergoes default promotion.
|
||||||
|
* bfd-in2.h: Regenerate.
|
||||||
|
|
||||||
2017-10-02 Alan Modra <amodra@gmail.com>
|
2017-10-02 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* elf32-ppc.c (ppc_elf_relocate_section): Fix comment typo.
|
* elf32-ppc.c (ppc_elf_relocate_section): Fix comment typo.
|
||||||
|
@ -7054,7 +7054,7 @@ bfd_error_type;
|
|||||||
|
|
||||||
bfd_error_type bfd_get_error (void);
|
bfd_error_type bfd_get_error (void);
|
||||||
|
|
||||||
void bfd_set_error (bfd_error_type error_tag, ...);
|
void bfd_set_error (int error_tag, ...);
|
||||||
|
|
||||||
const char *bfd_errmsg (bfd_error_type error_tag);
|
const char *bfd_errmsg (bfd_error_type error_tag);
|
||||||
|
|
||||||
|
@ -497,7 +497,7 @@ FUNCTION
|
|||||||
bfd_set_error
|
bfd_set_error
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
void bfd_set_error (bfd_error_type error_tag, ...);
|
void bfd_set_error (int error_tag, ...);
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
Set the BFD error condition to be @var{error_tag}.
|
Set the BFD error condition to be @var{error_tag}.
|
||||||
@ -507,7 +507,7 @@ DESCRIPTION
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void
|
||||||
bfd_set_error (bfd_error_type error_tag, ...)
|
bfd_set_error (int error_tag, ...)
|
||||||
{
|
{
|
||||||
bfd_error = error_tag;
|
bfd_error = error_tag;
|
||||||
if (error_tag == bfd_error_on_input)
|
if (error_tag == bfd_error_on_input)
|
||||||
|
Reference in New Issue
Block a user