diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath10k/debug.c')
| -rw-r--r-- | drivers/net/wireless/ath/ath10k/debug.c | 16 | 
1 files changed, 10 insertions, 6 deletions
| diff --git a/drivers/net/wireless/ath/ath10k/debug.c b/drivers/net/wireless/ath/ath10k/debug.c index 4cd2a0fd49d6..389fcb7a9fd0 100644 --- a/drivers/net/wireless/ath/ath10k/debug.c +++ b/drivers/net/wireless/ath/ath10k/debug.c @@ -625,17 +625,21 @@ static ssize_t ath10k_write_simulate_fw_crash(struct file *file,  					      size_t count, loff_t *ppos)  {  	struct ath10k *ar = file->private_data; -	char buf[32]; +	char buf[32] = {0}; +	ssize_t rc;  	int ret; -	simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf, count); +	/* filter partial writes and invalid commands */ +	if (*ppos != 0 || count >= sizeof(buf) || count == 0) +		return -EINVAL; -	/* make sure that buf is null terminated */ -	buf[sizeof(buf) - 1] = 0; +	rc = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf, count); +	if (rc < 0) +		return rc;  	/* drop the possible '\n' from the end */ -	if (buf[count - 1] == '\n') -		buf[count - 1] = 0; +	if (buf[*ppos - 1] == '\n') +		buf[*ppos - 1] = '\0';  	mutex_lock(&ar->conf_mutex); | 
