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

Commit ec9d04b2 authored by Kulikov Vasiliy's avatar Kulikov Vasiliy Committed by Takashi Iwai
Browse files

ALSA: asihpi: check return value of get_user()



get_user() may fail, if so return -EFAULT.

Signed-off-by: default avatarKulikov Vasiliy <segooon@gmail.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent b3390cea
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -121,11 +121,17 @@ long asihpi_hpi_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
	phpi_ioctl_data = (struct hpi_ioctl_linux __user *)arg;

	/* Read the message and response pointers from user space.  */
	get_user(puhm, &phpi_ioctl_data->phm);
	get_user(puhr, &phpi_ioctl_data->phr);
	if (get_user(puhm, &phpi_ioctl_data->phm) ||
	    get_user(puhr, &phpi_ioctl_data->phr)) {
		err = -EFAULT;
		goto out;
	}

	/* Now read the message size and data from user space.  */
	get_user(hm->h.size, (u16 __user *)puhm);
	if (get_user(hm->h.size, (u16 __user *)puhm)) {
		err = -EFAULT;
		goto out;
	}
	if (hm->h.size > sizeof(*hm))
		hm->h.size = sizeof(*hm);

@@ -138,7 +144,10 @@ long asihpi_hpi_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
		goto out;
	}

	get_user(res_max_size, (u16 __user *)puhr);
	if (get_user(res_max_size, (u16 __user *)puhr)) {
		err = -EFAULT;
		goto out;
	}
	/* printk(KERN_INFO "user response size %d\n", res_max_size); */
	if (res_max_size < sizeof(struct hpi_response_header)) {
		HPI_DEBUG_LOG(WARNING, "small res size %d\n", res_max_size);