mirror of https://github.com/dynup/kpatch
kpatch-build: Make local static twining stricter
The current code to find the twin of a local static variable allows two variables of the same name to be wrongly matched with the other's twin. While there isn't a magic formula to avoid this, make stricter requirements for twining static local from the original object with a symbol from the patched object. This reduces the risk of erroneous matches. Signed-off-by: Julien Thierry <jthierry@redhat.com>
This commit is contained in:
parent
ea348164f6
commit
68530e4c2b
|
@ -975,18 +975,26 @@ static struct symbol *kpatch_find_static_twin(struct section *sec,
|
|||
|
||||
/* find the patched object's corresponding variable */
|
||||
list_for_each_entry(rela, &sec->twin->relas, list) {
|
||||
struct symbol *patched_sym;
|
||||
|
||||
rela_toc = toc_rela(rela);
|
||||
if (!rela_toc)
|
||||
continue; /* skip toc constants */
|
||||
|
||||
if (rela_toc->sym->twin)
|
||||
patched_sym = rela_toc->sym;
|
||||
|
||||
if (patched_sym->twin)
|
||||
continue;
|
||||
|
||||
if (kpatch_mangled_strcmp(rela_toc->sym->name, sym->name))
|
||||
if (sym->type != patched_sym->type ||
|
||||
(sym->type == STT_OBJECT &&
|
||||
sym->sym.st_size != patched_sym->sym.st_size))
|
||||
continue;
|
||||
|
||||
return rela_toc->sym;
|
||||
if (kpatch_mangled_strcmp(patched_sym->name, sym->name))
|
||||
continue;
|
||||
|
||||
return patched_sym;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit b068a43723a3efcf20b096a37b4bb8543247c62a
|
||||
Subproject commit 6bd3e931ef29967a0b5bb7f7b4e4dc999e38baea
|
Loading…
Reference in New Issue