Commit 3abab905 authored by Jinjie Ruan's avatar Jinjie Ruan Committed by Namjae Jeon
Browse files

ksmbd: Fix the missing xa_store error check



xa_store() can fail, it return xa_err(-EINVAL) if the entry cannot
be stored in an XArray, or xa_err(-ENOMEM) if memory allocation failed,
so check error for xa_store() to fix it.

Cc: stable@vger.kernel.org
Fixes: b685757c ("ksmbd: Implements sess->rpc_handle_list as xarray")
Signed-off-by: default avatarJinjie Ruan <ruanjinjie@huawei.com>
Acked-by: default avatarNamjae Jeon <linkinjeon@kernel.org>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 81983758
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -90,7 +90,7 @@ static int __rpc_method(char *rpc_name)

int ksmbd_session_rpc_open(struct ksmbd_session *sess, char *rpc_name)
{
	struct ksmbd_session_rpc *entry;
	struct ksmbd_session_rpc *entry, *old;
	struct ksmbd_rpc_command *resp;
	int method;

@@ -106,16 +106,19 @@ int ksmbd_session_rpc_open(struct ksmbd_session *sess, char *rpc_name)
	entry->id = ksmbd_ipc_id_alloc();
	if (entry->id < 0)
		goto free_entry;
	xa_store(&sess->rpc_handle_list, entry->id, entry, GFP_KERNEL);
	old = xa_store(&sess->rpc_handle_list, entry->id, entry, GFP_KERNEL);
	if (xa_is_err(old))
		goto free_id;

	resp = ksmbd_rpc_open(sess, entry->id);
	if (!resp)
		goto free_id;
		goto erase_xa;

	kvfree(resp);
	return entry->id;
free_id:
erase_xa:
	xa_erase(&sess->rpc_handle_list, entry->id);
free_id:
	ksmbd_rpc_id_free(entry->id);
free_entry:
	kfree(entry);