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

Commit e4e85bb0 authored by Al Viro's avatar Al Viro
Browse files

cciss: switch to memdup_user_nul()



all we do to buffer is strncmp()...

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent f0fc8696
Loading
Loading
Loading
Loading
+4 −10
Original line number Diff line number Diff line
@@ -514,14 +514,9 @@ cciss_proc_write(struct file *file, const char __user *buf,
	if (!buf || length > PAGE_SIZE - 1)
		return -EINVAL;

	buffer = (char *)__get_free_page(GFP_KERNEL);
	if (!buffer)
		return -ENOMEM;

	err = -EFAULT;
	if (copy_from_user(buffer, buf, length))
		goto out;
	buffer[length] = '\0';
	buffer = memdup_user_nul(buf, length);
	if (IS_ERR(buffer))
		return PTR_ERR(buffer);

#ifdef CONFIG_CISS_SCSI_TAPE
	if (strncmp(ENGAGE_SCSI, buffer, sizeof ENGAGE_SCSI - 1) == 0) {
@@ -537,8 +532,7 @@ cciss_proc_write(struct file *file, const char __user *buf,
	/* might be nice to have "disengage" too, but it's not
	   safely possible. (only 1 module use count, lock issues.) */

out:
	free_page((unsigned long)buffer);
	kfree(buffer);
	return err;
}