|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 1/9] livepatch: Clear .bss when payload is reverted
>>> On 24.08.16 at 04:22, <konrad.wilk@xxxxxxxxxx> wrote:
> --- a/xen/common/livepatch.c
> +++ b/xen/common/livepatch.c
> @@ -70,6 +70,9 @@ 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's of the payload. */
> + size_t *bss_size; /* and their sizes. */
Is size_t wide enough in the extreme case? Perhaps yes, because I
don't think we'll ever load 64-bit ELF on a 32-bit platform.
> + size_t n_bss; /* Size of the array. */
As opposed to that, I think this one could be unsigned int (or else
you end up with inconsistencies in {move,apply}_payload()).
> @@ -374,14 +392,24 @@ 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);
> + {
> + payload->bss[n_bss] = elf->sec[i].load_addr;
> + payload->bss_size[n_bss++] = elf->sec[i].sec->sh_size;
> + }
> }
> }
> + ASSERT(n_bss == payload->n_bss);
>
> out:
> xfree(offset);
>
> return rc;
> +
> + out_mem:
> + dprintk(XENLOG_ERR, LIVEPATCH "%s: Could not allocate memory for
> payload!\n",
> + elf->name);
> + rc = -ENOMEM;
> + goto out;
You leak any of the three buffers here which you managed to
successfully allocate.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |