From: Nick Alcock Date: Wed, 19 Jun 2019 11:27:18 +0000 (+0100) Subject: libctf: unidentified type kinds on open are a sign of file corruption X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0b4fa56e07639ed28cbbcd890868e01a82a5e45c;p=binutils-gdb.git 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. --- diff --git a/libctf/ChangeLog b/libctf/ChangeLog index 9ff7cd4146b..ad5685b6914 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,3 +1,8 @@ +2019-06-19 Nick Alcock + + * ctf-open.c (ctf_types): Fail when unidentified type kinds are + seen. + 2019-06-19 Nick Alcock * ctf-open.c (ctf_bufopen): Dump header offsets into the debugging diff --git a/libctf/ctf-open.c b/libctf/ctf-open.c index df735acb408..14f7062590a 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);