|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] livepatch: Bubble up sanity checks on Elf relocs
commit aa1ae74cb565840a7994c803b4bd935d64d0dce5
Author: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
AuthorDate: Fri Aug 12 16:03:18 2016 -0400
Commit: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
CommitDate: Fri Sep 9 11:48:21 2016 -0400
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@xxxxxxxx> [x86 part]
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
---
xen/arch/x86/livepatch.c | 12 ------------
xen/common/livepatch_elf.c | 17 +++++++++++++++++
2 files changed, 17 insertions(+), 12 deletions(-)
diff --git a/xen/arch/x86/livepatch.c b/xen/arch/x86/livepatch.c
index 1023fab..39620f9 100644
--- a/xen/arch/x86/livepatch.c
+++ b/xen/arch/x86/livepatch.c
@@ -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;
diff --git a/xen/common/livepatch_elf.c b/xen/common/livepatch_elf.c
index 789e8fc..cda9b27 100644
--- a/xen/common/livepatch_elf.c
+++ b/xen/common/livepatch_elf.c
@@ -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);
@@ -365,6 +366,22 @@ int livepatch_elf_perform_relocs(struct livepatch_elf *elf)
}
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 */
rc = arch_livepatch_perform_rel(elf, base, r);
--
generated by git-patchbot for /home/xen/git/xen.git#master
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |