Commit Graph

15683 Commits

Author SHA1 Message Date
GDB Administrator cf87a78af0 Automatic date update in version.in 2020-01-01 00:00:15 +00:00
Alan Modra bf31e60440 asan: alpha-vms: Heap-buffer-overflow
This fixes yet more errors in the alpha-vms buffer size checks.

	* vms-alpha.c (_bfd_vms_slurp_eisd): Don't overflow when checking
	offset.  Don't overflow when checking rec_size, and do allow
	rec_size to the end of the buffer.  Ensure eisd->type can be
	accessed, not just the first 32 bytes.  Don't call
	_bfd_vms_save_counted_string with zero length remaining.  Fail
	on empty string section name.
	(_bfd_vms_slurp_egsd): Formatting.  Catch more reads past end
	of record size.  Correct remaining length calculation.  Fail
	on empty string section name.  Consolidate error paths.
2019-12-31 23:30:21 +10:30
GDB Administrator 930be66764 Automatic date update in version.in 2019-12-31 00:00:32 +00:00
Alan Modra a7ac9aa525 vms-alpha.c object_p memory leaks
* vms-alpha.c (alpha_vms_free_private): New function, extracted..
	(vms_close_and_cleanup): ..from here.
	(alpha_vms_object_p): Call alpha_vms_free_private on failure.
2019-12-30 23:50:35 +10:30
Alan Modra 37d5ab199b coff object_p memory leaks
* coffgen.c (coff_real_object_p): Free malloc'd memory on failure.
2019-12-30 23:50:35 +10:30
Alan Modra 6a89db5c95 archive.c bfd_zalloc
Quite a few bfd_zalloc calls are wasting time clearing memory, and
should be bfd_alloc instead.

	* archive.c (do_slurp_bsd_armap): Use bfd_alloc rather than
	bfd_zalloc when memory is all written after the call.
	(do_slurp_coff_armap): Likewise.  Set bfd_error on ridiculously
	large allocations that overflow bfd_size_type.  Use just one
	bfd_release on error exit.
	(_bfd_slurp_extended_name_table): Use bfd_alloc for extended_names,
	clear last byte rather than the entire array.  Use bfd_alloc for
	string table.  Rearrange and simplify code copying file names.
2019-12-30 13:29:24 +10:30
GDB Administrator 61b3df8f5b Automatic date update in version.in 2019-12-30 00:00:19 +00:00
Alan Modra 401e101e02 ubsan: alpha-vms: shift exponent is too large
* vms-alpha.c (_bfd_vms_slurp_egsd): Make base_addr a bfd_vma.
	Limit alignment power.  Correct and simplify alignment expression.
	(evax_bfd_print_relocation_records): Avoid signed shift left.
2019-12-29 21:26:00 +10:30
Alan Modra 37d2e9c7b1 asan: alpha-vms: memory leaks
* vms-misc.c (_bfd_vms_save_sized_string): Add abfd param, make
	size a size_t.  Use bfd_alloc rather than bfd_malloc.
	(_bfd_vms_save_counted_string): Similarly.
	* vms.h (_bfd_vms_save_sized_string): Update prototype.
	(_bfd_vms_save_counted_string): Likewise.
	* vms-alpha.c (_bfd_vms_slurp_ehdr): Adjust
	_bfd_vms_save_counted_string and bfd_vms_save_sized_string calls.
	(_bfd_vms_slurp_egsd, parse_module): Likewise.
	(_bfd_vms_slurp_eisd): Likewise.  Check return status.
	(alpha_vms_bfd_link_hash_table_free): New function.
	(alpha_vms_bfd_link_hash_table_create): Arrange to call it.
	(vms_close_and_cleanup): Free more memory.  Don't release tdata.
2019-12-29 21:26:00 +10:30
Alan Modra f5d35bb7a5 coff_close_and_cleanup
Fixes leaks in _bfd_coff_get_external_symbols and
_bfd_coff_read_string_table.

	* coffcode.h (coff_close_and_cleanup): Redefine to..
	* coffgen.c (_bfd_coff_close_and_cleanup): ..this.  New function.
	* libcoff-in.h (_bfd_coff_close_and_cleanup): Declare.
	* libcoff.h: Regenerate.
2019-12-29 21:26:00 +10:30
Alan Modra a6e5765ff1 PR15350, Fix compressed debug sections for PE targets
PR 15350
	* bfd.c (bfd_update_compression_header): Write zlib header for
	formats other than ELF too.
2019-12-29 21:25:39 +10:30
GDB Administrator 25d8195c02 Automatic date update in version.in 2019-12-29 00:00:17 +00:00
GDB Administrator 1ddaf334cf Automatic date update in version.in 2019-12-28 00:00:43 +00:00
GDB Administrator b0d674e2b4 Automatic date update in version.in 2019-12-27 00:00:29 +00:00
Alan Modra e5af216040 asan: som: heap-buffer-overflow
Triggered by overflow of size calulation resulting in a too small
buffer.  The testcase found one of the som_bfd_count_ar_symbols
problems.

	* som.c (setup_sections): Don't overflow space_strings_size.  Use
	bfd_malloc2 to catch overflow of size calculation.
	(som_prep_for_fixups): Use bfd_zalloc2 to catch overflow of size
	calculation.
	(som_build_and_write_symbol_table): Similarly use bfd_zmalloc2.
	(som_slurp_symbol_table): Similarly use bfd_zmalloc2, bfd_malloc2,
	and bfd_zalloc2.
	(bfd_som_attach_aux_hdr): Use size_t vars for string length.
	(som_bfd_count_ar_symbols): Use bfd_malloc2 to catch overflow of
	size calculation.  Use size_t vars for length and catch overflow.
	(som_slurp_armap): Use bfd_alloc2 to catch overflow of size
	calculation.
	(som_bfd_ar_write_symbol_stuff): Similarly use bfd_zmalloc2 and
	bfd_malloc2.  Perform size calculations in bfd_size_type.
2019-12-26 17:49:03 +10:30
Hannes Domani f5311f2509 pe_bfd_read_buildid memory leak
* peicode.h (pe_bfd_read_buildid): Free data.
2019-12-26 12:38:49 +10:30
GDB Administrator f096cbc296 Automatic date update in version.in 2019-12-26 00:00:50 +00:00
GDB Administrator b68476f136 Automatic date update in version.in 2019-12-25 00:00:23 +00:00
GDB Administrator c71a963d8e Automatic date update in version.in 2019-12-24 00:00:15 +00:00
Alan Modra 2c0e48e5b7 asan: vms-alpha: heap-buffer-overflow
Two buffer overflows, and some over restrictive length checks.

	* vms-alpha.c (add_symbol): Add "max" parameter.  Error on string
	length larger than max.
	(_bfd_vms_slurp_egsd): Ensure record is at least large enough to
	read string length byte, error if not.  Pass size to add_symbol.
	(_bfd_vms_slurp_etir): Don't read past end of buffer when reading
	type and length.  Allow read of last byte in buffer.
2019-12-23 18:06:23 +10:30
Alan Modra 27c1c4271a ubsan: wasm: shift is too large for 64-bit type 'bfd_vma'
bfd/
	* wasm-module.c (wasm_read_leb128): Don't allow oversize shifts.
	Catch value overflow.  Sign extend only on terminating byte.
opcodes/
	* wasm32-dis.c (wasm_read_leb128): Don't allow oversize shifts.
	Catch value overflow.  Sign extend only on terminating byte.
2019-12-23 17:58:09 +10:30
GDB Administrator 09b0d8a75f Automatic date update in version.in 2019-12-23 00:00:18 +00:00
GDB Administrator 76a0b485ec Automatic date update in version.in 2019-12-22 00:01:09 +00:00
GDB Administrator 39aa149769 Automatic date update in version.in 2019-12-21 00:00:23 +00:00
Alan Modra e76832f125 ubsan: xtensa: left shift cannot be represented in type 'int'
* xtensa-isa.c (xtensa_insnbuf_from_chars): Avoid signed overflow.
2019-12-20 13:36:06 +10:30
Alan Modra 15d2859fdd ubsan: hppa: left shift of negative value
bfd/
	* libhppa.h (hppa_field_adjust, bfd_hppa_insn2fmt): Delete forward
	declaration.  Move ATTRIBUTE_UNUSED to definition.
	(sign_extend, low_sign_extend, sign_unext, low_sign_unext),
	(re_assemble_3, re_assemble_12, re_assemble_14, re_assemble_16),
	(re_assemble_17, re_assemble_21, re_assemble_22): Likewise.  Make
	args and return value unsigned.  Use unsigned variables.
	(hppa_rebuild_insn): Similarly.
opcodes/
	* hppa-dis.c (extract_16, extract_21, print_insn_hppa): Use
	unsigned variables.
2019-12-20 13:36:06 +10:30
Alan Modra 9d78076ef8 bfd_check_format memory leak
* format.c (bfd_check_format_matches): Free matching_vector when
	not returning matching target strings.
2019-12-20 13:36:06 +10:30
Alan Modra fcc5d04f92 coff-alpha memory leak
* coff-alpha.c (alpha_ecoff_read_ar_hdr): Free ar_hdr on error return.
2019-12-20 13:36:06 +10:30
GDB Administrator 5c787103a2 Automatic date update in version.in 2019-12-20 00:00:21 +00:00
Alan Modra 228c8f4be0 xcoff slurp_armap bounds checking
"count * 8 >= size" might overflow, "count >= size / 8" doesn't.

	* coff-rs6000.c (_bfd_xcoff_slurp_armap): Don't overflow when
	checking symbol count against section size.  Guard against strlen
	running off end of buffer by allocating one more byte and zeroing.
	* coff64-rs6000.c (xcoff64_slurp_armap): Likewise.
2019-12-19 21:52:47 +10:30
Alan Modra 9ad9b810c3 PowerPC, use size_t rather than long for indices
This is fussing about nothing really but since I was looking at signed
vs. unsigned issues, I decided to use the correct types here.

	* elf32-ppc.c (ppc_elf_get_synthetic_symtab): Use size_t for vars.
	* elf64-ppc.c (sym_exists_at): Use size_t for lo, hi and mid.
2019-12-19 15:27:00 +10:30
GDB Administrator 1087441f07 Automatic date update in version.in 2019-12-19 00:00:23 +00:00
Alan Modra 2365f8d70c Yet more signed overflow fixes
* elf-bfd.h (ELF_LOCAL_SYMBOL_HASH): Avoid signed overflow.
	* elf32-hppa.c (final_link_relocate): Likewise.
	* elf32-ppc.c (_bfd_elf_ppc_at_tls_transform): Likewise.
	(_bfd_elf_ppc_at_tprel_transform, is_insn_ds_form): Likewise.
	(is_insn_dq_form, ppc_elf_relocate_section): Likewise.
	* elf64-ppc.c (ok_lo_toc_insn, ppc64_elf_edit_toc): Likewise.
	(ppc64_elf_relocate_section): Likewise.
	* elfxx-mips.c (mips_elf_perform_relocation): Likewise.
	* netbsd.h (N_SET_FLAGS): Likewise.
2019-12-18 18:38:13 +10:30
GDB Administrator 4a42278582 Automatic date update in version.in 2019-12-18 00:00:29 +00:00
Alan Modra 5b660084e2 Remove tic80 support
This is one way of fixing ubsan bug reports, just delete the code.

The assembler support was removed back in 2005 along with other
non-BFD assemblers, but somehow the remainder of the port stayed in.

bfd/
	* coff-tic80.c: Delete file.
	* cpu-tic80.c: Delete file.
	* archures.c: Remove tic80 support.
	* coffcode.h: Likewise.
	* coffswap.h: Likewise.
	* targets.c: Likewise.
	* config.bfd: Likewise.
	* configure.ac: Likewise.
	* Makefile.am: Likewise.
	* Makefile.in: Regenerate.
	* bfd-in2.h: Regenerate.
	* configure: Regenerate.
	* po/SRC-POTFILES.in: Regenerate.
binutils/
	* testsuite/binutils-all/objcopy.exp: Remove tic80 support.
	* testsuite/binutils-all/objdump.exp: Likewise.
gas/
	* doc/as.texi: Remove mention of tic80.
include/
	* coff/tic80.h: Delete file.
	* opcode/tic80.h: Delete file.
ld/
	* emulparams/tic80coff.sh: Delete file.
	* scripttempl/tic80coff.sc: Delete file.
	* configure.tgt: Remove tic80 support.
	* Makefile.am: Likewise.
	* Makefile.in: Regenerate.
	* po/BLD-POTFILES.in: Regenerate.
opcodes/
	* tic80-dis.c: Delete file.
	* tic80-opc.c: Delete file.
	* disassemble.c: Remove tic80 support.
	* disassemble.h: Likewise.
	* Makefile.am: Likewise.
	* configure.ac: Likewise.
	* Makefile.in: Regenerate.
	* configure: Regenerate.
	* po/POTFILES.in: Regenerate.
2019-12-17 16:36:54 +10:30
GDB Administrator 43a599b56c Automatic date update in version.in 2019-12-17 00:00:26 +00:00
GDB Administrator 0d037fafed Automatic date update in version.in 2019-12-16 00:00:23 +00:00
GDB Administrator 37e61c4631 Automatic date update in version.in 2019-12-15 00:00:52 +00:00
GDB Administrator e97e2dcd46 Automatic date update in version.in 2019-12-14 00:00:16 +00:00
Alan Modra 0bc3450e22 Set no file contents PT_LOAD p_offset to first page
PR 25237
	* elf.c (assign_file_positions_for_load_sections): Attempt to
	keep meaningless p_offset for PT_LOAD segments without file
	contents within file size.
2019-12-13 21:23:15 +10:30
GDB Administrator c7ff3609c1 Automatic date update in version.in 2019-12-13 00:00:24 +00:00
Alan Modra 199d46bebb Remove duplicate cast
* libbfd.c (bfd_get): Don't cast result of bfd_get_8.
	* bfd-in2.h: Regenerate.
2019-12-12 16:46:30 +10:30
GDB Administrator a848998a75 Automatic date update in version.in 2019-12-12 00:00:15 +00:00
Alan Modra 13c9c48599 bfd signed overflow fixes
Aimed at quietening ubsan.

include/
	* opcode/mmix.h (PUSHGO_INSN_BYTE): Make unsigned.
	(GO_INSN_BYTE, SETL_INSN_BYTE, INCML_INSN_BYTE, INCMH_INSN_BYTE),
	(INCH_INSN_BYTE, SWYM_INSN_BYTE, JMP_INSN_BYTE): Likewise.
bfd/
	* elf32-rx.c (elf32_rx_relax_section): Avoid signed overflow.
	* libaout.h (N_SET_INFO, N_SET_FLAGS): Likewise.
	* netbsd.h (write_object_contents): Likewise.
	* elf32-arm.c (bfd_elf32_arm_vfp11_erratum_scan): Likewise.
	* libhppa.h (HPPA_R_CONSTANT): Don't signed extend with shifts.
	(stm32l4xx_create_replacing_stub_vldm): Don't truncate high bits
	with shifts.
	* elf32-nds32.h (R_NDS32_RELAX_ENTRY_DISABLE_RELAX_FLAG): Define
	using 1u shifted left.  Ditto for other macros.
	* mmo.c (LOP): Make unsigned.
2019-12-11 21:14:19 +10:30
Alan Modra 09c7848734 Make bfd_get_8 return a bfd_vma like other bfd_get_* functions
And similarly for bfd_get_signed_8.

bfd/
	* libbfd.c (bfd_get_8): Return a bfd_vma.
	(bfd_get_signed_8): Return a bfd_signed_vma.
	* bfd-in2.h: Regenerate.
binutils/
	* od-xcoff.c (dump_dumpx_core): Adjust for bfd_h_get_8 change.
2019-12-11 21:14:19 +10:30
Alan Modra 567607c11f ubsan: xtensa: left shift cannot be represented in type 'int'
In Operand_soffsetx4_decode:
  soffsetx4_0 = 0x4 + ((((int) offset_0 << 14) >> 14) << 2);
and other places.

Don't sign extend with shifts!  This file also has many occurrences of
truncation via shifts, which aren't a problem due to using uint32, but
I dislike on principle enough to fix.

	* xtensa-modules.c (Field_* functions): Don't mask using shifts.
	(Operand_soffsetx4_decode, Operand_simm4_decode),
	(Operand_simm8_decode, Operand_simm8x256_decode),
	(Operand_simm12b_decode, Operand_label8_decode),
	(Operand_label12_decode, Operand_soffset_decode),
	(Operand_xt_wbr15_label_decode, Operand_xt_wbr18_label_decode): Don't
	sign extend using shifts.
	(Operand_immrx4_decode, Operand_uimm16x4_decode): Avoid UB in
	constant.
2019-12-11 11:35:14 +10:30
Alan Modra 8ff23dba80 ubsan: ia64: left shift of negative value
Here, since val is signed:
   *valuep = (val << scale);

	* cpu-ia64-opc.c (ext_imms_scaled): Avoid undefined left shift
	of negative values by using unsigned vars.
2019-12-11 11:33:36 +10:30
GDB Administrator d1f80fe061 Automatic date update in version.in 2019-12-11 00:00:25 +00:00
GDB Administrator 0a0a052176 Automatic date update in version.in 2019-12-10 00:00:15 +00:00
GDB Administrator 2ff1ae54a2 Automatic date update in version.in 2019-12-09 00:00:26 +00:00