Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(99)

Side by Side Diff: content/zygote/zygote_main_linux.cc

Issue 10446043: Cleanup: Remove the C version of GetUrandomFD() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Copyright Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/common/sandbox_mac.mm ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <dlfcn.h> 5 #include <dlfcn.h>
6 #include <fcntl.h> 6 #include <fcntl.h>
7 #include <pthread.h> 7 #include <pthread.h>
8 #include <stdio.h> 8 #include <stdio.h>
9 #include <sys/socket.h> 9 #include <sys/socket.h>
10 #include <sys/stat.h> 10 #include <sys/stat.h>
11 #include <sys/types.h> 11 #include <sys/types.h>
12 #include <sys/wait.h> 12 #include <sys/wait.h>
13 #include <unistd.h> 13 #include <unistd.h>
14 14
15 #include "base/basictypes.h" 15 #include "base/basictypes.h"
16 #include "base/command_line.h" 16 #include "base/command_line.h"
17 #include "base/eintr_wrapper.h" 17 #include "base/eintr_wrapper.h"
18 #include "base/file_path.h" 18 #include "base/file_path.h"
19 #include "base/hash_tables.h" 19 #include "base/hash_tables.h"
20 #include "base/linux_util.h" 20 #include "base/linux_util.h"
21 #include "base/memory/scoped_ptr.h" 21 #include "base/memory/scoped_ptr.h"
22 #include "base/pickle.h" 22 #include "base/pickle.h"
23 #include "base/process_util.h" 23 #include "base/process_util.h"
24 #include "base/rand_util.h" 24 #include "base/rand_util.h"
25 #include "base/rand_util_c.h"
26 #include "base/sys_info.h" 25 #include "base/sys_info.h"
27 #include "build/build_config.h" 26 #include "build/build_config.h"
28 #include "crypto/nss_util.h" 27 #include "crypto/nss_util.h"
29 #include "content/common/font_config_ipc_linux.h" 28 #include "content/common/font_config_ipc_linux.h"
30 #include "content/common/pepper_plugin_registry.h" 29 #include "content/common/pepper_plugin_registry.h"
31 #include "content/common/sandbox_methods_linux.h" 30 #include "content/common/sandbox_methods_linux.h"
32 #include "content/common/seccomp_sandbox.h" 31 #include "content/common/seccomp_sandbox.h"
33 #include "content/common/unix_domain_socket_posix.h" 32 #include "content/common/unix_domain_socket_posix.h"
34 #include "content/common/zygote_commands_linux.h" 33 #include "content/common/zygote_commands_linux.h"
35 #include "content/public/common/content_switches.h" 34 #include "content/public/common/content_switches.h"
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 // means that we cannot override fopen() directly here. Instead the 332 // means that we cannot override fopen() directly here. Instead the
334 // the code below defines fopen_override() function with asm name 333 // the code below defines fopen_override() function with asm name
335 // "fopen", so that all references to fopen() will resolve to this 334 // "fopen", so that all references to fopen() will resolve to this
336 // function. 335 // function.
337 __attribute__ ((__visibility__("default"))) 336 __attribute__ ((__visibility__("default")))
338 FILE* fopen_override(const char* path, const char* mode) __asm__ ("fopen"); 337 FILE* fopen_override(const char* path, const char* mode) __asm__ ("fopen");
339 338
340 __attribute__ ((__visibility__("default"))) 339 __attribute__ ((__visibility__("default")))
341 FILE* fopen_override(const char* path, const char* mode) { 340 FILE* fopen_override(const char* path, const char* mode) {
342 if (g_am_zygote_or_renderer && strcmp(path, kUrandomDevPath) == 0) { 341 if (g_am_zygote_or_renderer && strcmp(path, kUrandomDevPath) == 0) {
343 int fd = HANDLE_EINTR(dup(GetUrandomFD())); 342 int fd = HANDLE_EINTR(dup(base::GetUrandomFD()));
344 if (fd < 0) { 343 if (fd < 0) {
345 PLOG(ERROR) << "dup() failed."; 344 PLOG(ERROR) << "dup() failed.";
346 return NULL; 345 return NULL;
347 } 346 }
348 return fdopen(fd, mode); 347 return fdopen(fd, mode);
349 } else { 348 } else {
350 CHECK_EQ(0, pthread_once(&g_libc_file_io_funcs_guard, 349 CHECK_EQ(0, pthread_once(&g_libc_file_io_funcs_guard,
351 InitLibcFileIOFunctions)); 350 InitLibcFileIOFunctions));
352 return g_libc_fopen(path, mode); 351 return g_libc_fopen(path, mode);
353 } 352 }
354 } 353 }
355 354
356 __attribute__ ((__visibility__("default"))) 355 __attribute__ ((__visibility__("default")))
357 FILE* fopen64(const char* path, const char* mode) { 356 FILE* fopen64(const char* path, const char* mode) {
358 if (g_am_zygote_or_renderer && strcmp(path, kUrandomDevPath) == 0) { 357 if (g_am_zygote_or_renderer && strcmp(path, kUrandomDevPath) == 0) {
359 int fd = HANDLE_EINTR(dup(GetUrandomFD())); 358 int fd = HANDLE_EINTR(dup(base::GetUrandomFD()));
360 if (fd < 0) { 359 if (fd < 0) {
361 PLOG(ERROR) << "dup() failed."; 360 PLOG(ERROR) << "dup() failed.";
362 return NULL; 361 return NULL;
363 } 362 }
364 return fdopen(fd, mode); 363 return fdopen(fd, mode);
365 } else { 364 } else {
366 CHECK_EQ(0, pthread_once(&g_libc_file_io_funcs_guard, 365 CHECK_EQ(0, pthread_once(&g_libc_file_io_funcs_guard,
367 InitLibcFileIOFunctions)); 366 InitLibcFileIOFunctions));
368 return g_libc_fopen64(path, mode); 367 return g_libc_fopen64(path, mode);
369 } 368 }
370 } 369 }
371 370
372 // stat() is subject to the same problem as fopen(), so we have to use 371 // stat() is subject to the same problem as fopen(), so we have to use
373 // the same trick to override it. 372 // the same trick to override it.
374 __attribute__ ((__visibility__("default"))) 373 __attribute__ ((__visibility__("default")))
375 int xstat_override(int version, 374 int xstat_override(int version,
376 const char *path, 375 const char *path,
377 struct stat *buf) __asm__ ("__xstat"); 376 struct stat *buf) __asm__ ("__xstat");
378 377
379 __attribute__ ((__visibility__("default"))) 378 __attribute__ ((__visibility__("default")))
380 int xstat_override(int version, const char *path, struct stat *buf) { 379 int xstat_override(int version, const char *path, struct stat *buf) {
381 if (g_am_zygote_or_renderer && strcmp(path, kUrandomDevPath) == 0) { 380 if (g_am_zygote_or_renderer && strcmp(path, kUrandomDevPath) == 0) {
382 int result = __fxstat(version, GetUrandomFD(), buf); 381 int result = __fxstat(version, base::GetUrandomFD(), buf);
383 return result; 382 return result;
384 } else { 383 } else {
385 CHECK_EQ(0, pthread_once(&g_libc_file_io_funcs_guard, 384 CHECK_EQ(0, pthread_once(&g_libc_file_io_funcs_guard,
386 InitLibcFileIOFunctions)); 385 InitLibcFileIOFunctions));
387 return g_libc_xstat(version, path, buf); 386 return g_libc_xstat(version, path, buf);
388 } 387 }
389 } 388 }
390 389
391 __attribute__ ((__visibility__("default"))) 390 __attribute__ ((__visibility__("default")))
392 int xstat64_override(int version, 391 int xstat64_override(int version,
393 const char *path, 392 const char *path,
394 struct stat64 *buf) __asm__ ("__xstat64"); 393 struct stat64 *buf) __asm__ ("__xstat64");
395 394
396 __attribute__ ((__visibility__("default"))) 395 __attribute__ ((__visibility__("default")))
397 int xstat64_override(int version, const char *path, struct stat64 *buf) { 396 int xstat64_override(int version, const char *path, struct stat64 *buf) {
398 if (g_am_zygote_or_renderer && strcmp(path, kUrandomDevPath) == 0) { 397 if (g_am_zygote_or_renderer && strcmp(path, kUrandomDevPath) == 0) {
399 int result = __fxstat64(version, GetUrandomFD(), buf); 398 int result = __fxstat64(version, base::GetUrandomFD(), buf);
400 return result; 399 return result;
401 } else { 400 } else {
402 CHECK_EQ(0, pthread_once(&g_libc_file_io_funcs_guard, 401 CHECK_EQ(0, pthread_once(&g_libc_file_io_funcs_guard,
403 InitLibcFileIOFunctions)); 402 InitLibcFileIOFunctions));
404 CHECK(g_libc_xstat64); 403 CHECK(g_libc_xstat64);
405 return g_libc_xstat64(version, path, buf); 404 return g_libc_xstat64(version, path, buf);
406 } 405 }
407 } 406 }
408 407
409 #endif // !ADDRESS_SANITIZER 408 #endif // !ADDRESS_SANITIZER
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 } 687 }
689 } 688 }
690 #endif // SECCOMP_SANDBOX 689 #endif // SECCOMP_SANDBOX
691 690
692 Zygote zygote(sandbox_flags, forkdelegate, proc_fd_for_seccomp); 691 Zygote zygote(sandbox_flags, forkdelegate, proc_fd_for_seccomp);
693 // This function call can return multiple times, once per fork(). 692 // This function call can return multiple times, once per fork().
694 return zygote.ProcessRequests(); 693 return zygote.ProcessRequests();
695 } 694 }
696 695
697 } // namespace content 696 } // namespace content
OLDNEW
« no previous file with comments | « content/common/sandbox_mac.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698