From 1ad3a477d7de57cf652f66d74c8cb322b2363bc7 Mon Sep 17 00:00:00 2001 From: Marc Dionne Date: Wed, 1 Jul 2009 21:57:11 +0000 Subject: [PATCH] STABLE14-linux-keyring-export-check-20090701 LICENSE IPL10 FIXES 125001 check for key_type_keyring being exported; only use it if so (cherry picked from commit 4ca66112c2a012e04619445275507ae9cd6c11da) --- acinclude.m4 | 1 + src/afs/LINUX/osi_groups.c | 5 ++--- src/cf/linux-test4.m4 | 20 ++++++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 2eeaeff1b..dda4ae1bb 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -774,6 +774,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) LINUX_KERNEL_PAGE_FOLLOW_LINK LINUX_KERNEL_HLIST_UNHASHED LINUX_KEY_TYPE_H_EXISTS + LINUX_EXPORTS_KEY_TYPE_KEYRING LINUX_NEED_RHCONFIG LINUX_RECALC_SIGPENDING_ARG_TYPE LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_PARENT diff --git a/src/afs/LINUX/osi_groups.c b/src/afs/LINUX/osi_groups.c index e302148d8..94126b063 100644 --- a/src/afs/LINUX/osi_groups.c +++ b/src/afs/LINUX/osi_groups.c @@ -635,6 +635,7 @@ extern rwlock_t tasklist_lock __attribute__((weak)); void osi_keyring_init(void) { +#if !defined(EXPORTED_KEY_TYPE_KEYRING) struct task_struct *p; /* If we can't lock the tasklist, either with its explicit lock, @@ -658,10 +659,7 @@ void osi_keyring_init(void) #if defined(EXPORTED_FIND_TASK_BY_PID) p = find_task_by_pid(1); #else - p = pid_task(1, PIDTYPE_PID); -/* p = find_task_by_vpid(1); -*/ #endif if (p && task_user(p)->session_keyring) __key_type_keyring = task_user(p)->session_keyring->type; @@ -676,6 +674,7 @@ void osi_keyring_init(void) rcu_read_unlock(); # endif } +#endif #endif register_key_type(&key_type_afs_pag); diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index e7b91dcdc..e63c5a0c6 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -1152,3 +1152,23 @@ _p.owner= "";], if test "x$ac_cv_linux_struct_proc_dir_entry_has_owner" = "xyes"; then AC_DEFINE([STRUCT_PROC_DIR_ENTRY_HAS_OWNER], 1, [define if struct proc_dir_entry has an owner member]) 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( +[ +#ifdef KEY_TYPE_H_EXISTS +#include +#endif +#include ], +[ +printk("%s", key_type_keyring.name); +], + 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([EXPORTED_KEY_TYPE_KEYRING], 1, [define if key_type_keyring is exported]) + fi]) + -- 2.39.5