| Index: sandbox/linux/services/credentials.cc
|
| diff --git a/sandbox/linux/services/credentials.cc b/sandbox/linux/services/credentials.cc
|
| index c8c679d8515e16db91e2636315f3974747b5066a..e8dd1d943cb0278b439f0efbc07d26f5416629d7 100644
|
| --- a/sandbox/linux/services/credentials.cc
|
| +++ b/sandbox/linux/services/credentials.cc
|
| @@ -148,6 +148,21 @@ bool Credentials::DropAllCapabilities() {
|
| return Credentials::DropAllCapabilities(proc_fd.get());
|
| }
|
|
|
| +// static
|
| +bool Credentials::SetCapabilities(int proc_fd,
|
| + const std::vector<cap_value_t>& caps) {
|
| + DCHECK_LE(0, proc_fd);
|
| + CHECK(ThreadHelpers::IsSingleThreaded(proc_fd));
|
| +
|
| + sandbox::ScopedCap cap(cap_init());
|
| + PCHECK(cap != nullptr);
|
| + cap_flag_t flags[] = {CAP_EFFECTIVE, CAP_PERMITTED};
|
| + for (const cap_flag_t flag : flags) {
|
| + PCHECK(cap_set_flag(cap.get(), flag, caps.size(), &caps[0], CAP_SET) == 0);
|
| + }
|
| + return cap_set_proc(cap.get()) == 0;
|
| +}
|
| +
|
| bool Credentials::HasAnyCapability() {
|
| ScopedCap current_cap(cap_get_proc());
|
| CHECK(current_cap);
|
|
|