| Index: sandbox/linux/seccomp-bpf/syscall_iterator.h
|
| diff --git a/sandbox/linux/seccomp-bpf/syscall_iterator.h b/sandbox/linux/seccomp-bpf/syscall_iterator.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..39568d8f121897cfbfb2389eb76a5c55e50dd572
|
| --- /dev/null
|
| +++ b/sandbox/linux/seccomp-bpf/syscall_iterator.h
|
| @@ -0,0 +1,58 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef SANDBOX_LINUX_SECCOMP_BPF_SYSCALL_ITERATOR_H__
|
| +#define SANDBOX_LINUX_SECCOMP_BPF_SYSCALL_ITERATOR_H__
|
| +
|
| +#include <stdint.h>
|
| +
|
| +#include <base/logging.h>
|
| +
|
| +namespace playground2 {
|
| +
|
| +// Iterates over the entire system call range from 0..0xFFFFFFFFu. This
|
| +// iterator is aware of how system calls look like and will skip quickly
|
| +// over ranges that can't contain system calls. It iterates more slowly
|
| +// whenever it reaches a range that is potentially problematic, returning
|
| +// the last invalid value before a valid range of system calls, and the
|
| +// first invalid value after a valid range of syscalls. It iterates over
|
| +// individual values whenever it is in the normal range for system calls
|
| +// (typically MIN_SYSCALL..MAX_SYSCALL).
|
| +// If |invalid_only| is true, this iterator will only return invalid
|
| +// syscall numbers, but will still skip quickly over invalid ranges,
|
| +// returning the first invalid value in the range and then skipping
|
| +// to the last invalid value in the range.
|
| +//
|
| +// Example usage:
|
| +// for (SyscallIterator iter(false); !iter.Done(); ) {
|
| +// uint32_t sysnum = iter.Next();
|
| +// // Do something with sysnum.
|
| +// }
|
| +//
|
| +// TODO(markus): Make this a classic C++ iterator.
|
| +class SyscallIterator {
|
| + public:
|
| + explicit SyscallIterator(bool invalid_only)
|
| + : invalid_only_(invalid_only),
|
| + done_(false),
|
| + num_(0) {}
|
| +
|
| + bool Done() const { return done_; }
|
| + uint32_t Next();
|
| + static bool IsValid(uint32_t num);
|
| +
|
| + private:
|
| + static bool IsArmPrivate(uint32_t num);
|
| +
|
| + bool invalid_only_;
|
| + bool done_;
|
| + uint32_t num_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SyscallIterator);
|
| +};
|
| +
|
| +} // namespace playground2
|
| +
|
| +#endif // SANDBOX_LINUX_SECCOMP_BPF_SYSCALL_ITERATOR_H__
|
| +
|
|
|