Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(269)

Unified Diff: components/nacl/loader/nonsfi/elf_loader.cc

Issue 196793023: Add seccomp sandbox for non-SFI NaCl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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) {

Powered by Google App Engine
This is Rietveld 408576698