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

Commit 581f725c authored by Vasanthakumar Thiagarajan's avatar Vasanthakumar Thiagarajan Committed by John W. Linville
Browse files

ath9k: Fix write callback of 'debug' which configures debug mask



Handle error condition on copy_from_user() properly and
make sure a NUL terminated char[] is sent to strict_strtoul()
for proper conversion.

Signed-off-by: default avatarVasanthakumar Thiagarajan <vasanth@atheros.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 76963bb6
Loading
Loading
Loading
Loading
+14 −8
Original line number Diff line number Diff line
@@ -49,8 +49,9 @@ static ssize_t read_file_debug(struct file *file, char __user *user_buf,
{
	struct ath_softc *sc = file->private_data;
	char buf[32];
	unsigned int len = 0;
	len += snprintf(buf, sizeof(buf), "0x%08x\n", sc->debug.debug_mask);
	unsigned int len;

	len = snprintf(buf, sizeof(buf), "0x%08x\n", sc->debug.debug_mask);
	return simple_read_from_buffer(user_buf, count, ppos, buf, len);
}

@@ -60,11 +61,16 @@ static ssize_t write_file_debug(struct file *file, const char __user *user_buf,
	struct ath_softc *sc = file->private_data;
	unsigned long mask;
	char buf[32];
	if (copy_from_user(buf, user_buf, (sizeof(buf) - 1) < count ?
		(sizeof(buf) - 1) : count))
		return 0;
	buf[sizeof(buf)-1] = 0;
	if (strict_strtoul(buf, 0, &mask) == 0)
	ssize_t len;

	len = min(count, sizeof(buf) - 1);
	if (copy_from_user(buf, user_buf, len))
		return -EINVAL;

	buf[len] = '\0';
	if (strict_strtoul(buf, 0, &mask))
		return -EINVAL;

	sc->debug.debug_mask = mask;
	return count;
}