| Index: components/nacl/loader/nonsfi/elf_loader.cc
|
| diff --git a/components/nacl/loader/nonsfi/elf_loader.cc b/components/nacl/loader/nonsfi/elf_loader.cc
|
| index c62117b459810672acbe5acd743204afa0128b77..cb1334e40b9e00a1899610c6632a967ea8eb19c0 100644
|
| --- a/components/nacl/loader/nonsfi/elf_loader.cc
|
| +++ b/components/nacl/loader/nonsfi/elf_loader.cc
|
| @@ -270,8 +270,8 @@ NaClErrorCode ElfImage::Read(struct NaClDesc* descriptor) {
|
| ::scoped_ptr<Data> data(new Data);
|
|
|
| // Read elf header.
|
| - ssize_t read_ret = (*NACL_VTBL(NaClDesc, descriptor)->PRead)(
|
| - descriptor, &data->ehdr, sizeof(data->ehdr), 0);
|
| + ssize_t read_ret = (*NACL_VTBL(NaClDesc, descriptor)->Read)(
|
| + descriptor, &data->ehdr, sizeof(data->ehdr));
|
| if (NaClSSizeIsNegErrno(&read_ret) ||
|
| static_cast<size_t>(read_ret) != sizeof(data->ehdr)) {
|
| LOG(ERROR) << "Could not load elf headers.";
|
| @@ -295,9 +295,18 @@ NaClErrorCode ElfImage::Read(struct NaClDesc* descriptor) {
|
| return LOAD_BAD_PHENTSIZE;
|
| }
|
|
|
| + // We avoid the use of pread here to reduce the number of required
|
| + // syscalls for non-SFI mode.
|
| + off_t ret = (*NACL_VTBL(NaClDesc, descriptor)->Seek)(
|
| + descriptor, data->ehdr.e_phoff, SEEK_SET);
|
| + if (ret != static_cast<off_t>(data->ehdr.e_phoff)) {
|
| + LOG(ERROR) << "Cannot load prog headers";
|
| + return LOAD_READ_ERROR;
|
| + }
|
| +
|
| size_t read_size = data->ehdr.e_phnum * data->ehdr.e_phentsize;
|
| - read_ret = (*NACL_VTBL(NaClDesc, descriptor)->PRead)(
|
| - descriptor, data->phdrs, read_size, data->ehdr.e_phoff);
|
| + read_ret = (*NACL_VTBL(NaClDesc, descriptor)->Read)(
|
| + descriptor, data->phdrs, read_size);
|
|
|
| if (NaClSSizeIsNegErrno(&read_ret) ||
|
| static_cast<size_t>(read_ret) != read_size) {
|
|
|