git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] tree-walk: disallow overflowing modes

From
René Scharfe <l.s.r@web.de>
Date
Jan 22, 2023, 10:03 UTC
Message-ID
<044bdc8f-fdc9-dfd2-6cbb-941513467524@web.de>
In-Reply-To
<Y8zquGar3rLyRdTp@coredump.intra.peff.net>
Am 22.01.23 um 08:50 schrieb Jeff King:
Show 10 quoted lines
> On Sat, Jan 21, 2023 at 10:36:09AM +0100, René Scharfe wrote:
>
>> When parsing tree entries, reject mode values that don't fit into an
>> unsigned int.
>
> Seems reasonable. I don't think you can cause any interesting mischief
> here, but it's cheap to check, and finding data problems earlier rather
> than later is always good.
>
> Should it be s/unsigned int/uint16_t/, though?

"mode" is declared as unsigned int, and I was more concerned with overflowing that.

We could be more strict and reject everything that oversteps S_IFMT|ALLPERMS, but the latter is not defined everywhere. But permission bits are well-known, so the magic number 07777 should be recognizable enough. Like this?

--- >8 ---
Subject: [PATCH v2] tree-walk: disallow overflowing modes

When parsing tree entries, reject mode values with bits set outside file type mask and permission bits.

Suggested-by: Jeff King <peff@peff.net>
Signed-off-by: René Scharfe <l.s.r@web.de>
---
 tree-walk.c | 2 ++
 1 file changed, 2 insertions(+)
diff --git a/tree-walk.c b/tree-walk.c
index 74f4d710e8..62da0e5c73 100644
--- a/tree-walk.c
+++ b/tree-walk.c
@@ -18,6 +18,8 @@ static const char *get_mode(const char *str, unsigned int *modep)
 		if (c < '0' || c > '7')
 			return NULL;
 		mode = (mode << 3) + (c - '0');
+		if (mode & ~(S_IFMT | 07777))
+			return NULL;
 	}
 	*modep = mode;
 	return str;
--
2.39.1
Previous: Jeff KingNext: Junio C Hamano
Message 3 of 9 in “tree-walk: disallow overflowing modes”
  1. tree-walk: disallow overflowing modesRené Scharfe, Jan 21, 2023
  2. Jeff KingJan 22, 2023
  3. René ScharfeJan 22, 2023
  4. Junio C HamanoJan 22, 2023
  5. Jeff KingJan 22, 2023
  6. Ævar Arnfjörð BjarmasonJan 23, 2023
  7. René ScharfeJan 24, 2023
  8. Junio C HamanoJan 24, 2023
  9. Jeff KingJan 26, 2023

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.