bionic: Update GSI patches for bionic
Signed-off-by: Jackeagle <jackeagle102@gmail.com>
diff --git a/patches/bionic/0001-Actually-restore-pre-P-mutex-behavior.patch b/patches/bionic/0001-Actually-restore-pre-P-mutex-behavior.patch
new file mode 100644
index 0000000..1bc9021
--- /dev/null
+++ b/patches/bionic/0001-Actually-restore-pre-P-mutex-behavior.patch
@@ -0,0 +1,56 @@
+From b3343e687842ad54ca1621f6dcb1d99e6826d65d Mon Sep 17 00:00:00 2001
+From: Ethan Chen <intervigil@gmail.com>
+Date: Tue, 25 Sep 2018 00:11:05 -0700
+Subject: [PATCH 1/2] Actually restore pre-P mutex behavior
+
+Apps built against versions < P may not actually expect the EBUSY return
+code, and may crash or otherwise misbehave. Check for target SDK
+versions earlier than P when performing the IsMutexDestroyed check so
+any invocation of HandleUsingDestroyedMutex is bypassed and pre-P mutex
+behavior is restored.
+
+See 9e989f12d1186231d97dac6d038db7955acebdf3 for the change that
+introduced this new behavior.
+
+Change-Id: I45f8882c9527c63eed1ef5820a5004b8958d58ea
+---
+ libc/bionic/pthread_mutex.cpp | 19 ++++++++++++-------
+ 1 file changed, 12 insertions(+), 7 deletions(-)
+
+diff --git a/libc/bionic/pthread_mutex.cpp b/libc/bionic/pthread_mutex.cpp
+index bc7bd653f..517e52688 100644
+--- a/libc/bionic/pthread_mutex.cpp
++++ b/libc/bionic/pthread_mutex.cpp
+@@ -782,17 +782,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 inline __attribute__((noinline)) bool 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 (bionic_get_application_target_sdk_version() >= __ANDROID_API_P__) {
+- __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;
+ }
+
+--
+2.21.0
+