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

Commit 11879ba5 authored by Arjan van de Ven's avatar Arjan van de Ven Committed by Ingo Molnar
Browse files

x86: Simplify bound checks in the MTRR code



The current bound checks for copy_from_user in the MTRR driver are
not as obvious as they could be, and gcc agrees with that.

This patch simplifies the boundary checks to the point that gcc can
now prove to itself that the copy_from_user() is never going past
its bounds.

Signed-off-by: default avatarArjan van de Ven <arjan@linux.intel.com>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
LKML-Reference: <20090926205150.30797709@infradead.org>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 0d18b2e3
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -96,17 +96,24 @@ mtrr_write(struct file *file, const char __user *buf, size_t len, loff_t * ppos)
	unsigned long long base, size;
	char *ptr;
	char line[LINE_SIZE];
	int length;
	size_t linelen;

	if (!capable(CAP_SYS_ADMIN))
		return -EPERM;
	if (!len)
		return -EINVAL;

	memset(line, 0, LINE_SIZE);
	if (len > LINE_SIZE)
		len = LINE_SIZE;
	if (copy_from_user(line, buf, len - 1))

	length = len;
	length--;

	if (length > LINE_SIZE - 1)
		length = LINE_SIZE - 1;

	if (length < 0)
		return -EINVAL;

	if (copy_from_user(line, buf, length))
		return -EFAULT;

	linelen = strlen(line);