X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=elf%2Fsoname.c;h=8b6c451275f8a8e42d8f50cb58b028d380a7cc07;hb=2e690698fef46656959d76b7d69b7162b734a96d;hp=99770159b4e3109a0cd0175c7faf87994fb99198;hpb=a7fc9d1dda7e3d2155b78587c4b1393f15a0ffb4;p=zpackage diff --git a/elf/soname.c b/elf/soname.c index 9977015..8b6c451 100644 --- a/elf/soname.c +++ b/elf/soname.c @@ -9,7 +9,8 @@ #include #include #include -#include + +#include "elf.h" int main(int ac, char **av) { void *elfbase; @@ -22,6 +23,13 @@ int main(int ac, char **av) { char *name, *dynname; Elf64_Dyn *dent; + if (lstat(av[1], &sbuf) == -1) { + exit(1); + } + if (!S_ISREG(sbuf.st_mode)) { + exit(1); + } + elffd = open(av[1], O_RDONLY); if (elffd == -1) { exit(1); @@ -29,6 +37,14 @@ int main(int ac, char **av) { if (fstat(elffd, &sbuf) == -1) { exit(1); } + /* not a regular file? */ + if (!S_ISREG(sbuf.st_mode)) { + exit(1); + } + /* not at least the size of the elf header? */ + if (sbuf.st_size < sizeof(Elf64_Ehdr)) { + exit(1); + } elfbase = mmap(0, sbuf.st_size, PROT_READ,MAP_PRIVATE, elffd, 0); if (!elfbase) {