libctf: create: don't add forwards if the type added already exists
This is what ctf_add_forward is documented to do, but it's not what it actually does: the code is quite happy to add forwards that duplicate existing structs, etc. This is obviously wrong and breaks both the nondeduplicating linker and the upcoming deduplicator, as well as allowing ordinary callers of ctf_add_type to corrupt the dictionary by just adding the same root- visible forward more than once. libctf/ * ctf-create.c (ctf_add_forward): Don't add forwards to types that already exist.
This commit is contained in:
parent
fe4c2d5563
commit
6bbf9da892
2 changed files with 9 additions and 1 deletions
|
@ -1229,7 +1229,10 @@ ctf_add_forward (ctf_file_t *fp, uint32_t flag, const char *name,
|
|||
if (name != NULL)
|
||||
type = ctf_lookup_by_rawname (fp, kind, name);
|
||||
|
||||
if ((type = ctf_add_generic (fp, flag, name, CTF_K_FORWARD,&dtd)) == CTF_ERR)
|
||||
if (type)
|
||||
return type;
|
||||
|
||||
if ((type = ctf_add_generic (fp, flag, name, CTF_K_FORWARD, &dtd)) == CTF_ERR)
|
||||
return CTF_ERR; /* errno is set for us. */
|
||||
|
||||
dtd->dtd_data.ctt_info = CTF_TYPE_INFO (CTF_K_FORWARD, flag, 0);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue