external/breakpad/0001-Handle-race-between-ExceptionHandler-SignalHandler-a.patch.1
 |   33 ++++++++++
 external/breakpad/UnpackedTarball_breakpad.mk                                  
     |    4 +
 2 files changed, 37 insertions(+)

New commits:
commit ac4e861203054479d06a31784a3385fc77d76b35
Author:     Stephan Bergmann <[email protected]>
AuthorDate: Thu Aug 16 10:16:43 2018 +0200
Commit:     Stephan Bergmann <[email protected]>
CommitDate: Thu Aug 16 13:40:11 2018 +0200

    Handle race in external/breakpad
    
    ...that hit once in a UBSan build in UITest_calc_tests4:
    
    > soffice.bin: 
/data/sbergman/lo-san/core/include/com/sun/star/uno/Reference.h:420: 
interface_type 
*com::sun::star::uno::Reference<com::sun::star::xml::crypto::XXMLSecurityContext>::operator->()
 const [interface_type = com::sun::star::xml::crypto::XXMLSecurityContext]: 
Assertion `_pInterface != NULL' failed.
    > warn:desktop:11041:11425:desktop/source/app/sofficemain.cxx:82: minidump 
generated: 
/data/sbergman/lo-san/core/workdir/UITest/calc_tests4/user/crash//0585280b-6f1e-fa99-4b711485-60baa6f1.dmp
    > src/client/linux/handler/exception_handler.cc:367:34: runtime error: 
member call on null pointer of type 
'std::vector<google_breakpad::ExceptionHandler *, 
std::allocator<google_breakpad::ExceptionHandler *> >'
    > warn:sal.osl.mutex:11041:11041:sal/osl/unx/mutex.cxx:82: 
pthread_mutex_destroy failed: Device or resource busy
    >  #0 in google_breakpad::ExceptionHandler::SignalHandler(int, siginfo_t*, 
void*) at <null> (instdir/program/libsofficeapp.so +0x963904)
    > 
warn:unotools.config:11041:11041:unotools/source/config/configmgr.cxx:169: 
ConfigManager not empty
    >  #1  at <null> (/lib64/libpthread.so.0 +0x11fbf)
    
    Change-Id: Icf46adea879c0541a297e5f54f9ce936caa9858b
    Reviewed-on: https://gerrit.libreoffice.org/59157
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <[email protected]>

diff --git 
a/external/breakpad/0001-Handle-race-between-ExceptionHandler-SignalHandler-a.patch.1
 
b/external/breakpad/0001-Handle-race-between-ExceptionHandler-SignalHandler-a.patch.1
new file mode 100644
index 000000000000..a88c2cdd32bb
--- /dev/null
+++ 
b/external/breakpad/0001-Handle-race-between-ExceptionHandler-SignalHandler-a.patch.1
@@ -0,0 +1,33 @@
+From caa6f1ea462d0f0c612b871106e3e309fe0290f5 Mon Sep 17 00:00:00 2001
+From: Stephan Bergmann <[email protected]>
+Date: Thu, 16 Aug 2018 09:04:35 +0200
+Subject: [PATCH] Handle race between ExceptionHandler::SignalHandler and
+ ~ExceptionHandler
+
+...where thread A is blocked locking g_handler_stack_mutex_ in SignalHandler
+while thread B executes ~ExceptionHandler and sets g_handler_stack to null, but
+which thread A didn't expect to be null once it acquired the lock.
+---
+ src/client/linux/handler/exception_handler.cc | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/src/client/linux/handler/exception_handler.cc 
b/src/client/linux/handler/exception_handler.cc
+index b895f6d7..4d58e510 100644
+--- a/src/client/linux/handler/exception_handler.cc
++++ b/src/client/linux/handler/exception_handler.cc
+@@ -372,8 +372,10 @@ void ExceptionHandler::SignalHandler(int sig, siginfo_t* 
info, void* uc) {
+   }
+ 
+   bool handled = false;
+-  for (int i = g_handler_stack_->size() - 1; !handled && i >= 0; --i) {
+-    handled = (*g_handler_stack_)[i]->HandleSignal(sig, info, uc);
++  if (g_handler_stack_ != nullptr) {
++    for (int i = g_handler_stack_->size() - 1; !handled && i >= 0; --i) {
++      handled = (*g_handler_stack_)[i]->HandleSignal(sig, info, uc);
++    }
+   }
+ 
+   // Upon returning from this signal handler, sig will become unmasked and 
then
+-- 
+2.17.1
+
diff --git a/external/breakpad/UnpackedTarball_breakpad.mk 
b/external/breakpad/UnpackedTarball_breakpad.mk
index e970bd5ad3f3..b70510234e38 100644
--- a/external/breakpad/UnpackedTarball_breakpad.mk
+++ b/external/breakpad/UnpackedTarball_breakpad.mk
@@ -13,12 +13,16 @@ $(eval $(call gb_UnpackedTarball_set_patchlevel,breakpad,0))
 
 $(eval $(call gb_UnpackedTarball_set_tarball,breakpad,$(BREAKPAD_TARBALL)))
 
+# 
external/breakpad/0001-Handle-race-between-ExceptionHandler-SignalHandler-a.patch
 upstreamed at
+#  <https://chromium-review.googlesource.com/c/breakpad/breakpad/+/1176811> 
"Handle race between
+#  ExceptionHandler::SignalHandler and ~ExceptionHandler":
 $(eval $(call gb_UnpackedTarball_add_patches,breakpad,\
        external/breakpad/breakpad-use-correct-http-header.patch.1 \
        external/breakpad/breakpad-wshadow.patch.1 \
        external/breakpad/breakpad-wshadow2.patch.1 \
        external/breakpad/breakpad-stackwalk.patch.1 \
        external/breakpad/ucontext.patch \
+       
external/breakpad/0001-Handle-race-between-ExceptionHandler-SignalHandler-a.patch.1
 \
 ))
 
 ifeq ($(COM_IS_CLANG),TRUE)
_______________________________________________
Libreoffice-commits mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to