Hi,
here's a backtrace with debugging symbols. The problem is in
libhx509:

#0  0x0f8bfedc in *__GI_raise (sig=6) at 
../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1  0x0f8c1b74 in *__GI_abort () at abort.c:88
#2  0x0fe0c6b8 in _hx509_abort (fmt=0xfe49e2c "slot not in session") at 
cert.c:3237
#3  0x0fe2141c in p11_put_session (p=0x1001aa48, slot=0x10027428, session=1) at 
ks_p11.c:486
#4  0x0fe212cc in p11_get_session (context=0x100189c8, p=0x1001aa48, 
slot=0x10027428, lock=0x1001a9b8, psession=0xbfa3b5c4) at ks_p11.c:457
#5  0x0fe20eb4 in p11_init_slot (context=0x100189c8, p=0x1001aa48, 
lock=0x1001a9b8, id=0, num=0, slot=0x10027428) at ks_p11.c:353
#6  0x0fe2258c in p11_init (context=0x100189c8, certs=0x1001aa10, 
data=0x1001aa18, flags=0, 
    residue=0xbfa3c376 "/usr/lib/opensc/opensc-pkcs11.so", lock=0x1001a9b8) at 
ks_p11.c:914
#7  0x0fe1caf4 in hx509_certs_init (context=0x100189c8, name=0xbfa3c36f 
"PKCS11:/usr/lib/opensc/opensc-pkcs11.so", flags=0, 
    lock=0x1001a9b8, certs=0x10018320) at keyset.c:158
#8  0x0fefab8c in _krb5_pk_load_id (context=0x10018008, ret_id=0x10018338, 
user_id=0xbfa3c36f "PKCS11:/usr/lib/opensc/opensc-pkcs11.so", 
    anchor_id=0x100182f0 "FILE:/etc/ssl/certs/krbca.pem", chain_list=0x0, 
revoke_list=0x0, prompter=0x10005e70 <krb5_prompter_posix>, 
    prompter_data=0x0, password=0xbfa3b8f4 "") at pkinit.c:1508
#9  0x0fefc144 in krb5_get_init_creds_opt_set_pkinit (context=0x10018008, 
opt=0x100188f8, principal=0x10018358, 
    user_id=0xbfa3c36f "PKCS11:/usr/lib/opensc/opensc-pkcs11.so", 
x509_anchors=0x100182f0 "FILE:/etc/ssl/certs/krbca.pem", pool=0x0, 
    pki_revoke=0x0, flags=0, prompter=0x10005e70 <krb5_prompter_posix>, 
prompter_data=0x0, password=0xbfa3b8f4 "") at pkinit.c:2027
#10 0x10003f6c in get_new_tickets (context=0x10018008, principal=0x10018358, 
ccache=0x10018250, ticket_life=0, interactive=1)
    at kinit.c:426
#11 0x100053c4 in main (argc=1, argv=0xbfa3c170) at kinit.c:815

abort is being called due to P11_SESSION_IN_USE not being set but
p11_put_session wants to clear it. The real fix probably simply wants to
remove the p11_put_session calls but with the attached version it's
clearer what's going wrong.
Cheers,
 -- Guido
>From b4f49d6877e97f5ba26c6e719369f6d2abb63afa Mon Sep 17 00:00:00 2001
From: Guido Guenther <[EMAIL PROTECTED]>
Date: Fri, 19 Sep 2008 00:07:56 +0200
Subject: [PATCH] set P11_SESSION_IN_USE so p11_put_session can clear it

---
 lib/hx509/ks_p11.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/lib/hx509/ks_p11.c b/lib/hx509/ks_p11.c
index bf46e66..7f2c395 100644
--- a/lib/hx509/ks_p11.c
+++ b/lib/hx509/ks_p11.c
@@ -454,6 +454,7 @@ p11_get_session(hx509_context context,
 				       "Failed to login on slot id %d "
 				       "with error: 0x%08x",
 				       (int)slot->id, ret);
+	    slot->flags |= P11_SESSION_IN_USE;
 	    p11_put_session(p, slot, slot->session);
 	    return HX509_PKCS11_LOGIN;
 	}
@@ -463,6 +464,7 @@ p11_get_session(hx509_context context,
 		if (context)
 		    hx509_set_error_string(context, 0, ENOMEM,
 					   "out of memory");
+	        slot->flags |= P11_SESSION_IN_USE;
 		p11_put_session(p, slot, slot->session);
 		return ENOMEM;
 	    }
-- 
1.5.6.5

Reply via email to