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

Commit 20b0c718 authored by Mathias Krause's avatar Mathias Krause Committed by David S. Miller
Browse files

pktgen: fix out-of-bounds access in pgctrl_write()



If a privileged user writes an empty string to /proc/net/pktgen/pgctrl
the code for stripping the (then non-existent) '\n' actually writes the
zero byte at index -1 of data[]. The then still uninitialized array will
very likely fail the command matching tests and the pr_warning() at the
end will therefore leak stack bytes to the kernel log.

Fix those issues by simply ensuring we're passed a non-empty string as
the user API apparently expects a trailing '\n' for all commands.

Cc: "David S. Miller" <davem@davemloft.net>
Signed-off-by: default avatarMathias Krause <minipli@googlemail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8bfdfbc1
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -485,6 +485,9 @@ static ssize_t pgctrl_write(struct file *file, const char __user *buf,
		goto out;
		goto out;
	}
	}


	if (count == 0)
		return -EINVAL;

	if (count > sizeof(data))
	if (count > sizeof(data))
		count = sizeof(data);
		count = sizeof(data);


@@ -492,7 +495,7 @@ static ssize_t pgctrl_write(struct file *file, const char __user *buf,
		err = -EFAULT;
		err = -EFAULT;
		goto out;
		goto out;
	}
	}
	data[count - 1] = 0;	/* Make string */
	data[count - 1] = 0;	/* Strip trailing '\n' and terminate string */


	if (!strcmp(data, "stop"))
	if (!strcmp(data, "stop"))
		pktgen_stop_all_threads_ifs(pn);
		pktgen_stop_all_threads_ifs(pn);