|
Lines 147-152
Link Here
|
| 147 |
getu32(swap, ph32.p_align) : 4) \ |
147 |
getu32(swap, ph32.p_align) : 4) \ |
| 148 |
: (off_t) (ph64.p_align ? \ |
148 |
: (off_t) (ph64.p_align ? \ |
| 149 |
getu64(swap, ph64.p_align) : 4))) |
149 |
getu64(swap, ph64.p_align) : 4))) |
|
|
150 |
#define ph_filesz (class == ELFCLASS32 \ |
| 151 |
? getu32(swap, ph32.p_filesz) \ |
| 152 |
: getu64(swap, ph64.p_filesz)) |
| 150 |
#define nh_size (class == ELFCLASS32 \ |
153 |
#define nh_size (class == ELFCLASS32 \ |
| 151 |
? sizeof nh32 \ |
154 |
? sizeof nh32 \ |
| 152 |
: sizeof nh64) |
155 |
: sizeof nh64) |
|
Lines 249-255
Link Here
|
| 249 |
file_badseek(ms); |
252 |
file_badseek(ms); |
| 250 |
return -1; |
253 |
return -1; |
| 251 |
} |
254 |
} |
| 252 |
bufsize = read(fd, nbuf, BUFSIZ); |
255 |
bufsize = read(fd, nbuf, ((ph_filesz < BUFSIZ) ? ph_filesz : BUFSIZ)); |
| 253 |
if (bufsize == -1) { |
256 |
if (bufsize == -1) { |
| 254 |
file_badread(ms); |
257 |
file_badread(ms); |
| 255 |
return -1; |
258 |
return -1; |
|
Lines 297-303
Link Here
|
| 297 |
noff = offset; |
297 |
noff = offset; |
| 298 |
doff = ELF_ALIGN(offset + nh_namesz); |
298 |
doff = ELF_ALIGN(offset + nh_namesz); |
| 299 |
|
299 |
|
| 300 |
if (offset + nh_namesz >= size) { |
300 |
if (doff > size) { |
| 301 |
/* |
301 |
/* |
| 302 |
* We're past the end of the buffer. |
302 |
* We're past the end of the buffer. |
| 303 |
*/ |
303 |
*/ |
|
Lines 305-311
Link Here
|
| 305 |
} |
305 |
} |
| 306 |
|
306 |
|
| 307 |
offset = ELF_ALIGN(doff + nh_descsz); |
307 |
offset = ELF_ALIGN(doff + nh_descsz); |
| 308 |
if (offset + nh_descsz >= size) |
308 |
if (offset > size) |
| 309 |
return offset; |
309 |
return offset; |
| 310 |
|
310 |
|
| 311 |
if (nh_namesz == 4 && strcmp((char *)&nbuf[noff], "GNU") == 0 && |
311 |
if (nh_namesz == 4 && strcmp((char *)&nbuf[noff], "GNU") == 0 && |
|
Lines 622-628
Link Here
|
| 622 |
file_badseek(ms); |
625 |
file_badseek(ms); |
| 623 |
return -1; |
626 |
return -1; |
| 624 |
} |
627 |
} |
| 625 |
bufsize = read(fd, nbuf, sizeof(nbuf)); |
628 |
bufsize = read(fd, nbuf, |
|
|
629 |
((ph_filesz < sizeof(nbuf)) ? ph_filesz : sizeof(nbuf))); |
| 626 |
if (bufsize == -1) { |
630 |
if (bufsize == -1) { |
| 627 |
file_badread(ms); |
631 |
file_badread(ms); |
| 628 |
return -1; |
632 |
return -1; |
|
Lines 634-640
Link Here
|
| 634 |
offset = donote(ms, nbuf, offset, |
638 |
offset = donote(ms, nbuf, offset, |
| 635 |
(size_t)bufsize, class, swap, ph_align); |
639 |
(size_t)bufsize, class, swap, ph_align); |
| 636 |
} |
640 |
} |
| 637 |
if (lseek(fd, savedoffset + offset, SEEK_SET) |
641 |
if (lseek(fd, savedoffset, SEEK_SET) |
| 638 |
== (off_t)-1) { |
642 |
== (off_t)-1) { |
| 639 |
file_badseek(ms); |
643 |
file_badseek(ms); |
| 640 |
return -1; |
644 |
return -1; |