mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
livepatch: Bubble up sanity checks on Elf relocs
The checks for SHT_REL[,A] ELF sanity checks does not need to be in the platform specific file and can be bubbled up in the platform agnostic file. This makes the ARM 32/64 implementation easier as the duplicate checks don't have to be in the platform specific files. Acked-by: Jan Beulich <jbeulich@suse.com> [x86 part] Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
1 parent
c085c4eac8
commit
aa1ae74cb5
2 files changed
+17
-12
No files matched your search
@@ -122,18 +122,6 @@ int arch_livepatch_perform_rela(struct livepatch_elf *elf,
|
||||
uint64_t val;
|
||||
uint8_t *dest;
|
||||
|
||||
/* Nothing to do. */
|
||||
if ( !rela->sec->sh_size )
|
||||
return 0;
|
||||
|
||||
if ( rela->sec->sh_entsize < sizeof(Elf_RelA) ||
|
||||
rela->sec->sh_size % rela->sec->sh_entsize )
|
||||
{
|
||||
dprintk(XENLOG_ERR, LIVEPATCH "%s: Section relative header is corrupted!\n",
|
||||
elf->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
for ( i = 0; i < (rela->sec->sh_size / rela->sec->sh_entsize); i++ )
|
||||
{
|
||||
r = rela->data + i * rela->sec->sh_entsize;
|
||||
|
||||
@@ -335,6 +335,7 @@ int livepatch_elf_perform_relocs(struct livepatch_elf *elf)
|
||||
struct livepatch_elf_sec *r, *base;
|
||||
unsigned int i;
|
||||
int rc = 0;
|
||||
size_t sz;
|
||||
|
||||
ASSERT(elf->sym);
|
||||
|
||||
@@ -364,6 +365,22 @@ int livepatch_elf_perform_relocs(struct livepatch_elf *elf)
|
||||
break;
|
||||
}
|
||||
|
||||
if ( r->sec->sh_type == SHT_RELA )
|
||||
sz = sizeof(Elf_RelA);
|
||||
else
|
||||
sz = sizeof(Elf_Rel);
|
||||
|
||||
if ( !r->sec->sh_size )
|
||||
continue;
|
||||
|
||||
if ( r->sec->sh_entsize < sz || r->sec->sh_size % r->sec->sh_entsize )
|
||||
{
|
||||
dprintk(XENLOG_ERR, LIVEPATCH "%s: Section relative header is corrupted!\n",
|
||||
elf->name);
|
||||
rc = -EINVAL;
|
||||
break;
|
||||
}
|
||||
|
||||
if ( r->sec->sh_type == SHT_RELA )
|
||||
rc = arch_livepatch_perform_rela(elf, base, r);
|
||||
else /* SHT_REL */
|
||||
|
||||