On 1 July 2017 at 07:34, Florian Fainelli <f.faine...@gmail.com> wrote: > If we manage to accidentally get a module installed that does not match > the system endianess (there is currently nothing preventing that in > OpenWrt/LEDE) we will hit a segmentation fault when doing this: > > sh = (Elf32_Shdr *) (map + e->e_shoff); > > because e->e_shoff will be wrongly encoded and this most likely will > result in an invalid offset to de-reference from. > > Update elf_find_section() to check that the build time endianess of > kmodloader matches that of the module, otherwise nothing would work > really. > > Signed-off-by: Florian Fainelli <f.faine...@gmail.com>
The change looks good. Ack from me ;) yousong > --- > kmodloader.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/kmodloader.c b/kmodloader.c > index 1a63c9810a99..a6aa795a81d4 100644 > --- a/kmodloader.c > +++ b/kmodloader.c > @@ -214,6 +214,19 @@ static int elf32_find_section(char *map, const char > *section, unsigned int *offs > static int elf_find_section(char *map, const char *section, unsigned int > *offset, unsigned int *size) > { > int clazz = map[EI_CLASS]; > + int endian = map[EI_DATA]; > + > +#if defined(__LITTLE_ENDIAN) > + if (endian != ELFDATA2LSB) > +#elif defined(__BIG_ENDIAN) > + if (endian != ELFDATA2MSB) > +#else > +#error "unsupported endian" > +#endif > + { > + ULOG_ERR("invalid endianess: %d\n", endian); > + return -1; > + } > > if (clazz == ELFCLASS32) > return elf32_find_section(map, section, offset, size); > -- > 2.9.3 > _______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev