projects
/
project
/
ubox.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
fff945d
)
kmodloader: fix elf header parsing on 64bit machines
author
John Crispin
<blogic@openwrt.org>
Thu, 16 Jan 2014 00:29:16 +0000
(
00:29
+0000)
committer
John Crispin
<blogic@openwrt.org>
Thu, 16 Jan 2014 00:56:26 +0000
(
00:56
+0000)
Signed-off-by: John Crispin <blogic@openwrt.org>
kmodloader.c
patch
|
blob
|
history
diff --git
a/kmodloader.c
b/kmodloader.c
index 784021588c87ebd1a9b1f292814ee90a907722eb..f0985eeb5c9240b92aebe86cec553ed964deffdd 100644
(file)
--- a/
kmodloader.c
+++ b/
kmodloader.c
@@
-111,8
+111,7
@@
static char* get_module_name(char *path)
return name;
}
return name;
}
-#if __WORDSIZE == 64
-static int elf_find_section(char *map, const char *section, unsigned int *offset, unsigned int *size)
+static int elf64_find_section(char *map, const char *section, unsigned int *offset, unsigned int *size)
{
const char *secnames;
Elf64_Ehdr *e;
{
const char *secnames;
Elf64_Ehdr *e;
@@
-133,8
+132,8
@@
static int elf_find_section(char *map, const char *section, unsigned int *offset
return -1;
}
return -1;
}
-#else
-static int elf_find_section(char *map, const char *section, unsigned int *offset, unsigned int *size)
+
+static int elf
32
_find_section(char *map, const char *section, unsigned int *offset, unsigned int *size)
{
const char *secnames;
Elf32_Ehdr *e;
{
const char *secnames;
Elf32_Ehdr *e;
@@
-155,7
+154,20
@@
static int elf_find_section(char *map, const char *section, unsigned int *offset
return -1;
}
return -1;
}
-#endif
+
+static int elf_find_section(char *map, const char *section, unsigned int *offset, unsigned int *size)
+{
+ int clazz = map[EI_CLASS];
+
+ if (clazz == ELFCLASS32)
+ return elf32_find_section(map, section, offset, size);
+ else if (clazz == ELFCLASS64)
+ return elf64_find_section(map, section, offset, size);
+
+ LOG("unknown elf format %d\n", clazz);
+
+ return -1;
+}
static struct module *
alloc_module(const char *name, const char *depends, int size)
static struct module *
alloc_module(const char *name, const char *depends, int size)