From bd076a837465231604449cacd28837c190e16e55 Mon Sep 17 00:00:00 2001 From: David Howells Date: Mon, 7 Mar 2011 15:05:51 +0000 Subject: [PATCH] --- yaml --- r: 235095 b: refs/heads/master c: 633e804e89464d3875e59de1959a53f9041d3094 h: refs/heads/master i: 235093: b2649268e4354b4c0a771ab423b531cdcd1dc524 235091: 31f9845f4c5f9f8dd0268168e33766fa723f0209 235087: 44d1d829fbd72c3f20174751664a0c10e75118fc v: v3 --- [refs] | 2 +- trunk/include/linux/key.h | 4 ++++ trunk/security/keys/encrypted.c | 3 +-- trunk/security/keys/trusted.c | 3 +-- trunk/security/keys/user_defined.c | 3 +-- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index b3c56e6c1095..deaa34d7df91 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1cc26bada9f6807814806db2f0d78792eecdac71 +refs/heads/master: 633e804e89464d3875e59de1959a53f9041d3094 diff --git a/trunk/include/linux/key.h b/trunk/include/linux/key.h index 3db0adce1fda..a6b1edcffc34 100644 --- a/trunk/include/linux/key.h +++ b/trunk/include/linux/key.h @@ -275,6 +275,10 @@ static inline key_serial_t key_serial(struct key *key) return key ? key->serial : 0; } +#define rcu_dereference_key(KEY) \ + (rcu_dereference_protected((KEY)->payload.rcudata, \ + rwsem_is_locked(&((struct key *)(KEY))->sem))) + #ifdef CONFIG_SYSCTL extern ctl_table key_sysctls[]; #endif diff --git a/trunk/security/keys/encrypted.c b/trunk/security/keys/encrypted.c index 9e7e4ce3fae8..69907a58a683 100644 --- a/trunk/security/keys/encrypted.c +++ b/trunk/security/keys/encrypted.c @@ -765,8 +765,7 @@ static long encrypted_read(const struct key *key, char __user *buffer, size_t asciiblob_len; int ret; - epayload = rcu_dereference_protected(key->payload.data, - rwsem_is_locked(&((struct key *)key)->sem)); + epayload = rcu_dereference_key(key); /* returns the hex encoded iv, encrypted-data, and hmac as ascii */ asciiblob_len = epayload->datablob_len + ivsize + 1 diff --git a/trunk/security/keys/trusted.c b/trunk/security/keys/trusted.c index 83fc92e297cd..c99b9368368c 100644 --- a/trunk/security/keys/trusted.c +++ b/trunk/security/keys/trusted.c @@ -1076,8 +1076,7 @@ static long trusted_read(const struct key *key, char __user *buffer, char *bufp; int i; - p = rcu_dereference_protected(key->payload.data, - rwsem_is_locked(&((struct key *)key)->sem)); + p = rcu_dereference_key(key); if (!p) return -EINVAL; if (!buffer || buflen <= 0) diff --git a/trunk/security/keys/user_defined.c b/trunk/security/keys/user_defined.c index 02807fb16340..c6ca8662a468 100644 --- a/trunk/security/keys/user_defined.c +++ b/trunk/security/keys/user_defined.c @@ -184,8 +184,7 @@ long user_read(const struct key *key, char __user *buffer, size_t buflen) struct user_key_payload *upayload; long ret; - upayload = rcu_dereference_protected( - key->payload.data, rwsem_is_locked(&((struct key *)key)->sem)); + upayload = rcu_dereference_key(key); ret = upayload->datalen; /* we can return the data as is */