Merge "diag: Synchronize command registration table access"

This commit is contained in:
Linux Build Service Account 2017-06-01 01:53:07 -07:00 committed by Gerrit - the friendly Code Review server
commit 864fd17d93

View file

@ -276,8 +276,10 @@ static ssize_t diag_dbgfs_read_table(struct file *file, char __user *ubuf,
struct list_head *temp; struct list_head *temp;
struct diag_cmd_reg_t *item = NULL; struct diag_cmd_reg_t *item = NULL;
mutex_lock(&driver->cmd_reg_mutex);
if (diag_dbgfs_table_index == driver->cmd_reg_count) { if (diag_dbgfs_table_index == driver->cmd_reg_count) {
diag_dbgfs_table_index = 0; diag_dbgfs_table_index = 0;
mutex_unlock(&driver->cmd_reg_mutex);
return 0; return 0;
} }
@ -286,6 +288,7 @@ static ssize_t diag_dbgfs_read_table(struct file *file, char __user *ubuf,
buf = kzalloc(sizeof(char) * buf_size, GFP_KERNEL); buf = kzalloc(sizeof(char) * buf_size, GFP_KERNEL);
if (ZERO_OR_NULL_PTR(buf)) { if (ZERO_OR_NULL_PTR(buf)) {
pr_err("diag: %s, Error allocating memory\n", __func__); pr_err("diag: %s, Error allocating memory\n", __func__);
mutex_unlock(&driver->cmd_reg_mutex);
return -ENOMEM; return -ENOMEM;
} }
buf_size = ksize(buf); buf_size = ksize(buf);
@ -330,6 +333,7 @@ static ssize_t diag_dbgfs_read_table(struct file *file, char __user *ubuf,
break; break;
} }
diag_dbgfs_table_index = i; diag_dbgfs_table_index = i;
mutex_unlock(&driver->cmd_reg_mutex);
*ppos = 0; *ppos = 0;
ret = simple_read_from_buffer(ubuf, count, ppos, buf, bytes_in_buffer); ret = simple_read_from_buffer(ubuf, count, ppos, buf, bytes_in_buffer);