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:
Konrad Rzeszutek Wilk committed 2016-09-09 11:48:21 -04:00
1 parent c085c4eac8
commit aa1ae74cb5
2 files changed
+17 -12

No files matched your search

-12
View File
@@ -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;
+17
View File
@@ -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 */
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.