[CRIU] [PATCH 3/5] pie: piegen -- Don't dereference section data too early
Cyrill Gorcunov
gorcunov at openvz.org
Tue Jun 9 06:18:25 PDT 2015
Also use already computed @sec_hdrs and add
ptr_func_exit helpers calls.
Also a few style nitfix.
Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
pie/piegen/elf.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/pie/piegen/elf.c b/pie/piegen/elf.c
index a908624135eb..51f3edf9d513 100644
--- a/pie/piegen/elf.c
+++ b/pie/piegen/elf.c
@@ -465,18 +465,21 @@ int handle_elf(const piegen_opt_t *opts, void *mem, size_t size)
pr_out("static __maybe_unused const char %s[] = {\n\t", opts->stream_name);
- for (i=0, k=0; i < hdr->e_shnum; i++) {
+ for (i = 0, k = 0; i < hdr->e_shnum; i++) {
+ Shdr_t *sh = sec_hdrs[i];
+ unsigned char *shdata;
size_t j;
- Shdr_t *sh = mem + hdr->e_shoff + hdr->e_shentsize * i;
- unsigned char *shdata = mem + sh->sh_offset;
if (!(sh->sh_flags & SHF_ALLOC) || !sh->sh_size)
continue;
- pr_debug("Copying section '%s'\n" \
+ shdata = mem + sh->sh_offset;
+ ptr_func_exit(&secstrings[sh->sh_name]);
+
+ pr_debug("Copying section '%s'\n"
"\tstart:0x%lx (gap:0x%lx) size:0x%lx\n",
&secstrings[sh->sh_name], (unsigned long) sh->sh_addr,
- (unsigned long)(sh->sh_addr - k), sh->sh_size);
+ (unsigned long)(sh->sh_addr - k), (unsigned long)sh->sh_size);
/* write 0 in the gap between the 2 sections */
for (;k < sh->sh_addr; k++) {
@@ -485,9 +488,10 @@ int handle_elf(const piegen_opt_t *opts, void *mem, size_t size)
pr_out("0x00,");
}
- for (j=0; j < sh->sh_size; j++, k++) {
+ for (j = 0; j < sh->sh_size; j++, k++) {
if (k && (k % 8) == 0)
pr_out("\n\t");
+ ptr_func_exit(&shdata[j]);
pr_out("0x%02x,", shdata[j]);
}
}
--
2.4.2
More information about the CRIU
mailing list