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, |
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
12 // See the License for the specific language governing permissions and | 12 // See the License for the specific language governing permissions and |
13 // limitations under the License. | 13 // limitations under the License. |
14 | 14 |
15 #include "util/mach/mach_message.h" | 15 #include "util/mach/mach_message.h" |
16 | 16 |
17 #include <AvailabilityMacros.h> | 17 #include <AvailabilityMacros.h> |
18 #include <bsm/libbsm.h> | 18 #include <bsm/libbsm.h> |
19 | 19 |
20 #include <limits> | 20 #include <limits> |
21 | 21 |
22 #include "base/logging.h" | 22 #include "base/logging.h" |
| 23 #include "base/mac/mach_logging.h" |
23 #include "util/misc/clock.h" | 24 #include "util/misc/clock.h" |
24 #include "util/misc/implicit_cast.h" | 25 #include "util/misc/implicit_cast.h" |
25 | 26 |
26 namespace crashpad { | 27 namespace crashpad { |
27 | 28 |
28 namespace { | 29 namespace { |
29 | 30 |
30 const int kNanosecondsPerMillisecond = 1E6; | 31 const int kNanosecondsPerMillisecond = 1E6; |
31 | 32 |
32 // TimerRunning() determines whether |deadline| has passed. If |deadline| is | 33 // TimerRunning() determines whether |deadline| has passed. If |deadline| is |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 &audit_pid, | 243 &audit_pid, |
243 nullptr, | 244 nullptr, |
244 nullptr); | 245 nullptr); |
245 #else | 246 #else |
246 pid_t audit_pid = audit_token_to_pid(audit_trailer->msgh_audit); | 247 pid_t audit_pid = audit_token_to_pid(audit_trailer->msgh_audit); |
247 #endif | 248 #endif |
248 | 249 |
249 return audit_pid; | 250 return audit_pid; |
250 } | 251 } |
251 | 252 |
| 253 bool MachMessageDestroyReceivedPort(mach_port_t port, |
| 254 mach_msg_type_name_t port_right_type) { |
| 255 // This implements a subset of 10.10.5 |
| 256 // xnu-2782.40.9/libsyscall/mach/mach_msg.c mach_msg_destroy_port() that deals |
| 257 // only with port rights that can be received in Mach messages. |
| 258 switch (port_right_type) { |
| 259 case MACH_MSG_TYPE_PORT_RECEIVE: { |
| 260 kern_return_t kr = mach_port_mod_refs( |
| 261 mach_task_self(), port, MACH_PORT_RIGHT_RECEIVE, -1); |
| 262 if (kr != KERN_SUCCESS) { |
| 263 MACH_LOG(ERROR, kr) << "mach_port_mod_refs"; |
| 264 return false; |
| 265 } |
| 266 return true; |
| 267 } |
| 268 |
| 269 case MACH_MSG_TYPE_PORT_SEND: |
| 270 case MACH_MSG_TYPE_PORT_SEND_ONCE: { |
| 271 kern_return_t kr = mach_port_deallocate(mach_task_self(), port); |
| 272 if (kr != KERN_SUCCESS) { |
| 273 MACH_LOG(ERROR, kr) << "mach_port_deallocate"; |
| 274 return false; |
| 275 } |
| 276 return true; |
| 277 } |
| 278 |
| 279 default: { |
| 280 LOG(ERROR) << "unexpected port right type " << port_right_type; |
| 281 return false; |
| 282 } |
| 283 } |
| 284 } |
| 285 |
252 } // namespace crashpad | 286 } // namespace crashpad |
OLD | NEW |