All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexey Dobriyan <adobriyan@gmail.com>
To: security@kernel.org
Cc: Hyunwoo Kim <imv4bel@gmail.com>,
	linux-kernel@vger.kernel.org, Helge Deller <deller@gmx.de>,
	adobriyan@gmail.com
Subject: No CVE-2022-39842 aka int/size_t confusion in pxa3xx_gcu_write()
Date: Fri, 9 Dec 2022 18:00:32 +0300	[thread overview]
Message-ID: <Y5NNkAoZRY+UlWaf@p183> (raw)

> From a09d2d00af53b43c6f11e6ab3cb58443c2cac8a7 Mon Sep 17 00:00:00 2001
> From: Hyunwoo Kim <imv4bel@gmail.com>
> Date: Mon, 20 Jun 2022 07:17:46 -0700
> Subject: [PATCH 1/1] video: fbdev: pxa3xx-gcu: Fix integer overflow in pxa3xx_gcu_write
> 
> In pxa3xx_gcu_write, a count parameter of type size_t is passed to words of
> type int.  Then, copy_from_user() may cause a heap overflow because it is used
> as the third argument of copy_from_user().
> 
> --- a/drivers/video/fbdev/pxa3xx-gcu.c
> +++ b/drivers/video/fbdev/pxa3xx-gcu.c
> @@ -381,7 +381,7 @@ pxa3xx_gcu_write(struct file *file, const char *buff,
>  	struct pxa3xx_gcu_batch	*buffer;
>  	struct pxa3xx_gcu_priv *priv = to_pxa3xx_gcu_priv(file);
>  
> -	int words = count / 4;
> +	size_t words = count / 4;
>  
>  	/* Does not need to be atomic. There's a lock in user space,
>  	 * but anyhow, this is just for statistics. */

This patch is predicated on the fact that struct file_operations::write
may accept arbitrary "size_t count" values" which is not true:

	ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos)
	{
		...
		if (count > MAX_RW_COUNT)
	                count =  MAX_RW_COUNT;

This check clamps everything at "INT_MAX & ~PAGE_MASK" which is within int
value range so it can be divided and multiplied back just fine.

Another thing, on x86_64 copy_from_user/copy_to_user() _real_ signature is

	unsigned long copy_user_generic(void *, const void *, unsigned !!!)

Note how "unsigned long len" becomes just "unsigned int len" right when you
are tired to follow the callchain. Assembly does "movl %edx, %ecx" and other
32-bit things.

So... No CVE?

                 reply	other threads:[~2022-12-09 15:01 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Y5NNkAoZRY+UlWaf@p183 \
    --to=adobriyan@gmail.com \
    --cc=deller@gmx.de \
    --cc=imv4bel@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=security@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.