OLD | NEW |
1 // Copyright 2014 The Crashpad Authors. All rights reserved. | 1 // Copyright 2014 The Crashpad Authors. All rights reserved. |
2 // | 2 // |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
6 // | 6 // |
7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
8 // | 8 // |
9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
(...skipping 16 matching lines...) Expand all Loading... |
27 | 27 |
28 #include "base/basictypes.h" | 28 #include "base/basictypes.h" |
29 #include "base/mac/mach_logging.h" | 29 #include "base/mac/mach_logging.h" |
30 #include "base/mac/scoped_mach_port.h" | 30 #include "base/mac/scoped_mach_port.h" |
31 #include "base/strings/stringprintf.h" | 31 #include "base/strings/stringprintf.h" |
32 #include "tools/tool_support.h" | 32 #include "tools/tool_support.h" |
33 #include "util/mach/exception_ports.h" | 33 #include "util/mach/exception_ports.h" |
34 #include "util/mach/mach_extensions.h" | 34 #include "util/mach/mach_extensions.h" |
35 #include "util/mach/symbolic_constants_mach.h" | 35 #include "util/mach/symbolic_constants_mach.h" |
36 #include "util/mach/task_for_pid.h" | 36 #include "util/mach/task_for_pid.h" |
| 37 #include "util/posix/drop_privileges.h" |
37 #include "util/stdlib/string_number_conversion.h" | 38 #include "util/stdlib/string_number_conversion.h" |
38 | 39 |
39 namespace crashpad { | 40 namespace crashpad { |
40 namespace { | 41 namespace { |
41 | 42 |
42 //! \brief Manages a pool of Mach send rights, deallocating all send rights upon | 43 //! \brief Manages a pool of Mach send rights, deallocating all send rights upon |
43 //! destruction. | 44 //! destruction. |
44 //! | 45 //! |
45 //! This class effectively implements what a vector of | 46 //! This class effectively implements what a vector of |
46 //! base::mac::ScopedMachSendRight objects would be. | 47 //! base::mac::ScopedMachSendRight objects would be. |
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
496 return kExitFailure; | 497 return kExitFailure; |
497 } | 498 } |
498 | 499 |
499 options.alternate_task = TaskForPID(options.pid); | 500 options.alternate_task = TaskForPID(options.pid); |
500 if (options.alternate_task == TASK_NULL) { | 501 if (options.alternate_task == TASK_NULL) { |
501 return kExitFailure; | 502 return kExitFailure; |
502 } | 503 } |
503 alternate_task_owner.reset(options.alternate_task); | 504 alternate_task_owner.reset(options.alternate_task); |
504 } | 505 } |
505 | 506 |
| 507 // This tool may have been installed as a setuid binary so that TaskForPID() |
| 508 // could succeed. Drop any privileges now that they’re no longer necessary. |
| 509 DropPrivileges(); |
| 510 |
506 MachSendRightPool mach_send_right_pool; | 511 MachSendRightPool mach_send_right_pool; |
507 | 512 |
508 // Show bootstrap services requested. | 513 // Show bootstrap services requested. |
509 for (const char* service : options.show_bootstrap) { | 514 for (const char* service : options.show_bootstrap) { |
510 ShowBootstrapService(service, &mach_send_right_pool); | 515 ShowBootstrapService(service, &mach_send_right_pool); |
511 } | 516 } |
512 | 517 |
513 // Show the original exception ports. | 518 // Show the original exception ports. |
514 if (options.show_host) { | 519 if (options.show_host) { |
515 ShowExceptionPorts( | 520 ShowExceptionPorts( |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
580 | 585 |
581 return kExitSuccess; | 586 return kExitSuccess; |
582 } | 587 } |
583 | 588 |
584 } // namespace | 589 } // namespace |
585 } // namespace crashpad | 590 } // namespace crashpad |
586 | 591 |
587 int main(int argc, char* argv[]) { | 592 int main(int argc, char* argv[]) { |
588 return crashpad::ExceptionPortToolMain(argc, argv); | 593 return crashpad::ExceptionPortToolMain(argc, argv); |
589 } | 594 } |
OLD | NEW |