Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ae5cbf4a authored by Mitchel Humpherys's avatar Mitchel Humpherys Committed by Greg Kroah-Hartman
Browse files

staging: ion: Store a copy of the client name on client creation



Currently, we copy the pointer passed in to ion_client_create without
making a copy of the string itself. This approach is problematic since
it relies on the client keeping the name string in working order.

Cc: Colin Cross <ccross@android.com>
Cc: Android Kernel Team <kernel-team@android.com>
Signed-off-by: default avatarMitchel Humpherys <mitchelh@codeaurora.org>
[jstultz: Minor commit subject tweaks]
Signed-off-by: default avatarJohn Stultz <john.stultz@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 483ed03f
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -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);