|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] livepatch: Tighten alignment checks.
commit c3f951417f8837e9e2061e592e9cce95bd09095b
Author: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
AuthorDate: Fri Jun 23 12:41:45 2017 -0400
Commit: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
CommitDate: Thu Oct 5 09:27:32 2017 -0400
livepatch: Tighten alignment checks.
The ELF specification mentions nothing about the sh_size being
modulo the sh_addralign. Only that sh_addr MUST be aligned on
sh_addralign if sh_addralign is not zero or one.
We on loading did not take this in-to account so this patch adds
a check on the ELF file as it is being parsed.
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
---
xen/common/livepatch_elf.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/xen/common/livepatch_elf.c b/xen/common/livepatch_elf.c
index b69e271..dd8b47a 100644
--- a/xen/common/livepatch_elf.c
+++ b/xen/common/livepatch_elf.c
@@ -86,6 +86,19 @@ static int elf_resolve_sections(struct livepatch_elf *elf,
const void *data)
delta < sizeof(Elf_Ehdr) ? "at ELF header" : "is past
end");
return -EINVAL;
}
+ else if ( sec[i].sec->sh_addralign & (sec[i].sec->sh_addralign - 1) )
+ {
+ dprintk(XENLOG_ERR, LIVEPATCH "%s: Section [%u] alignment
(%#"PRIxElfAddr") is not supported\n",
+ elf->name, i, sec[i].sec->sh_addralign);
+ return -EOPNOTSUPP;
+ }
+ else if ( sec[i].sec->sh_addralign &&
+ sec[i].sec->sh_addr % sec[i].sec->sh_addralign )
+ {
+ dprintk(XENLOG_ERR, LIVEPATCH "%s: Section [%u] addr
(%#"PRIxElfAddr") is not aligned properly (%#"PRIxElfAddr")\n",
+ elf->name, i, sec[i].sec->sh_addr,
sec[i].sec->sh_addralign);
+ return -EINVAL;
+ }
else if ( (sec[i].sec->sh_flags & (SHF_WRITE | SHF_ALLOC)) &&
sec[i].sec->sh_type == SHT_NOBITS &&
sec[i].sec->sh_size > LIVEPATCH_MAX_SIZE )
--
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 |