[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 1/9] livepatch: Clear .bss when payload is reverted
So that when we apply the patch again the .bss is cleared. Otherwise we may find some variables containing old values. Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> --- Cc: Ross Lagerwall <ross.lagerwall@xxxxxxxxxx> Cc: Jan Beulich <jbeulich@xxxxxxxx> v3: Initial submission --- xen/common/livepatch.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/xen/common/livepatch.c b/xen/common/livepatch.c index 5da28a3..47a23cf 100644 --- a/xen/common/livepatch.c +++ b/xen/common/livepatch.c @@ -70,6 +70,8 @@ struct payload { unsigned int nsyms; /* Nr of entries in .strtab and symbols. */ struct livepatch_build_id id; /* ELFNOTE_DESC(.note.gnu.build-id) of the payload. */ struct livepatch_build_id dep; /* ELFNOTE_DESC(.livepatch.depends). */ + void *bss; /* .bss of the payload. */ + size_t bss_size; /* and its size. */ char name[XEN_LIVEPATCH_NAME_SIZE]; /* Name of it. */ }; @@ -374,7 +376,18 @@ static int move_payload(struct payload *payload, struct livepatch_elf *elf) elf->name, elf->sec[i].name, elf->sec[i].load_addr); } else - memset(elf->sec[i].load_addr, 0, elf->sec[i].sec->sh_size); + { + /* We expect only one BSS. */ + if ( payload->bss ) + { + rc = -EINVAL; + goto out; + } + payload->bss = elf->sec[i].load_addr; + payload->bss_size = elf->sec[i].sec->sh_size; + + memset(payload->bss, 0, payload->bss_size); + } } } @@ -1034,6 +1047,9 @@ static int revert_payload(struct payload *data) list_del_rcu(&data->applied_list); unregister_virtual_region(&data->region); + /* And clear the BSS for subsequent operation. */ + memset(data->bss, 0, data->bss_size); + return 0; } -- 2.4.11 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |