From: Simon Wilkinson Date: Mon, 10 Mar 2008 16:44:16 +0000 (+0000) Subject: keyring-updated-20080310 X-Git-Tag: BP-openafs-windows-kdfs-ifs~28 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=b7fb842b1cd11ceaa492201ad9a38052e424f6a8;p=packages%2Fo%2Fopenafs.git keyring-updated-20080310 LICENSE IPL10 revise keyring patch to avoid detection problems with keyring_type_key --- diff --git a/acinclude.m4 b/acinclude.m4 index 07c043b71..4aafbb5c6 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -664,7 +664,6 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) LINUX_REFRIGERATOR LINUX_LINUX_KEYRING_SUPPORT LINUX_KEY_ALLOC_NEEDS_STRUCT_TASK - LINUX_EXPORTS_KEY_TYPE_KEYRING LINUX_DO_SYNC_READ LINUX_GENERIC_FILE_AIO_READ LINUX_INIT_WORK_HAS_DATA diff --git a/src/afs/LINUX/osi_groups.c b/src/afs/LINUX/osi_groups.c index cecfc9b99..9f1e618dc 100644 --- a/src/afs/LINUX/osi_groups.c +++ b/src/afs/LINUX/osi_groups.c @@ -223,11 +223,8 @@ __setpag(cred_t **cr, afs_uint32 pagvalue, afs_uint32 *newpag, } #ifdef LINUX_KEYRING_SUPPORT -#ifdef EXPORTS_KEY_TYPE_KEYRING +extern struct key_type key_type_keyring __attribute__((weak)); static struct key_type *__key_type_keyring = &key_type_keyring; -#else -static struct key_type *__key_type_keyring; -#endif static int install_session_keyring(struct task_struct *task, struct key *keyring) @@ -627,32 +624,33 @@ extern rwlock_t tasklist_lock __attribute__((weak)); void osi_keyring_init(void) { -#ifndef EXPORTS_KEY_TYPE_KEYRING struct task_struct *p; + + if (__key_type_keyring == NULL) { #ifdef EXPORTED_TASKLIST_LOCK - if (&tasklist_lock) - read_lock(&tasklist_lock); + if (&tasklist_lock) + read_lock(&tasklist_lock); #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) -#ifdef EXPORTED_TASKLIST_LOCK - else -#endif - rcu_read_lock(); +# ifdef EXPORTED_TASKLIST_LOCK + else +# endif + rcu_read_lock(); #endif - p = find_task_by_pid(1); - if (p && p->user->session_keyring) - __key_type_keyring = p->user->session_keyring->type; + p = find_task_by_pid(1); + if (p && p->user->session_keyring) + __key_type_keyring = p->user->session_keyring->type; #ifdef EXPORTED_TASKLIST_LOCK - if (&tasklist_lock) - read_unlock(&tasklist_lock); + if (&tasklist_lock) + read_unlock(&tasklist_lock); #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) -#ifdef EXPORTED_TASKLIST_LOCK - else -#endif - rcu_read_unlock(); -#endif +# ifdef EXPORTED_TASKLIST_LOCK + else +# endif + rcu_read_unlock(); #endif + } register_key_type(&key_type_afs_pag); } diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 0781a9d14..126f75fbe 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -767,30 +767,6 @@ request_key(NULL, NULL, NULL); AC_DEFINE([LINUX_KEYRING_SUPPORT], 1, [define if your kernel has keyring support]) fi]) - -AC_DEFUN([LINUX_EXPORTS_KEY_TYPE_KEYRING], [ - AC_MSG_CHECKING([for exported key_type_keyring]) - AC_CACHE_VAL([ac_cv_linux_exports_key_type_keyring], [ - AC_TRY_KBUILD( -[ -#include -#include -#ifdef KEY_TYPE_H_EXISTS -#include -#endif -#include -], -[ -printk("%x\n", key_type_keyring); -], - ac_cv_linux_exports_key_type_keyring=yes, - ac_cv_linux_exports_key_type_keyring=no)]) - AC_MSG_RESULT($ac_cv_linux_exports_key_type_keyring) - if test "x$ac_cv_linux_exports_key_type_keyring" = "xyes"; then - AC_DEFINE([EXPORTS_KEY_TYPE_KEYRING], 1, [define if key_type_keyring is exported]) - fi]) - - AC_DEFUN([LINUX_KEY_ALLOC_NEEDS_STRUCT_TASK], [ AC_MSG_CHECKING([if key_alloc() takes a struct task *]) AC_CACHE_VAL([ac_cv_key_alloc_needs_struct_task], [