OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "sandbox/linux/services/credentials.h" | 5 #include "sandbox/linux/services/credentials.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <signal.h> | 8 #include <signal.h> |
9 #include <stdio.h> | 9 #include <stdio.h> |
10 #include <sys/capability.h> | 10 #include <sys/capability.h> |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 } | 196 } |
197 int ret = unshare(CLONE_NEWUSER); | 197 int ret = unshare(CLONE_NEWUSER); |
198 if (ret) { | 198 if (ret) { |
199 const int unshare_errno = errno; | 199 const int unshare_errno = errno; |
200 VLOG(1) << "Looks like unprivileged CLONE_NEWUSER may not be available " | 200 VLOG(1) << "Looks like unprivileged CLONE_NEWUSER may not be available " |
201 << "on this kernel."; | 201 << "on this kernel."; |
202 CheckCloneNewUserErrno(unshare_errno); | 202 CheckCloneNewUserErrno(unshare_errno); |
203 return false; | 203 return false; |
204 } | 204 } |
205 | 205 |
| 206 if (NamespaceUtils::KernelSupportsDenySetgroups()) { |
| 207 PCHECK(NamespaceUtils::DenySetgroups()); |
| 208 } |
| 209 |
206 // The current {r,e,s}{u,g}id is now an overflow id (c.f. | 210 // The current {r,e,s}{u,g}id is now an overflow id (c.f. |
207 // /proc/sys/kernel/overflowuid). Setup the uid and gid maps. | 211 // /proc/sys/kernel/overflowuid). Setup the uid and gid maps. |
208 DCHECK(GetRESIds(NULL, NULL)); | 212 DCHECK(GetRESIds(NULL, NULL)); |
209 const char kGidMapFile[] = "/proc/self/gid_map"; | 213 const char kGidMapFile[] = "/proc/self/gid_map"; |
210 const char kUidMapFile[] = "/proc/self/uid_map"; | 214 const char kUidMapFile[] = "/proc/self/uid_map"; |
211 CHECK(NamespaceUtils::WriteToIdMapFile(kGidMapFile, gid)); | 215 PCHECK(NamespaceUtils::WriteToIdMapFile(kGidMapFile, gid)); |
212 CHECK(NamespaceUtils::WriteToIdMapFile(kUidMapFile, uid)); | 216 PCHECK(NamespaceUtils::WriteToIdMapFile(kUidMapFile, uid)); |
213 DCHECK(GetRESIds(NULL, NULL)); | 217 DCHECK(GetRESIds(NULL, NULL)); |
214 return true; | 218 return true; |
215 } | 219 } |
216 | 220 |
217 bool Credentials::DropFileSystemAccess() { | 221 bool Credentials::DropFileSystemAccess() { |
218 CHECK(ChrootToSafeEmptyDir()); | 222 CHECK(ChrootToSafeEmptyDir()); |
219 CHECK(!base::DirectoryExists(base::FilePath("/proc"))); | 223 CHECK(!base::DirectoryExists(base::FilePath("/proc"))); |
220 // We never let this function fail. | 224 // We never let this function fail. |
221 return true; | 225 return true; |
222 } | 226 } |
223 | 227 |
224 } // namespace sandbox. | 228 } // namespace sandbox. |
OLD | NEW |