Skip Menu |

Subject: gssd-agent deadlock

Vendor's priority - Serious Bug
Vendor's patch - LHA-6370271-deadlock-in-com-err
Adding the patch
diff -Nur -x '*~' -x '*.orig' -x '*.rej' -x '*.pbxbtree' -x '*.pbxindex' -x lha.mode1v3 -x lha.mode2v3 -x lha.pbxuser -x windows -x .DS_Store Kerberos.AEP-6.5fc1.orig/KerberosFramework/KerberosErrors/Sources/com_err.c Kerberos.AEP-6.5fc1/KerberosFramework/KerberosErrors/Sources/com_err.c
--- Kerberos.AEP-6.5fc1.orig/KerberosFramework/KerberosErrors/Sources/com_err.c 2008-11-07 11:24:28.000000000 -0800
+++ Kerberos.AEP-6.5fc1/KerberosFramework/KerberosErrors/Sources/com_err.c 2008-11-13 15:37:31.000000000 -0800
@@ -201,6 +201,8 @@
char *message = NULL;
int reentered = 0; /* some of the functions that we call may call us. */

+ kim_library_init();
if (!err) {
enter_err = com_err_thread_entering_error_message (&reentered);

This is the wrong way of fixing this bug. kim_library_init() just registers
KIM's error tables using a pthread-once call.

I would like to understand the deadlock this patch is intended to fix.
There are multiple mutexes involved (one for the error table array and
one for KIM's copy of the framework cfbundle). However it's not
obvious to me from just looking at the patch what the deadlock is.

I don't see a regression test tagged with this bug number.
This should be fixed by moving the CFBundle code in kim_os_string.c into the support library
under non-KIM names. Then this code will no longer call into KIM initializers and cannot
deadlock error_message().

Passing to Zhanna.
Assigning to Ken