Go to file
Andrew Burgess 9783247189 gdb/build-id: protect against weirdly short build-ids
While looking at build_id_to_bfd_suffix (in gdb/build-id.c) I realised
that GDB would likely not do what we wanted if a build-id was ever a
single byte.

Right now, build-ids generated by the GNU linker are 32 bytes, but
there's nothing that forces this to be the case, it's pretty easy to
create a fake, single byte, build-id.  Given that the build-id is an
external input (read from the objfile), GDB should protect itself
against these edge cases.

The problem with build_id_to_bfd_suffix is that this function creates
the path used to lookup either the debug information, or an
executable, based on its build-id.  So a 3-byte build-id 0xaabbcc will
look in the path: `$DEBUG_FILE_DIRECTORY/.build-id/aa/bbcc.debug`.
However, a single byte build-id 0xaa, will look in the file:
`$DEBUG_FILE_DIRECTORY/.build-id/aa/.debug` which doesn't seem right.

Worse, when looking for an objfile given a build-id GDB will look for
a file called `$DEBUG_FILE_DIRECTORY/.build-id/aa/` with a trailing
'/' character.

I propose that, in build_id_to_bfd_suffix we just return early if the
build-id is 1 byte (or less) with a return value that indicates no
separate file was found.

For testing I made use of the DWARF assembler.  I needed to update the
build-id creation proc, the existing code assumes that the build-id is
a multiple of 4 bytes, so I added some additional padding to ensure
that the generated note was a multiple of 4 bytes, even if the
build-id was not.

I added a test with a 1 byte build-id, and also for the case where the
build-id has zero length.  The zero length case already does what
you'd expect (no debug is loaded) as the bfd library rejects the
build-id when loading it from the objfile, but adding this additional
test is pretty cheap.

Approved-By: Kevin Buettner <kevinb@redhat.com>
2024-11-21 19:38:39 +00:00
bfd Automatic date update in version.in 2024-11-21 00:00:23 +00:00
binutils Remove Debian from SECURITY.txt 2024-11-20 12:59:35 +00:00
config
contrib
cpu
elfcpp
etc
gas PowerPC: Add support for RFC02677 - VSX Vector Rotate Left Word 2024-11-20 18:33:07 -05:00
gdb gdb/build-id: protect against weirdly short build-ids 2024-11-21 19:38:39 +00:00
gdbserver gdbserver: pass osabi to GDB in more target descriptions 2024-11-12 12:51:36 +00:00
gdbsupport [gdb] Fix some typos 2024-11-18 09:46:31 +01:00
gnulib
gold
gprof
gprofng gprofng: fix -std=gnu23 compatibility wrt unprototyped functions 2024-11-18 05:12:56 +00:00
include RISC-V: Add Zcmt instructions and csr. 2024-11-20 08:26:39 +08:00
ld RISC-V: Don't report warnings when linking different privileged spec objects. 2024-11-19 13:44:49 +08:00
libbacktrace
libctf
libdecnumber
libiberty
libsframe
opcodes PowerPC: Add support for RFC02677 - VSX Vector Rotate Left Word 2024-11-20 18:33:07 -05:00
readline
sim
texinfo
zlib
.cvsignore
.editorconfig
.gitattributes
.gitignore
.pre-commit-config.yaml [precommit] Add some documentation in .pre-commit-config.yaml 2024-11-13 21:03:42 +01:00
ar-lib
ChangeLog
compile
config-ml.in
config.guess
config.rpath
config.sub
configure Deprecate the ARM simulator. 2024-11-07 14:53:26 +00:00
configure.ac Deprecate the ARM simulator. 2024-11-07 14:53:26 +00:00
COPYING
COPYING3
COPYING3.LIB
COPYING.LIB
COPYING.LIBGLOSS
COPYING.NEWLIB
depcomp
djunpack.bat
install-sh
libtool.m4
lt~obsolete.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
MAINTAINERS
Makefile.def
Makefile.in
Makefile.tpl
makefile.vms
missing
mkdep
mkinstalldirs
move-if-change
multilib.am
README
README-maintainer-mode
SECURITY.txt
setup.com
src-release.sh Add a target to src-release.sh to crate a binutils release without Gold 2024-10-29 11:50:04 +00:00
symlink-tree
test-driver
ylwrap

		   README for GNU development tools

This directory contains various GNU compilers, assemblers, linkers, 
debuggers, etc., plus their support routines, definitions, and documentation.

If you are receiving this as part of a GDB release, see the file gdb/README.
If with a binutils release, see binutils/README;  if with a libg++ release,
see libg++/README, etc.  That'll give you info about this
package -- supported targets, how to use it, how to report bugs, etc.

It is now possible to automatically configure and build a variety of
tools with one command.  To build all of the tools contained herein,
run the ``configure'' script here, e.g.:

	./configure 
	make

To install them (by default in /usr/local/bin, /usr/local/lib, etc),
then do:
	make install

(If the configure script can't determine your type of computer, give it
the name as an argument, for instance ``./configure sun4''.  You can
use the script ``config.sub'' to test whether a name is recognized; if
it is, config.sub translates it to a triplet specifying CPU, vendor,
and OS.)

If you have more than one compiler on your system, it is often best to
explicitly set CC in the environment before running configure, and to
also set CC when running make.  For example (assuming sh/bash/ksh):

	CC=gcc ./configure
	make

A similar example using csh:

	setenv CC gcc
	./configure
	make

Much of the code and documentation enclosed is copyright by
the Free Software Foundation, Inc.  See the file COPYING or
COPYING.LIB in the various directories, for a description of the
GNU General Public License terms under which you can copy the files.

REPORTING BUGS: Again, see gdb/README, binutils/README, etc., for info
on where and how to report problems.