Commit 0544b324 authored by Joe Perches's avatar Joe Perches Committed by Steve French

cifs: check kzalloc return

kzalloc can return NULL so an additional check is needed. While there
is a check for ret_buf there is no check for the allocation of
ret_buf->crfid.fid - this check is thus added. Both call-sites
of tconInfoAlloc() check for NULL return of tconInfoAlloc()
so returning NULL on failure of kzalloc() here seems appropriate.
As the kzalloc() is the only thing here that can fail it is
moved to the beginning so as not to initialize other resources
on failure of kzalloc.

Fixes: 3d4ef9a1 ("smb3: fix redundant opens on root")
Signed-off-by: default avatarJoe Perches <joe@perches.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 29cbfa1b
...@@ -111,21 +111,27 @@ struct cifs_tcon * ...@@ -111,21 +111,27 @@ struct cifs_tcon *
tconInfoAlloc(void) tconInfoAlloc(void)
{ {
struct cifs_tcon *ret_buf; struct cifs_tcon *ret_buf;
ret_buf = kzalloc(sizeof(struct cifs_tcon), GFP_KERNEL);
if (ret_buf) { ret_buf = kzalloc(sizeof(*ret_buf), GFP_KERNEL);
atomic_inc(&tconInfoAllocCount); if (!ret_buf)
ret_buf->tidStatus = CifsNew; return NULL;
++ret_buf->tc_count; ret_buf->crfid.fid = kzalloc(sizeof(*ret_buf->crfid.fid), GFP_KERNEL);
INIT_LIST_HEAD(&ret_buf->openFileList); if (!ret_buf->crfid.fid) {
INIT_LIST_HEAD(&ret_buf->tcon_list); kfree(ret_buf);
spin_lock_init(&ret_buf->open_file_lock); return NULL;
mutex_init(&ret_buf->crfid.fid_mutex);
ret_buf->crfid.fid = kzalloc(sizeof(struct cifs_fid),
GFP_KERNEL);
spin_lock_init(&ret_buf->stat_lock);
atomic_set(&ret_buf->num_local_opens, 0);
atomic_set(&ret_buf->num_remote_opens, 0);
} }
atomic_inc(&tconInfoAllocCount);
ret_buf->tidStatus = CifsNew;
++ret_buf->tc_count;
INIT_LIST_HEAD(&ret_buf->openFileList);
INIT_LIST_HEAD(&ret_buf->tcon_list);
spin_lock_init(&ret_buf->open_file_lock);
mutex_init(&ret_buf->crfid.fid_mutex);
spin_lock_init(&ret_buf->stat_lock);
atomic_set(&ret_buf->num_local_opens, 0);
atomic_set(&ret_buf->num_remote_opens, 0);
return ret_buf; return ret_buf;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment