From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Richard Weinberger <richard@nod.at>
Cc: u-boot@lists.denx.de, jmcosta944@gmail.com,
thomas.petazzoni@bootlin.com, trini@konsulko.com,
upstream+uboot@sigma-star.at
Subject: Re: [PATCH 4/4] squashfs: Fix stack overflow while symlink resolving
Date: Wed, 17 Jul 2024 10:06:35 +0200 [thread overview]
Message-ID: <20240717100635.19491668@xps-13> (raw)
In-Reply-To: <20240712082344.8655-4-richard@nod.at>
Hi Richard,
richard@nod.at wrote on Fri, 12 Jul 2024 10:23:44 +0200:
> The squashfs driver blindly follows symlinks, and calls sqfs_size()
> recursively. So an attacker can create a crafted filesystem and with
> a deep enough nesting level a stack overflow can be achieved.
>
> Fix by limiting the nesting level to 8.
As this is I believe an arbitrary value, could we define this value
somewhere and flag it with a comment as "arbitrary" with some details
from the commit log? Right now the value '8' is hardcoded at least in 3
different places. Also, 8 seems rather small, any reason for choosing
that? I believe this is easy to cross even in non-evil filesystems and
could perhaps be (again, arbitrarily) increased a bit?
> Signed-off-by: Richard Weinberger <richard@nod.at>
> ---
> fs/squashfs/sqfs.c | 74 ++++++++++++++++++++++++++++++++++++----------
> 1 file changed, 59 insertions(+), 15 deletions(-)
>
...
> /* Check for symbolic link and inode type sanity */
> if (get_unaligned_le16(&dir->inode_type) == SQFS_SYMLINK_TYPE) {
> + if (++symlinknest == 8) {
> + ret = -ELOOP;
> + goto out;
> + }
...
> @@ -1421,9 +1441,14 @@ int sqfs_read(const char *filename, void *buf, loff_t offset, loff_t len,
> break;
> case SQFS_SYMLINK_TYPE:
> case SQFS_LSYMLINK_TYPE:
> + if (++symlinknest == 8) {
> + ret = -ELOOP;
> + goto out;
> + }
...
> case SQFS_LSYMLINK_TYPE:
> + if (++symlinknest == 8) {
> + *size = 0;
> + return -ELOOP;
> + }
Thanks,
Miquèl
next prev parent reply other threads:[~2024-07-17 8:06 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-12 8:23 [PATCH 1/4] squashfs: Fix integer overflow in sqfs_resolve_symlink() Richard Weinberger
2024-07-12 8:23 ` [PATCH 2/4] squashfs: Fix integer overflow in sqfs_inode_size() Richard Weinberger
2024-07-17 7:59 ` Miquel Raynal
2024-07-12 8:23 ` [PATCH 3/4] squashfs: Check sqfs_find_inode() return value Richard Weinberger
2024-07-17 8:00 ` Miquel Raynal
2024-07-12 8:23 ` [PATCH 4/4] squashfs: Fix stack overflow while symlink resolving Richard Weinberger
2024-07-17 8:06 ` Miquel Raynal [this message]
2024-07-17 8:16 ` Richard Weinberger
2024-07-17 8:26 ` Miquel Raynal
2024-07-17 8:45 ` Richard Weinberger
2024-07-17 7:59 ` [PATCH 1/4] squashfs: Fix integer overflow in sqfs_resolve_symlink() Miquel Raynal
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=20240717100635.19491668@xps-13 \
--to=miquel.raynal@bootlin.com \
--cc=jmcosta944@gmail.com \
--cc=richard@nod.at \
--cc=thomas.petazzoni@bootlin.com \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
--cc=upstream+uboot@sigma-star.at \
/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.