| Index: components/nacl/loader/nonsfi/nonsfi_sandbox.cc
|
| diff --git a/components/nacl/loader/nonsfi/nonsfi_sandbox.cc b/components/nacl/loader/nonsfi/nonsfi_sandbox.cc
|
| index 9a148275c53a282e984b1dcf4bbfbab55861785b..9d71ddb508057c773e33c645957040ea0ccac565 100644
|
| --- a/components/nacl/loader/nonsfi/nonsfi_sandbox.cc
|
| +++ b/components/nacl/loader/nonsfi/nonsfi_sandbox.cc
|
| @@ -61,9 +61,9 @@ ResultExpr RestrictFcntlCommands() {
|
| // libevent and SetNonBlocking. As the latter mix O_NONBLOCK to
|
| // the return value of F_GETFL, so we need to allow O_ACCMODE in
|
| // addition to O_NONBLOCK.
|
| - const unsigned long denied_mask = ~(O_ACCMODE | O_NONBLOCK);
|
| + const uint64_t kAllowedMask = O_ACCMODE | O_NONBLOCK;
|
| return If((cmd == F_SETFD && long_arg == FD_CLOEXEC) || cmd == F_GETFL ||
|
| - (cmd == F_SETFL && (long_arg & denied_mask) == 0),
|
| + (cmd == F_SETFL && (long_arg & ~kAllowedMask) == 0),
|
| Allow()).Else(CrashSIGSYS());
|
| }
|
|
|
| @@ -78,10 +78,9 @@ ResultExpr RestrictClone() {
|
|
|
| ResultExpr RestrictFutexOperation() {
|
| // TODO(hamaji): Allow only FUTEX_PRIVATE_FLAG futexes.
|
| - const int kAllowedFutexFlags = FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME;
|
| - const int kOperationMask = ~kAllowedFutexFlags;
|
| + const uint64_t kAllowedFutexFlags = FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME;
|
| const Arg<int> op(1);
|
| - return Switch(op & kOperationMask)
|
| + return Switch(op & ~kAllowedFutexFlags)
|
| .CASES((FUTEX_WAIT,
|
| FUTEX_WAKE,
|
| FUTEX_REQUEUE,
|
| @@ -113,20 +112,20 @@ ResultExpr RestrictSocketcall() {
|
| ResultExpr RestrictMprotect() {
|
| // TODO(jln, keescook, drewry): Limit the use of mprotect by adding
|
| // some features to linux kernel.
|
| - const uint32_t denied_mask = ~(PROT_READ | PROT_WRITE | PROT_EXEC);
|
| + const uint64_t kAllowedMask = PROT_READ | PROT_WRITE | PROT_EXEC;
|
| const Arg<int> prot(2);
|
| - return If((prot & denied_mask) == 0, Allow()).Else(CrashSIGSYS());
|
| + return If((prot & ~kAllowedMask) == 0, Allow()).Else(CrashSIGSYS());
|
| }
|
|
|
| ResultExpr RestrictMmap() {
|
| - const uint32_t denied_flag_mask = ~(MAP_SHARED | MAP_PRIVATE |
|
| - MAP_ANONYMOUS | MAP_STACK | MAP_FIXED);
|
| + const uint64_t kAllowedFlagMask =
|
| + MAP_SHARED | MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK | MAP_FIXED;
|
| // When PROT_EXEC is specified, IRT mmap of Non-SFI NaCl helper
|
| // calls mmap without PROT_EXEC and then adds PROT_EXEC by mprotect,
|
| // so we do not need to allow PROT_EXEC in mmap.
|
| - const uint32_t denied_prot_mask = ~(PROT_READ | PROT_WRITE);
|
| + const uint64_t kAllowedProtMask = PROT_READ | PROT_WRITE;
|
| const Arg<int> prot(2), flags(3);
|
| - return If((prot & denied_prot_mask) == 0 && (flags & denied_flag_mask) == 0,
|
| + return If((prot & ~kAllowedProtMask) == 0 && (flags & ~kAllowedFlagMask) == 0,
|
| Allow()).Else(CrashSIGSYS());
|
| }
|
|
|
|
|