diff options
author | Nick Alcock <nick.alcock@oracle.com> | 2019-06-19 12:27:18 +0100 |
---|---|---|
committer | Nick Alcock <nick.alcock@oracle.com> | 2019-06-21 13:04:02 +0100 |
commit | 0b4fa56e07639ed28cbbcd890868e01a82a5e45c (patch) | |
tree | 4e0436f0ee4b301e7bb7c302708bd3a84196fb91 /libctf | |
parent | 364620bf636a0a961892c9274616f8d5ad85eecc (diff) | |
download | gdb-0b4fa56e07639ed28cbbcd890868e01a82a5e45c.zip gdb-0b4fa56e07639ed28cbbcd890868e01a82a5e45c.tar.gz gdb-0b4fa56e07639ed28cbbcd890868e01a82a5e45c.tar.bz2 |
libctf: unidentified type kinds on open are a sign of file corruption
If we see a CTF type with a kind we do not recognize in its ctt_info
during opening, we cannot skip it and continue opening the file: if the
type kind is unknown, we do not know how long its vlen is, and we cannot
have skipped past it: so if we continue reading we will almost certainly
read in part of the vlen as if it were a new ctf_type_t.
Avoid this trouble by considering unknown type kinds to be a reason to
return ECTF_CORRUPT, just like everything else that reads in type kinds
does.
libctf/
* ctf-open.c (ctf_types): Fail when unidentified type kinds are
seen.
Diffstat (limited to 'libctf')
-rw-r--r-- | libctf/ChangeLog | 5 | ||||
-rw-r--r-- | libctf/ctf-open.c | 4 |
2 files changed, 9 insertions, 0 deletions
diff --git a/libctf/ChangeLog b/libctf/ChangeLog index 9ff7cd4..ad5685b 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,5 +1,10 @@ 2019-06-19 Nick Alcock <nick.alcock@oracle.com> + * ctf-open.c (ctf_types): Fail when unidentified type kinds are + seen. + +2019-06-19 Nick Alcock <nick.alcock@oracle.com> + * ctf-open.c (ctf_bufopen): Dump header offsets into the debugging output. diff --git a/libctf/ctf-open.c b/libctf/ctf-open.c index df735ac..14f7062 100644 --- a/libctf/ctf-open.c +++ b/libctf/ctf-open.c @@ -856,6 +856,10 @@ init_types (ctf_file_t *fp, ctf_header_t *cth) if (err != 0 && err != ECTF_STRTAB) return err; break; + default: + ctf_dprintf ("unhandled CTF kind in endianness conversion -- %x\n", + kind); + return ECTF_CORRUPT; } *xp = (uint32_t) ((uintptr_t) tp - (uintptr_t) fp->ctf_buf); |