<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/security/keys/request_key.c, branch v2.6.37.2</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>KEYS: Don't call up_write() if __key_link_begin() returns an error</title>
<updated>2010-12-23T23:31:48+00:00</updated>
<author>
<name>David Howells</name>
<email>dhowells@redhat.com</email>
</author>
<published>2010-12-22T16:24:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=3fc5e98d8cf85e0d77fc597b49e9268dff67400e'/>
<id>3fc5e98d8cf85e0d77fc597b49e9268dff67400e</id>
<content type='text'>
In construct_alloc_key(), up_write() is called in the error path if
__key_link_begin() fails, but this is incorrect as __key_link_begin() only
returns with the nominated keyring locked if it returns successfully.

Without this patch, you might see the following in dmesg:

	=====================================
	[ BUG: bad unlock balance detected! ]
	-------------------------------------
	mount.cifs/5769 is trying to release lock (&amp;key-&gt;sem) at:
	[&lt;ffffffff81201159&gt;] request_key_and_link+0x263/0x3fc
	but there are no more locks to release!

	other info that might help us debug this:
	3 locks held by mount.cifs/5769:
	 #0:  (&amp;type-&gt;s_umount_key#41/1){+.+.+.}, at: [&lt;ffffffff81131321&gt;] sget+0x278/0x3e7
	 #1:  (&amp;ret_buf-&gt;session_mutex){+.+.+.}, at: [&lt;ffffffffa0258e59&gt;] cifs_get_smb_ses+0x35a/0x443 [cifs]
	 #2:  (root_key_user.cons_lock){+.+.+.}, at: [&lt;ffffffff81201000&gt;] request_key_and_link+0x10a/0x3fc

	stack backtrace:
	Pid: 5769, comm: mount.cifs Not tainted 2.6.37-rc6+ #1
	Call Trace:
	 [&lt;ffffffff81201159&gt;] ? request_key_and_link+0x263/0x3fc
	 [&lt;ffffffff81081601&gt;] print_unlock_inbalance_bug+0xca/0xd5
	 [&lt;ffffffff81083248&gt;] lock_release_non_nested+0xc1/0x263
	 [&lt;ffffffff81201159&gt;] ? request_key_and_link+0x263/0x3fc
	 [&lt;ffffffff81201159&gt;] ? request_key_and_link+0x263/0x3fc
	 [&lt;ffffffff81083567&gt;] lock_release+0x17d/0x1a4
	 [&lt;ffffffff81073f45&gt;] up_write+0x23/0x3b
	 [&lt;ffffffff81201159&gt;] request_key_and_link+0x263/0x3fc
	 [&lt;ffffffffa026fe9e&gt;] ? cifs_get_spnego_key+0x61/0x21f [cifs]
	 [&lt;ffffffff812013c5&gt;] request_key+0x41/0x74
	 [&lt;ffffffffa027003d&gt;] cifs_get_spnego_key+0x200/0x21f [cifs]
	 [&lt;ffffffffa026e296&gt;] CIFS_SessSetup+0x55d/0x1273 [cifs]
	 [&lt;ffffffffa02589e1&gt;] cifs_setup_session+0x90/0x1ae [cifs]
	 [&lt;ffffffffa0258e7e&gt;] cifs_get_smb_ses+0x37f/0x443 [cifs]
	 [&lt;ffffffffa025a9e3&gt;] cifs_mount+0x1aa1/0x23f3 [cifs]
	 [&lt;ffffffff8111fd94&gt;] ? alloc_debug_processing+0xdb/0x120
	 [&lt;ffffffffa027002c&gt;] ? cifs_get_spnego_key+0x1ef/0x21f [cifs]
	 [&lt;ffffffffa024cc71&gt;] cifs_do_mount+0x165/0x2b3 [cifs]
	 [&lt;ffffffff81130e72&gt;] vfs_kern_mount+0xaf/0x1dc
	 [&lt;ffffffff81131007&gt;] do_kern_mount+0x4d/0xef
	 [&lt;ffffffff811483b9&gt;] do_mount+0x6f4/0x733
	 [&lt;ffffffff8114861f&gt;] sys_mount+0x88/0xc2
	 [&lt;ffffffff8100ac42&gt;] system_call_fastpath+0x16/0x1b

Reported-by: Jeff Layton &lt;jlayton@redhat.com&gt;
Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Reviewed-and-Tested-by: Jeff Layton &lt;jlayton@redhat.com&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In construct_alloc_key(), up_write() is called in the error path if
__key_link_begin() fails, but this is incorrect as __key_link_begin() only
returns with the nominated keyring locked if it returns successfully.

Without this patch, you might see the following in dmesg:

	=====================================
	[ BUG: bad unlock balance detected! ]
	-------------------------------------
	mount.cifs/5769 is trying to release lock (&amp;key-&gt;sem) at:
	[&lt;ffffffff81201159&gt;] request_key_and_link+0x263/0x3fc
	but there are no more locks to release!

	other info that might help us debug this:
	3 locks held by mount.cifs/5769:
	 #0:  (&amp;type-&gt;s_umount_key#41/1){+.+.+.}, at: [&lt;ffffffff81131321&gt;] sget+0x278/0x3e7
	 #1:  (&amp;ret_buf-&gt;session_mutex){+.+.+.}, at: [&lt;ffffffffa0258e59&gt;] cifs_get_smb_ses+0x35a/0x443 [cifs]
	 #2:  (root_key_user.cons_lock){+.+.+.}, at: [&lt;ffffffff81201000&gt;] request_key_and_link+0x10a/0x3fc

	stack backtrace:
	Pid: 5769, comm: mount.cifs Not tainted 2.6.37-rc6+ #1
	Call Trace:
	 [&lt;ffffffff81201159&gt;] ? request_key_and_link+0x263/0x3fc
	 [&lt;ffffffff81081601&gt;] print_unlock_inbalance_bug+0xca/0xd5
	 [&lt;ffffffff81083248&gt;] lock_release_non_nested+0xc1/0x263
	 [&lt;ffffffff81201159&gt;] ? request_key_and_link+0x263/0x3fc
	 [&lt;ffffffff81201159&gt;] ? request_key_and_link+0x263/0x3fc
	 [&lt;ffffffff81083567&gt;] lock_release+0x17d/0x1a4
	 [&lt;ffffffff81073f45&gt;] up_write+0x23/0x3b
	 [&lt;ffffffff81201159&gt;] request_key_and_link+0x263/0x3fc
	 [&lt;ffffffffa026fe9e&gt;] ? cifs_get_spnego_key+0x61/0x21f [cifs]
	 [&lt;ffffffff812013c5&gt;] request_key+0x41/0x74
	 [&lt;ffffffffa027003d&gt;] cifs_get_spnego_key+0x200/0x21f [cifs]
	 [&lt;ffffffffa026e296&gt;] CIFS_SessSetup+0x55d/0x1273 [cifs]
	 [&lt;ffffffffa02589e1&gt;] cifs_setup_session+0x90/0x1ae [cifs]
	 [&lt;ffffffffa0258e7e&gt;] cifs_get_smb_ses+0x37f/0x443 [cifs]
	 [&lt;ffffffffa025a9e3&gt;] cifs_mount+0x1aa1/0x23f3 [cifs]
	 [&lt;ffffffff8111fd94&gt;] ? alloc_debug_processing+0xdb/0x120
	 [&lt;ffffffffa027002c&gt;] ? cifs_get_spnego_key+0x1ef/0x21f [cifs]
	 [&lt;ffffffffa024cc71&gt;] cifs_do_mount+0x165/0x2b3 [cifs]
	 [&lt;ffffffff81130e72&gt;] vfs_kern_mount+0xaf/0x1dc
	 [&lt;ffffffff81131007&gt;] do_kern_mount+0x4d/0xef
	 [&lt;ffffffff811483b9&gt;] do_mount+0x6f4/0x733
	 [&lt;ffffffff8114861f&gt;] sys_mount+0x88/0xc2
	 [&lt;ffffffff8100ac42&gt;] system_call_fastpath+0x16/0x1b

Reported-by: Jeff Layton &lt;jlayton@redhat.com&gt;
Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Reviewed-and-Tested-by: Jeff Layton &lt;jlayton@redhat.com&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>KEYS: request_key() should return -ENOKEY if the constructed key is negative</title>
<updated>2010-08-06T16:17:02+00:00</updated>
<author>
<name>David Howells</name>
<email>dhowells@redhat.com</email>
</author>
<published>2010-08-06T15:08:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=1e456a124353a753e9d1fadfbf5cd459c2f197ae'/>
<id>1e456a124353a753e9d1fadfbf5cd459c2f197ae</id>
<content type='text'>
request_key() should return -ENOKEY if the key it constructs has been
negatively instantiated.

Without this, request_key() can return an unusable key to its caller,
and if the caller then does key_validate() that won't catch the problem.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
request_key() should return -ENOKEY if the key it constructs has been
negatively instantiated.

Without this, request_key() can return an unusable key to its caller,
and if the caller then does key_validate() that won't catch the problem.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>KEYS: Reinstate lost passing of process keyring ID in call_sbin_request_key()</title>
<updated>2010-08-02T05:34:56+00:00</updated>
<author>
<name>Justin P. Mattock</name>
<email>justinmattock@gmail.com</email>
</author>
<published>2010-06-30T09:39:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=5ad18a0d59ba9e65b3c8b2b489fd23bc6b3daf94'/>
<id>5ad18a0d59ba9e65b3c8b2b489fd23bc6b3daf94</id>
<content type='text'>
In commit bb952bb98a7e479262c7eb25d5592545a3af147d there was the accidental
deletion of a statement from call_sbin_request_key() to render the process
keyring ID to a text string so that it can be passed to /sbin/request-key.

With gcc 4.6.0 this causes the following warning:

  CC      security/keys/request_key.o
security/keys/request_key.c: In function 'call_sbin_request_key':
security/keys/request_key.c:102:15: warning: variable 'prkey' set but not used

This patch reinstates that statement.

Without this statement, /sbin/request-key will get some random rubbish from the
stack as that parameter.

Signed-off-by: Justin P. Mattock &lt;justinmattock@gmail.com&gt;
Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: James Morris &lt;jmorris@namei.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In commit bb952bb98a7e479262c7eb25d5592545a3af147d there was the accidental
deletion of a statement from call_sbin_request_key() to render the process
keyring ID to a text string so that it can be passed to /sbin/request-key.

With gcc 4.6.0 this causes the following warning:

  CC      security/keys/request_key.o
security/keys/request_key.c: In function 'call_sbin_request_key':
security/keys/request_key.c:102:15: warning: variable 'prkey' set but not used

This patch reinstates that statement.

Without this statement, /sbin/request-key will get some random rubbish from the
stack as that parameter.

Signed-off-by: Justin P. Mattock &lt;justinmattock@gmail.com&gt;
Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: James Morris &lt;jmorris@namei.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>umh: creds: convert call_usermodehelper_keys() to use subprocess_info-&gt;init()</title>
<updated>2010-05-27T16:12:45+00:00</updated>
<author>
<name>Oleg Nesterov</name>
<email>oleg@redhat.com</email>
</author>
<published>2010-05-26T21:43:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=685bfd2c48bb3284d31e73ff3151c957d76deda9'/>
<id>685bfd2c48bb3284d31e73ff3151c957d76deda9</id>
<content type='text'>
call_usermodehelper_keys() uses call_usermodehelper_setkeys() to change
subprocess_info-&gt;cred in advance.  Now that we have info-&gt;init() we can
change this code to set tgcred-&gt;session_keyring in context of execing
kernel thread.

Note: since currently call_usermodehelper_keys() is never called with
UMH_NO_WAIT, call_usermodehelper_keys()-&gt;key_get() and umh_keys_cleanup()
are not really needed, we could rely on install_session_keyring_to_cred()
which does key_get() on success.

Signed-off-by: Oleg Nesterov &lt;oleg@redhat.com&gt;
Acked-by: Neil Horman &lt;nhorman@tuxdriver.com&gt;
Acked-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
call_usermodehelper_keys() uses call_usermodehelper_setkeys() to change
subprocess_info-&gt;cred in advance.  Now that we have info-&gt;init() we can
change this code to set tgcred-&gt;session_keyring in context of execing
kernel thread.

Note: since currently call_usermodehelper_keys() is never called with
UMH_NO_WAIT, call_usermodehelper_keys()-&gt;key_get() and umh_keys_cleanup()
are not really needed, we could rely on install_session_keyring_to_cred()
which does key_get() on success.

Signed-off-by: Oleg Nesterov &lt;oleg@redhat.com&gt;
Acked-by: Neil Horman &lt;nhorman@tuxdriver.com&gt;
Acked-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>KEYS: Do preallocation for __key_link()</title>
<updated>2010-05-06T12:25:02+00:00</updated>
<author>
<name>David Howells</name>
<email>dhowells@redhat.com</email>
</author>
<published>2010-04-30T13:32:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=f70e2e06196ad4c1c762037da2f75354f6c16b81'/>
<id>f70e2e06196ad4c1c762037da2f75354f6c16b81</id>
<content type='text'>
Do preallocation for __key_link() so that the various callers in request_key.c
can deal with any errors from this source before attempting to construct a key.
This allows them to assume that the actual linkage step is guaranteed to be
successful.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: James Morris &lt;jmorris@namei.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Do preallocation for __key_link() so that the various callers in request_key.c
can deal with any errors from this source before attempting to construct a key.
This allows them to assume that the actual linkage step is guaranteed to be
successful.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: James Morris &lt;jmorris@namei.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'master' into next</title>
<updated>2010-05-06T12:21:04+00:00</updated>
<author>
<name>James Morris</name>
<email>jmorris@namei.org</email>
</author>
<published>2010-05-06T12:21:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=043b4d40f53131c5f72eca2a46555fe35328a930'/>
<id>043b4d40f53131c5f72eca2a46555fe35328a930</id>
<content type='text'>
Conflicts:
	security/keys/keyring.c

Resolved conflict with whitespace fix in find_keyring_by_name()

Signed-off-by: James Morris &lt;jmorris@namei.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Conflicts:
	security/keys/keyring.c

Resolved conflict with whitespace fix in find_keyring_by_name()

Signed-off-by: James Morris &lt;jmorris@namei.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>KEYS: Better handling of errors from construct_alloc_key()</title>
<updated>2010-05-06T00:56:55+00:00</updated>
<author>
<name>David Howells</name>
<email>dhowells@redhat.com</email>
</author>
<published>2010-04-30T13:32:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=2b9e4688fad8867b6e918610f396af3ab9246898'/>
<id>2b9e4688fad8867b6e918610f396af3ab9246898</id>
<content type='text'>
Errors from construct_alloc_key() shouldn't just be ignored in the way they are
by construct_key_and_link().  The only error that can be ignored so is
EINPROGRESS as that is used to indicate that we've found a key and don't need
to construct one.

We don't, however, handle ENOMEM, EDQUOT or EACCES to indicate allocation
failures of one sort or another.

Reported-by: Vegard Nossum &lt;vegard.nossum@gmail.com&gt;
Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: James Morris &lt;jmorris@namei.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Errors from construct_alloc_key() shouldn't just be ignored in the way they are
by construct_key_and_link().  The only error that can be ignored so is
EINPROGRESS as that is used to indicate that we've found a key and don't need
to construct one.

We don't, however, handle ENOMEM, EDQUOT or EACCES to indicate allocation
failures of one sort or another.

Reported-by: Vegard Nossum &lt;vegard.nossum@gmail.com&gt;
Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: James Morris &lt;jmorris@namei.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>KEYS: call_sbin_request_key() must write lock keyrings before modifying them</title>
<updated>2010-05-05T13:50:24+00:00</updated>
<author>
<name>David Howells</name>
<email>dhowells@redhat.com</email>
</author>
<published>2010-04-30T13:32:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=896903c2f5f79f029388f033a00c3b813bc91201'/>
<id>896903c2f5f79f029388f033a00c3b813bc91201</id>
<content type='text'>
call_sbin_request_key() creates a keyring and then attempts to insert a link to
the authorisation key into that keyring, but does so without holding a write
lock on the keyring semaphore.

It will normally get away with this because it hasn't told anyone that the
keyring exists yet.  The new keyring, however, has had its serial number
published, which means it can be accessed directly by that handle.

This was found by a previous patch that adds RCU lockdep checks to the code
that reads the keyring payload pointer, which includes a check that the keyring
semaphore is actually locked.

Without this patch, the following command:

	keyctl request2 user b a @s

will provoke the following lockdep warning is displayed in dmesg:

	===================================================
	[ INFO: suspicious rcu_dereference_check() usage. ]
	---------------------------------------------------
	security/keys/keyring.c:727 invoked rcu_dereference_check() without protection!

	other info that might help us debug this:

	rcu_scheduler_active = 1, debug_locks = 0
	2 locks held by keyctl/2076:
	 #0:  (key_types_sem){.+.+.+}, at: [&lt;ffffffff811a5b29&gt;] key_type_lookup+0x1c/0x71
	 #1:  (keyring_serialise_link_sem){+.+.+.}, at: [&lt;ffffffff811a6d1e&gt;] __key_link+0x4d/0x3c5

	stack backtrace:
	Pid: 2076, comm: keyctl Not tainted 2.6.34-rc6-cachefs #54
	Call Trace:
	 [&lt;ffffffff81051fdc&gt;] lockdep_rcu_dereference+0xaa/0xb2
	 [&lt;ffffffff811a6d1e&gt;] ? __key_link+0x4d/0x3c5
	 [&lt;ffffffff811a6e6f&gt;] __key_link+0x19e/0x3c5
	 [&lt;ffffffff811a5952&gt;] ? __key_instantiate_and_link+0xb1/0xdc
	 [&lt;ffffffff811a59bf&gt;] ? key_instantiate_and_link+0x42/0x5f
	 [&lt;ffffffff811aa0dc&gt;] call_sbin_request_key+0xe7/0x33b
	 [&lt;ffffffff8139376a&gt;] ? mutex_unlock+0x9/0xb
	 [&lt;ffffffff811a5952&gt;] ? __key_instantiate_and_link+0xb1/0xdc
	 [&lt;ffffffff811a59bf&gt;] ? key_instantiate_and_link+0x42/0x5f
	 [&lt;ffffffff811aa6fa&gt;] ? request_key_auth_new+0x1c2/0x23c
	 [&lt;ffffffff810aaf15&gt;] ? cache_alloc_debugcheck_after+0x108/0x173
	 [&lt;ffffffff811a9d00&gt;] ? request_key_and_link+0x146/0x300
	 [&lt;ffffffff810ac568&gt;] ? kmem_cache_alloc+0xe1/0x118
	 [&lt;ffffffff811a9e45&gt;] request_key_and_link+0x28b/0x300
	 [&lt;ffffffff811a89ac&gt;] sys_request_key+0xf7/0x14a
	 [&lt;ffffffff81052c0b&gt;] ? trace_hardirqs_on_caller+0x10c/0x130
	 [&lt;ffffffff81394fb9&gt;] ? trace_hardirqs_on_thunk+0x3a/0x3f
	 [&lt;ffffffff81001eeb&gt;] system_call_fastpath+0x16/0x1b

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: James Morris &lt;jmorris@namei.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
call_sbin_request_key() creates a keyring and then attempts to insert a link to
the authorisation key into that keyring, but does so without holding a write
lock on the keyring semaphore.

It will normally get away with this because it hasn't told anyone that the
keyring exists yet.  The new keyring, however, has had its serial number
published, which means it can be accessed directly by that handle.

This was found by a previous patch that adds RCU lockdep checks to the code
that reads the keyring payload pointer, which includes a check that the keyring
semaphore is actually locked.

Without this patch, the following command:

	keyctl request2 user b a @s

will provoke the following lockdep warning is displayed in dmesg:

	===================================================
	[ INFO: suspicious rcu_dereference_check() usage. ]
	---------------------------------------------------
	security/keys/keyring.c:727 invoked rcu_dereference_check() without protection!

	other info that might help us debug this:

	rcu_scheduler_active = 1, debug_locks = 0
	2 locks held by keyctl/2076:
	 #0:  (key_types_sem){.+.+.+}, at: [&lt;ffffffff811a5b29&gt;] key_type_lookup+0x1c/0x71
	 #1:  (keyring_serialise_link_sem){+.+.+.}, at: [&lt;ffffffff811a6d1e&gt;] __key_link+0x4d/0x3c5

	stack backtrace:
	Pid: 2076, comm: keyctl Not tainted 2.6.34-rc6-cachefs #54
	Call Trace:
	 [&lt;ffffffff81051fdc&gt;] lockdep_rcu_dereference+0xaa/0xb2
	 [&lt;ffffffff811a6d1e&gt;] ? __key_link+0x4d/0x3c5
	 [&lt;ffffffff811a6e6f&gt;] __key_link+0x19e/0x3c5
	 [&lt;ffffffff811a5952&gt;] ? __key_instantiate_and_link+0xb1/0xdc
	 [&lt;ffffffff811a59bf&gt;] ? key_instantiate_and_link+0x42/0x5f
	 [&lt;ffffffff811aa0dc&gt;] call_sbin_request_key+0xe7/0x33b
	 [&lt;ffffffff8139376a&gt;] ? mutex_unlock+0x9/0xb
	 [&lt;ffffffff811a5952&gt;] ? __key_instantiate_and_link+0xb1/0xdc
	 [&lt;ffffffff811a59bf&gt;] ? key_instantiate_and_link+0x42/0x5f
	 [&lt;ffffffff811aa6fa&gt;] ? request_key_auth_new+0x1c2/0x23c
	 [&lt;ffffffff810aaf15&gt;] ? cache_alloc_debugcheck_after+0x108/0x173
	 [&lt;ffffffff811a9d00&gt;] ? request_key_and_link+0x146/0x300
	 [&lt;ffffffff810ac568&gt;] ? kmem_cache_alloc+0xe1/0x118
	 [&lt;ffffffff811a9e45&gt;] request_key_and_link+0x28b/0x300
	 [&lt;ffffffff811a89ac&gt;] sys_request_key+0xf7/0x14a
	 [&lt;ffffffff81052c0b&gt;] ? trace_hardirqs_on_caller+0x10c/0x130
	 [&lt;ffffffff81394fb9&gt;] ? trace_hardirqs_on_thunk+0x3a/0x3f
	 [&lt;ffffffff81001eeb&gt;] system_call_fastpath+0x16/0x1b

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: James Morris &lt;jmorris@namei.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>keys: the request_key() syscall should link an existing key to the dest keyring</title>
<updated>2010-04-27T23:26:03+00:00</updated>
<author>
<name>David Howells</name>
<email>dhowells@redhat.com</email>
</author>
<published>2010-04-27T20:13:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=03449cd9eaa4fa3a7faa4a59474bafe2e90bd143'/>
<id>03449cd9eaa4fa3a7faa4a59474bafe2e90bd143</id>
<content type='text'>
The request_key() system call and request_key_and_link() should make a
link from an existing key to the destination keyring (if supplied), not
just from a new key to the destination keyring.

This can be tested by:

	ring=`keyctl newring fred @s`
	keyctl request2 user debug:a a
	keyctl request user debug:a $ring
	keyctl list $ring

If it says:

	keyring is empty

then it didn't work.  If it shows something like:

	1 key in keyring:
	1070462727: --alswrv     0     0 user: debug:a

then it did.

request_key() system call is meant to recursively search all your keyrings for
the key you desire, and, optionally, if it doesn't exist, call out to userspace
to create one for you.

If request_key() finds or creates a key, it should, optionally, create a link
to that key from the destination keyring specified.

Therefore, if, after a successful call to request_key() with a desination
keyring specified, you see the destination keyring empty, the code didn't work
correctly.

If you see the found key in the keyring, then it did - which is what the patch
is required for.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Cc: James Morris &lt;jmorris@namei.org&gt;
Cc: &lt;stable@kernel.org&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The request_key() system call and request_key_and_link() should make a
link from an existing key to the destination keyring (if supplied), not
just from a new key to the destination keyring.

This can be tested by:

	ring=`keyctl newring fred @s`
	keyctl request2 user debug:a a
	keyctl request user debug:a $ring
	keyctl list $ring

If it says:

	keyring is empty

then it didn't work.  If it shows something like:

	1 key in keyring:
	1070462727: --alswrv     0     0 user: debug:a

then it did.

request_key() system call is meant to recursively search all your keyrings for
the key you desire, and, optionally, if it doesn't exist, call out to userspace
to create one for you.

If request_key() finds or creates a key, it should, optionally, create a link
to that key from the destination keyring specified.

Therefore, if, after a successful call to request_key() with a desination
keyring specified, you see the destination keyring empty, the code didn't work
correctly.

If you see the found key in the keyring, then it did - which is what the patch
is required for.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Cc: James Morris &lt;jmorris@namei.org&gt;
Cc: &lt;stable@kernel.org&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>keys: fix an RCU warning</title>
<updated>2010-04-24T18:31:25+00:00</updated>
<author>
<name>David Howells</name>
<email>dhowells@redhat.com</email>
</author>
<published>2010-04-23T17:18:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=93b4a44f3ad69520d605aace3f3486b8eb754b96'/>
<id>93b4a44f3ad69520d605aace3f3486b8eb754b96</id>
<content type='text'>
Fix the following RCU warning:

  ===================================================
  [ INFO: suspicious rcu_dereference_check() usage. ]
  ---------------------------------------------------
  security/keys/request_key.c:116 invoked rcu_dereference_check() without protection!

This was caused by doing:

	[root@andromeda ~]# keyctl newring fred @s
	539196288
	[root@andromeda ~]# keyctl request2 user a a 539196288
	request_key: Required key not available

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Acked-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fix the following RCU warning:

  ===================================================
  [ INFO: suspicious rcu_dereference_check() usage. ]
  ---------------------------------------------------
  security/keys/request_key.c:116 invoked rcu_dereference_check() without protection!

This was caused by doing:

	[root@andromeda ~]# keyctl newring fred @s
	539196288
	[root@andromeda ~]# keyctl request2 user a a 539196288
	request_key: Required key not available

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Acked-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</pre>
</div>
</content>
</entry>
</feed>
