diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/Android.bp | 1 | ||||
| -rw-r--r-- | libc/bionic/pthread_mutex.cpp | 22 | ||||
| -rw-r--r-- | libc/include/arpa/inet.h | 1 | ||||
| -rw-r--r-- | libc/include/bits/in_addr.h | 3 | ||||
| -rw-r--r-- | libc/include/inaddr.h | 36 |
5 files changed, 53 insertions, 10 deletions
diff --git a/libc/Android.bp b/libc/Android.bp index 2c0656f72..1e671f1ec 100644 --- a/libc/Android.bp +++ b/libc/Android.bp @@ -1984,6 +1984,7 @@ cc_library { name: "libstdc++", static_ndk_lib: true, static_libs: ["libasync_safe"], + vendor_available: true, static: { system_shared_libs: [], diff --git a/libc/bionic/pthread_mutex.cpp b/libc/bionic/pthread_mutex.cpp index a15e98149..ead3e632e 100644 --- a/libc/bionic/pthread_mutex.cpp +++ b/libc/bionic/pthread_mutex.cpp @@ -527,7 +527,8 @@ int pthread_mutex_init(pthread_mutex_t* mutex_interface, const pthread_mutexattr return EINVAL; } - if (((*attr & MUTEXATTR_PROTOCOL_MASK) >> MUTEXATTR_PROTOCOL_SHIFT) == PTHREAD_PRIO_INHERIT) { + if (((*attr & MUTEXATTR_PROTOCOL_MASK) >> MUTEXATTR_PROTOCOL_SHIFT) == PTHREAD_PRIO_INHERIT + && android_get_application_target_sdk_version() >= 28) { #if !defined(__LP64__) if (state & MUTEX_SHARED_MASK) { return EINVAL; @@ -791,17 +792,22 @@ static int MutexLockWithTimeout(pthread_mutex_internal_t* mutex, bool use_realti } // namespace NonPI -static inline __always_inline bool IsMutexDestroyed(uint16_t mutex_state) { - return mutex_state == 0xffff; -} - // Inlining this function in pthread_mutex_lock() adds the cost of stack frame instructions on // ARM64. So make it noinline. -static int __attribute__((noinline)) HandleUsingDestroyedMutex(pthread_mutex_t* mutex, - const char* function_name) { +static bool __attribute__((noinline)) IsMutexDestroyed(uint16_t mutex_state) { + // Checking for mutex destruction is a P-specific behavior. Bypass the + // check if the SDK version precedes P, so that no change in behavior + // that may cause crashes is introduced. if (android_get_application_target_sdk_version() >= 28) { - __fortify_fatal("%s called on a destroyed mutex (%p)", function_name, mutex); + return mutex_state == 0xffff; + } else { + return false; } +} + +static int __always_inline HandleUsingDestroyedMutex(pthread_mutex_t* mutex, + const char* function_name) { + __fortify_fatal("%s called on a destroyed mutex (%p)", function_name, mutex); return EBUSY; } diff --git a/libc/include/arpa/inet.h b/libc/include/arpa/inet.h index db054c9e1..7716b9445 100644 --- a/libc/include/arpa/inet.h +++ b/libc/include/arpa/inet.h @@ -33,6 +33,7 @@ #include <stdint.h> #include <sys/cdefs.h> #include <sys/types.h> +#include <inaddr.h> __BEGIN_DECLS diff --git a/libc/include/bits/in_addr.h b/libc/include/bits/in_addr.h index 30eb04b66..3e46dad2b 100644 --- a/libc/include/bits/in_addr.h +++ b/libc/include/bits/in_addr.h @@ -36,8 +36,7 @@ #include <sys/cdefs.h> #include <stdint.h> -/** An integral type representing an IPv4 address. */ -typedef uint32_t in_addr_t; +#include <inaddr.h> /** A structure representing an IPv4 address. */ struct in_addr { diff --git a/libc/include/inaddr.h b/libc/include/inaddr.h new file mode 100644 index 000000000..524addabf --- /dev/null +++ b/libc/include/inaddr.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef _INADDR_H_ +#define _INADDR_H_ + +#include <stdint.h> + +typedef uint32_t in_addr_t; + +#endif |
