From 47dbf13e0edc8552d8a911bd9d5fbfedc83154f0 Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Wed, 27 Sep 2006 22:14:27 +0000 Subject: [PATCH] STABLE14-darwin90-ukernel-setjmp-conflict-20060927 FIXES 39354 setjmp isn't safe for #define KERNEL (cherry picked from commit 4bfe736b9157fa3ee4c1c851e53d66b18e774827) --- src/afs/LINUX/osi_groups.c | 14 ++++++++++++++ src/afs/UKERNEL/sysincludes.h | 3 +++ src/afs/afs_osi.c | 5 ++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/afs/LINUX/osi_groups.c b/src/afs/LINUX/osi_groups.c index c4a0514dd..a754cb60f 100644 --- a/src/afs/LINUX/osi_groups.c +++ b/src/afs/LINUX/osi_groups.c @@ -554,12 +554,26 @@ static int afs_pag_match(const struct key *key, const void *description) return strcmp(key->description, description) == 0; } +static void afs_pag_destroy(struct key *key) +{ + afs_uint32 pag = key->payload.value; + struct unixuser *pu; + + pu = afs_FindUser(pag, -1, READ_LOCK); + if (pu) { + pu->ct.EndTimestamp = 0; + pu->tokenTime = 0; + afs_PutUser(pu, READ_LOCK); + } +} + struct key_type key_type_afs_pag = { .name = "afs_pag", .describe = afs_pag_describe, .instantiate = afs_pag_instantiate, .match = afs_pag_match, + .destroy = afs_pag_destroy, }; void osi_keyring_init(void) diff --git a/src/afs/UKERNEL/sysincludes.h b/src/afs/UKERNEL/sysincludes.h index 54f078beb..2c851b0e2 100644 --- a/src/afs/UKERNEL/sysincludes.h +++ b/src/afs/UKERNEL/sysincludes.h @@ -21,7 +21,9 @@ #include #include #include +#if !defined(AFS_USR_DARWIN_ENV) && !defined(AFS_USR_FBSD_ENV) /* must be included after KERNEL undef'd */ #include +#endif #ifdef AFS_USR_SUN5_ENV #include @@ -120,6 +122,7 @@ #define AFS_USR_UNDEF_KERNEL_ENV 1 #endif #include +#include #include #include #include diff --git a/src/afs/afs_osi.c b/src/afs/afs_osi.c index a36729a24..559657c41 100644 --- a/src/afs/afs_osi.c +++ b/src/afs/afs_osi.c @@ -805,11 +805,13 @@ afs_osi_TraverseProcTable(void) #endif #if defined(AFS_LINUX22_ENV) -extern rwlock_t tasklist_lock __attribute__((weak)); void afs_osi_TraverseProcTable() { +#if !defined(LINUX_KEYRING_SUPPORT) + extern rwlock_t tasklist_lock __attribute__((weak)); struct task_struct *p; + if (&tasklist_lock) read_lock(&tasklist_lock); #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) @@ -846,6 +848,7 @@ afs_osi_TraverseProcTable() else rcu_read_unlock(); #endif +#endif } #endif -- 2.39.5