diff options
Diffstat (limited to 'security/keys/user_defined.c')
-rw-r--r-- | security/keys/user_defined.c | 33 |
1 files changed, 0 insertions, 33 deletions
diff --git a/security/keys/user_defined.c b/security/keys/user_defined.c index cbda3b2780a1..8e71895b97a7 100644 --- a/security/keys/user_defined.c +++ b/security/keys/user_defined.c | |||
@@ -26,7 +26,6 @@ | |||
26 | struct key_type key_type_user = { | 26 | struct key_type key_type_user = { |
27 | .name = "user", | 27 | .name = "user", |
28 | .instantiate = user_instantiate, | 28 | .instantiate = user_instantiate, |
29 | .duplicate = user_duplicate, | ||
30 | .update = user_update, | 29 | .update = user_update, |
31 | .match = user_match, | 30 | .match = user_match, |
32 | .destroy = user_destroy, | 31 | .destroy = user_destroy, |
@@ -68,42 +67,10 @@ error: | |||
68 | return ret; | 67 | return ret; |
69 | 68 | ||
70 | } /* end user_instantiate() */ | 69 | } /* end user_instantiate() */ |
71 | |||
72 | EXPORT_SYMBOL_GPL(user_instantiate); | 70 | EXPORT_SYMBOL_GPL(user_instantiate); |
73 | 71 | ||
74 | /*****************************************************************************/ | 72 | /*****************************************************************************/ |
75 | /* | 73 | /* |
76 | * duplicate a user defined key | ||
77 | * - both keys' semaphores are locked against further modification | ||
78 | * - the new key cannot yet be accessed | ||
79 | */ | ||
80 | int user_duplicate(struct key *key, const struct key *source) | ||
81 | { | ||
82 | struct user_key_payload *upayload, *spayload; | ||
83 | int ret; | ||
84 | |||
85 | /* just copy the payload */ | ||
86 | ret = -ENOMEM; | ||
87 | upayload = kmalloc(sizeof(*upayload) + source->datalen, GFP_KERNEL); | ||
88 | if (upayload) { | ||
89 | spayload = rcu_dereference(source->payload.data); | ||
90 | BUG_ON(source->datalen != spayload->datalen); | ||
91 | |||
92 | upayload->datalen = key->datalen = spayload->datalen; | ||
93 | memcpy(upayload->data, spayload->data, key->datalen); | ||
94 | |||
95 | key->payload.data = upayload; | ||
96 | ret = 0; | ||
97 | } | ||
98 | |||
99 | return ret; | ||
100 | |||
101 | } /* end user_duplicate() */ | ||
102 | |||
103 | EXPORT_SYMBOL_GPL(user_duplicate); | ||
104 | |||
105 | /*****************************************************************************/ | ||
106 | /* | ||
107 | * dispose of the old data from an updated user defined key | 74 | * dispose of the old data from an updated user defined key |
108 | */ | 75 | */ |
109 | static void user_update_rcu_disposal(struct rcu_head *rcu) | 76 | static void user_update_rcu_disposal(struct rcu_head *rcu) |