From b50ef514ff0c8d5506227c412c508f9f538bcf5a Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Mon, 13 Jan 2020 10:10:41 +1030 Subject: [PATCH] ubsan: alpha-vma: timeout * vms-alpha.c (_bfd_vms_slurp_egsd): Ensure minimum size even for "ignored" records. --- bfd/ChangeLog | 5 +++++ bfd/vms-alpha.c | 19 +++++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 70944d3c80..84caf0b04a 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2020-01-13 Alan Modra + + * vms-alpha.c (_bfd_vms_slurp_egsd): Ensure minimum size even + for "ignored" records. + 2020-01-13 Alan Modra * wasm-module.c (wasm_scan_name_function_section): Formatting. diff --git a/bfd/vms-alpha.c b/bfd/vms-alpha.c index 73e7285384..32f4e68bbb 100644 --- a/bfd/vms-alpha.c +++ b/bfd/vms-alpha.c @@ -1217,6 +1217,16 @@ _bfd_vms_slurp_egsd (bfd *abfd) return FALSE; } + if (gsd_size < 4) + { + too_small: + _bfd_error_handler (_("corrupt EGSD record type %d: size (%#x) " + "is too small"), + gsd_type, gsd_size); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + switch (gsd_type) { case EGSD__C_PSC: @@ -1227,14 +1237,7 @@ _bfd_vms_slurp_egsd (bfd *abfd) asection *section; if (offsetof (struct vms_egps, flags) + 2 > gsd_size) - { - too_small: - _bfd_error_handler (_("corrupt EGSD record type %d: size (%#x) " - "is too small"), - gsd_type, gsd_size); - bfd_set_error (bfd_error_bad_value); - return FALSE; - } + goto too_small; vms_flags = bfd_getl16 (egps->flags); if ((vms_flags & EGPS__V_REL) == 0) -- 2.34.1