Linux: Remove unnecessary crhold on incomplete kernel credentials
authorMarc Dionne <marc.c.dionne@gmail.com>
Sun, 25 Apr 2010 02:12:27 +0000 (22:12 -0400)
committerDerrick Brashear <shadow@dementia.org>
Tue, 27 Apr 2010 19:42:49 +0000 (12:42 -0700)
When credentials debugging is active in the kernel, sanity checks
in various credentials functions such as get_cred or put_cred
require that they are called with full fledged kernel credentials.
This can be a problem with recent kernels in osi_Init where we
build our own credentials and try to "crhold" them.
Getting a reference doesn't make much sense anyway since we're
using a statically allocated structure that we never try to free
or modify.

As a minimal fix, just don't call crhold when we're using
the kernel credentials structure.

Change-Id: If4f843ad33526c6a42f1cf67c57763593ffa50ac
Reviewed-on: http://gerrit.openafs.org/1828
Tested-by: Marc Dionne <marc.c.dionne@gmail.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>

src/afs/afs_osi.c

index 8926254..b04cae1 100644 (file)
@@ -95,7 +95,9 @@ osi_Init(void)
 #if defined(AFS_DARWIN80_ENV)
         afs_osi_cred.cr_ref = 1; /* kauth_cred_get_ref needs 1 existing ref */
 #else
-       crhold(&afs_osi_cred);  /* don't let it evaporate */
+# if !(defined(AFS_LINUX26_ENV) && defined(STRUCT_TASK_HAS_CRED))
+       crhold(&afs_osi_cred);  /* don't let it evaporate */
+# endif
 #endif
 
        afs_osi_credp = &afs_osi_cred;