|
@@ -735,19 +735,18 @@ struct ion_client *ion_client_create(struct ion_device *dev,
|
|
|
task_unlock(current->group_leader);
|
|
|
|
|
|
client = kzalloc(sizeof(struct ion_client), GFP_KERNEL);
|
|
|
- if (!client) {
|
|
|
- if (task)
|
|
|
- put_task_struct(current->group_leader);
|
|
|
- return ERR_PTR(-ENOMEM);
|
|
|
- }
|
|
|
+ if (!client)
|
|
|
+ goto err_put_task_struct;
|
|
|
|
|
|
client->dev = dev;
|
|
|
client->handles = RB_ROOT;
|
|
|
idr_init(&client->idr);
|
|
|
mutex_init(&client->lock);
|
|
|
- client->name = name;
|
|
|
client->task = task;
|
|
|
client->pid = pid;
|
|
|
+ client->name = kstrdup(name, GFP_KERNEL);
|
|
|
+ if (!client->name)
|
|
|
+ goto err_free_client;
|
|
|
|
|
|
down_write(&dev->lock);
|
|
|
p = &dev->clients.rb_node;
|
|
@@ -776,6 +775,13 @@ struct ion_client *ion_client_create(struct ion_device *dev,
|
|
|
up_write(&dev->lock);
|
|
|
|
|
|
return client;
|
|
|
+
|
|
|
+err_free_client:
|
|
|
+ kfree(client);
|
|
|
+err_put_task_struct:
|
|
|
+ if (task)
|
|
|
+ put_task_struct(current->group_leader);
|
|
|
+ return ERR_PTR(-ENOMEM);
|
|
|
}
|
|
|
EXPORT_SYMBOL(ion_client_create);
|
|
|
|
|
@@ -800,6 +806,7 @@ void ion_client_destroy(struct ion_client *client)
|
|
|
debugfs_remove_recursive(client->debug_root);
|
|
|
up_write(&dev->lock);
|
|
|
|
|
|
+ kfree(client->name);
|
|
|
kfree(client);
|
|
|
}
|
|
|
EXPORT_SYMBOL(ion_client_destroy);
|