aboutsummaryrefslogtreecommitdiff
path: root/libctf
diff options
context:
space:
mode:
authorNick Alcock <nick.alcock@oracle.com>2019-06-19 12:27:18 +0100
committerNick Alcock <nick.alcock@oracle.com>2019-06-21 13:04:02 +0100
commit0b4fa56e07639ed28cbbcd890868e01a82a5e45c (patch)
tree4e0436f0ee4b301e7bb7c302708bd3a84196fb91 /libctf
parent364620bf636a0a961892c9274616f8d5ad85eecc (diff)
downloadgdb-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/ChangeLog5
-rw-r--r--libctf/ctf-open.c4
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);