From 8b8c54b822974a06964e260dbf73271b754ae15b Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Mon, 10 Mar 2008 16:48:55 +0000 Subject: [PATCH] STABLE14-keyring-updated-20080310 LICENSE IPL10 revise keyring patch to avoid detection problems with keyring_type_key (cherry picked from commit b7fb842b1cd11ceaa492201ad9a38052e424f6a8) --- acinclude.m4 | 1 - src/afs/LINUX/osi_groups.c | 40 ++++++++++++++++++-------------------- src/cf/linux-test4.m4 | 24 ----------------------- 3 files changed, 19 insertions(+), 46 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 1d50b4f78..d7f1f5434 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -662,7 +662,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 d2a763de8..ceb27027b 100644 --- a/src/afs/LINUX/osi_groups.c +++ b/src/afs/LINUX/osi_groups.c @@ -222,11 +222,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 eeb194f0e..3f1937c1f 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -758,30 +758,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], [ -- 2.39.5