* [gentoo-commits] gentoo-projects commit in pax-utils: paxelf.h scanelf.c
@ 2015-02-28 22:57 Mike Frysinger (vapier)
0 siblings, 0 replies; only message in thread
From: Mike Frysinger (vapier) @ 2015-02-28 22:57 UTC (permalink / raw
To: gentoo-commits
vapier 15/02/28 22:57:40
Modified: paxelf.h scanelf.c
Log:
scanelf: check shdrs are valid before using them
Revision Changes Path
1.61 pax-utils/paxelf.h
file : http://sources.gentoo.org/viewvc.cgi/gentoo-projects/pax-utils/paxelf.h?rev=1.61&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-projects/pax-utils/paxelf.h?rev=1.61&content-type=text/plain
diff : http://sources.gentoo.org/viewvc.cgi/gentoo-projects/pax-utils/paxelf.h?r1=1.60&r2=1.61
Index: paxelf.h
===================================================================
RCS file: /var/cvsroot/gentoo-projects/pax-utils/paxelf.h,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -r1.60 -r1.61
--- paxelf.h 18 Jun 2014 03:16:52 -0000 1.60
+++ paxelf.h 28 Feb 2015 22:57:40 -0000 1.61
@@ -1,7 +1,7 @@
/*
* Copyright 2005-2012 Gentoo Foundation
* Distributed under the terms of the GNU General Public License v2
- * $Header: /var/cvsroot/gentoo-projects/pax-utils/paxelf.h,v 1.60 2014/06/18 03:16:52 vapier Exp $
+ * $Header: /var/cvsroot/gentoo-projects/pax-utils/paxelf.h,v 1.61 2015/02/28 22:57:40 vapier Exp $
*
* Copyright 2005-2012 Ned Ludd - <solar@gentoo.org>
* Copyright 2005-2012 Mike Frysinger - <vapier@gentoo.org>
@@ -40,6 +40,13 @@
#define SYM32(ptr) ((Elf32_Sym *)(ptr))
#define SYM64(ptr) ((Elf64_Sym *)(ptr))
+#define VALID_SHDR(elf, shdr) \
+ (shdr && \
+ EGET(shdr->sh_type) != SHT_NOBITS && \
+ EGET(shdr->sh_offset) < (uint64_t)elf->len && \
+ EGET(shdr->sh_size) < (uint64_t)elf->len && \
+ EGET(shdr->sh_offset) < elf->len - EGET(shdr->sh_size))
+
/* prototypes */
extern char *pax_short_hf_flags(unsigned long flags);
extern char *pax_short_pf_flags(unsigned long flags);
1.276 pax-utils/scanelf.c
file : http://sources.gentoo.org/viewvc.cgi/gentoo-projects/pax-utils/scanelf.c?rev=1.276&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-projects/pax-utils/scanelf.c?rev=1.276&content-type=text/plain
diff : http://sources.gentoo.org/viewvc.cgi/gentoo-projects/pax-utils/scanelf.c?r1=1.275&r2=1.276
Index: scanelf.c
===================================================================
RCS file: /var/cvsroot/gentoo-projects/pax-utils/scanelf.c,v
retrieving revision 1.275
retrieving revision 1.276
diff -u -r1.275 -r1.276
--- scanelf.c 24 Feb 2015 06:58:39 -0000 1.275
+++ scanelf.c 28 Feb 2015 22:57:40 -0000 1.276
@@ -1,13 +1,13 @@
/*
* Copyright 2003-2012 Gentoo Foundation
* Distributed under the terms of the GNU General Public License v2
- * $Header: /var/cvsroot/gentoo-projects/pax-utils/scanelf.c,v 1.275 2015/02/24 06:58:39 vapier Exp $
+ * $Header: /var/cvsroot/gentoo-projects/pax-utils/scanelf.c,v 1.276 2015/02/28 22:57:40 vapier Exp $
*
* Copyright 2003-2012 Ned Ludd - <solar@gentoo.org>
* Copyright 2004-2012 Mike Frysinger - <vapier@gentoo.org>
*/
-static const char rcsid[] = "$Id: scanelf.c,v 1.275 2015/02/24 06:58:39 vapier Exp $";
+static const char rcsid[] = "$Id: scanelf.c,v 1.276 2015/02/28 22:57:40 vapier Exp $";
const char argv0[] = "scanelf";
#include "paxinc.h"
@@ -189,13 +189,13 @@
Elf ## B ## _Shdr *edynsym = dynsym; \
Elf ## B ## _Shdr *edynstr = dynstr; \
\
- if (symtab && EGET(esymtab->sh_type) == SHT_NOBITS) \
+ if (!VALID_SHDR(elf, esymtab)) \
symtab = NULL; \
- if (dynsym && EGET(edynsym->sh_type) == SHT_NOBITS) \
+ if (!VALID_SHDR(elf, edynsym)) \
dynsym = NULL; \
- if (strtab && EGET(estrtab->sh_type) == SHT_NOBITS) \
+ if (!VALID_SHDR(elf, estrtab)) \
strtab = NULL; \
- if (dynstr && EGET(edynstr->sh_type) == SHT_NOBITS) \
+ if (!VALID_SHDR(elf, edynstr)) \
dynstr = NULL; \
\
/* Use the set with more symbols if both exist. */ \
@@ -1404,6 +1404,8 @@
Elf ## B ## _Word i, cnt = EGET(symtab->sh_entsize); \
char *symname; \
size_t ret_len = 0; \
+ if (!VALID_SHDR(elf, symtab) || !VALID_SHDR(elf, strtab)) \
+ goto break_out; \
if (cnt) \
cnt = EGET(symtab->sh_size) / cnt; \
for (i = 0; i < cnt; ++i) { \
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2015-02-28 22:57 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-28 22:57 [gentoo-commits] gentoo-projects commit in pax-utils: paxelf.h scanelf.c Mike Frysinger (vapier)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox