| Index: components/nacl/browser/nacl_browser.cc
|
| diff --git a/components/nacl/browser/nacl_browser.cc b/components/nacl/browser/nacl_browser.cc
|
| index f271af69b0f8c957fa9a914cc4baefba1102c9cd..9dfa49f2a3f2c776c8d49f855eb2c909d42067a4 100644
|
| --- a/components/nacl/browser/nacl_browser.cc
|
| +++ b/components/nacl/browser/nacl_browser.cc
|
| @@ -116,20 +116,24 @@ const int64 kCrashesIntervalInSeconds = 120;
|
|
|
| namespace nacl {
|
|
|
| -base::File OpenNaClExecutableImpl(const base::FilePath& file_path) {
|
| +base::File OpenNaClReadExecImpl(const base::FilePath& file_path,
|
| + bool is_executable) {
|
| // Get a file descriptor. On Windows, we need 'GENERIC_EXECUTE' in order to
|
| // memory map the executable.
|
| // IMPORTANT: This file descriptor must not have write access - that could
|
| // allow a NaCl inner sandbox escape.
|
| - base::File file(file_path,
|
| - (base::File::FLAG_OPEN |
|
| - base::File::FLAG_READ |
|
| - base::File::FLAG_EXECUTE)); // Windows only flag.
|
| +
|
| + base::File file(file_path, is_executable
|
| + ? base::File::FLAG_OPEN |
|
| + base::File::FLAG_READ |
|
| + base::File::FLAG_EXECUTE // Windows only flag
|
| + : base::File::FLAG_OPEN |
|
| + base::File::FLAG_READ);
|
| if (!file.IsValid())
|
| return file.Pass();
|
|
|
| // Check that the file does not reference a directory. Returning a descriptor
|
| - // to an extension directory could allow an outer sandbox escape. openat(...)
|
| + // to a directory could allow an outer sandbox escape. openat(...)
|
| // could be used to traverse into the file system.
|
| base::File::Info file_info;
|
| if (!file.GetInfo(&file_info) || file_info.is_directory)
|
|
|