]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-linux-keyring-export-check-20090701
authorMarc Dionne <marc.c.dionne@gmail.com>
Wed, 1 Jul 2009 21:57:11 +0000 (21:57 +0000)
committerDerrick Brashear <shadow@dementia.org>
Wed, 1 Jul 2009 21:57:11 +0000 (21:57 +0000)
LICENSE IPL10
FIXES 125001

check for key_type_keyring being exported; only use it if so

(cherry picked from commit 4ca66112c2a012e04619445275507ae9cd6c11da)

acinclude.m4
src/afs/LINUX/osi_groups.c
src/cf/linux-test4.m4

index 2eeaeff1b0b91d7112074c06b86185e3b2ee2b19..dda4ae1bbbe23ffe11497f2dfa7e5debc69170b9 100644 (file)
@@ -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
index e302148d81f43282560ede4db6897a6105d1f4fb..94126b063288b4f658bc26e951ea44dd60d51ed6 100644 (file)
@@ -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);
index e7b91dcdc9800213270d171bdc751bc5877dc342..e63c5a0c6679f1cde5cbc7634af3a7e3a43b9ca3 100644 (file)
@@ -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 <linux/key-type.h>
+#endif
+#include <linux/key.h>],
+[
+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]) 
+