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

Commit 24277dda authored by Davi Arnaut's avatar Davi Arnaut Committed by Linus Torvalds
Browse files

[PATCH] strndup_user: convert module



Change hand-coded userspace string copying to strndup_user.

Signed-off-by: default avatarDavi Arnaut <davi.arnaut@gmail.com>
Cc: David Howells <dhowells@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 96840aa0
Loading
Loading
Loading
Loading
+3 −16
Original line number Diff line number Diff line
@@ -1572,7 +1572,6 @@ static struct module *load_module(void __user *umod,
		exportindex, modindex, obsparmindex, infoindex, gplindex,
		crcindex, gplcrcindex, versindex, pcpuindex, gplfutureindex,
		gplfuturecrcindex;
	long arglen;
	struct module *mod;
	long err = 0;
	void *percpu = NULL, *ptr = NULL; /* Stops spurious gcc warning */
@@ -1691,23 +1690,11 @@ static struct module *load_module(void __user *umod,
	}

	/* Now copy in args */
	arglen = strlen_user(uargs);
	if (!arglen) {
		err = -EFAULT;
		goto free_hdr;
	}
	args = kmalloc(arglen, GFP_KERNEL);
	if (!args) {
		err = -ENOMEM;
	args = strndup_user(uargs, ~0UL >> 1);
	if (IS_ERR(args)) {
		err = PTR_ERR(args);
		goto free_hdr;
	}
	if (copy_from_user(args, uargs, arglen) != 0) {
		err = -EFAULT;
		goto free_mod;
	}

	/* Userspace could have altered the string after the strlen_user() */
	args[arglen - 1] = '\0';

	if (find_module(mod->name)) {
		err = -EEXIST;