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.
This commit is contained in:
Nick Alcock 2019-06-19 12:27:18 +01:00
parent 364620bf63
commit 0b4fa56e07
2 changed files with 9 additions and 0 deletions

View File

@ -1,3 +1,8 @@
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

View File

@ -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);