aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/ecryptfs/miscdev.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/fs/ecryptfs/miscdev.c b/fs/ecryptfs/miscdev.c
index 3a06f4043df..3c632ec412e 100644
--- a/fs/ecryptfs/miscdev.c
+++ b/fs/ecryptfs/miscdev.c
@@ -191,31 +191,32 @@ int ecryptfs_send_miscdev(char *data, size_t data_size,
191 struct ecryptfs_msg_ctx *msg_ctx, u8 msg_type, 191 struct ecryptfs_msg_ctx *msg_ctx, u8 msg_type,
192 u16 msg_flags, struct ecryptfs_daemon *daemon) 192 u16 msg_flags, struct ecryptfs_daemon *daemon)
193{ 193{
194 int rc = 0; 194 struct ecryptfs_message *msg;
195 195
196 mutex_lock(&msg_ctx->mux); 196 msg = kmalloc((sizeof(*msg) + data_size), GFP_KERNEL);
197 msg_ctx->msg = kmalloc((sizeof(*msg_ctx->msg) + data_size), 197 if (!msg) {
198 GFP_KERNEL);
199 if (!msg_ctx->msg) {
200 rc = -ENOMEM;
201 printk(KERN_ERR "%s: Out of memory whilst attempting " 198 printk(KERN_ERR "%s: Out of memory whilst attempting "
202 "to kmalloc(%zd, GFP_KERNEL)\n", __func__, 199 "to kmalloc(%zd, GFP_KERNEL)\n", __func__,
203 (sizeof(*msg_ctx->msg) + data_size)); 200 (sizeof(*msg) + data_size));
204 goto out_unlock; 201 return -ENOMEM;
205 } 202 }
203
204 mutex_lock(&msg_ctx->mux);
205 msg_ctx->msg = msg;
206 msg_ctx->msg->index = msg_ctx->index; 206 msg_ctx->msg->index = msg_ctx->index;
207 msg_ctx->msg->data_len = data_size; 207 msg_ctx->msg->data_len = data_size;
208 msg_ctx->type = msg_type; 208 msg_ctx->type = msg_type;
209 memcpy(msg_ctx->msg->data, data, data_size); 209 memcpy(msg_ctx->msg->data, data, data_size);
210 msg_ctx->msg_size = (sizeof(*msg_ctx->msg) + data_size); 210 msg_ctx->msg_size = (sizeof(*msg_ctx->msg) + data_size);
211 mutex_lock(&daemon->mux);
212 list_add_tail(&msg_ctx->daemon_out_list, &daemon->msg_ctx_out_queue); 211 list_add_tail(&msg_ctx->daemon_out_list, &daemon->msg_ctx_out_queue);
212 mutex_unlock(&msg_ctx->mux);
213
214 mutex_lock(&daemon->mux);
213 daemon->num_queued_msg_ctx++; 215 daemon->num_queued_msg_ctx++;
214 wake_up_interruptible(&daemon->wait); 216 wake_up_interruptible(&daemon->wait);
215 mutex_unlock(&daemon->mux); 217 mutex_unlock(&daemon->mux);
216out_unlock: 218
217 mutex_unlock(&msg_ctx->mux); 219 return 0;
218 return rc;
219} 220}
220 221
221/* 222/*