[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 06/25] libelf-loader: introduce elf_load_image
>>> On 15.12.11 at 17:30, <stefano.stabellini@xxxxxxxxxxxxx> wrote: > From: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > > Implement a new function, called elf_load_image, to perform the actually > copy of the elf image and clearing the padding. > The function is implemented as memcpy and memset when the library is > built as part of the tools, but it is implemented as raw_copy_to_guest and > raw_clear_guest when built as part of Xen, so that it can be safely called > with an HVM style dom0. > > > Changes in v3: > > - switch to raw_copy_to_guest and raw_clear_guest. > > > Changes in v2: > > - remove CONFIG_KERNEL_NO_RELOC. > > > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > Signed-off-by: Tim Deegan <Tim.Deegan@xxxxxxxxxx> > --- > xen/common/libelf/libelf-loader.c | 17 +++++++++++++++-- > 1 files changed, 15 insertions(+), 2 deletions(-) > > diff --git a/xen/common/libelf/libelf-loader.c > b/xen/common/libelf/libelf-loader.c > index 1ccf7d3..d2cb5b3 100644 > --- a/xen/common/libelf/libelf-loader.c > +++ b/xen/common/libelf/libelf-loader.c > @@ -107,11 +107,25 @@ void elf_set_log(struct elf_binary *elf, > elf_log_callback *log_callback, > elf->log_caller_data = log_caller_data; > elf->verbose = verbose; > } > + > +static void elf_load_image(void *dst, const void *src, uint64_t filesz, > uint64_t memsz) > +{ > + memcpy(dst, src, filesz); > + memset(dst + filesz, 0, memsz - filesz); > +} > #else > +#include <asm/guest_access.h> > + > void elf_set_verbose(struct elf_binary *elf) > { > elf->verbose = 1; > } > + > +static void elf_load_image(void *dst, const void *src, uint64_t filesz, > uint64_t memsz) > +{ > + raw_copy_to_guest(dst, src, filesz); > + raw_clear_guest(dst + filesz, memsz - filesz); I thought I had mentioned this already - calling user/guest access functions without checking their return value is bogus. Jan > +} > #endif > > /* Calculate the required additional kernel space for the elf image */ > @@ -256,8 +270,7 @@ void elf_load_binary(struct elf_binary *elf) > dest = elf_get_ptr(elf, paddr); > elf_msg(elf, "%s: phdr %" PRIu64 " at 0x%p -> 0x%p\n", > __func__, i, dest, dest + filesz); > - memcpy(dest, elf->image + offset, filesz); > - memset(dest + filesz, 0, memsz - filesz); > + elf_load_image(dest, elf->image + offset, filesz, memsz); > } > > elf_load_bsdsyms(elf); > -- > 1.7.2.5 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |