From: "Carlo Marcelo Arenas Belón" <carenas@gmail.com> To: Junio C Hamano <gitster@pobox.com> Cc: Phillip Wood <phillip.wood123@gmail.com>, git@vger.kernel.org Subject: Re: [PATCH v2 3/3] t: add tests for safe.directory when running with sudo Date: Sat, 7 May 2022 04:57:01 -0700 [thread overview] Message-ID: <20220507115701.nozz53t4j52r2xon@carlos-mbp.lan> (raw) In-Reply-To: <xmqqfslmi5c7.fsf@gitster.g> On Fri, May 06, 2022 at 04:55:36PM -0700, Junio C Hamano wrote: > Carlo Arenas <carenas@gmail.com> writes: > > > true, but the apparent check for ULONG_MAX (which should have a > > comment added) was really a check not to overflow when assigning the > > value we got into uid_t, by sacrificing an unlikely to be valid > > ULONG_MAX as an uid. > > Are you worried about uid_t wider than ulong? strtoul() with !errno > test covers the case, doesn't it? No, I am worried about uid_t narrower than ulong, which is also the most likely scenatio with a typeof(uid_t) == uint32_t > SUDO_UID cannot have any integer > that cannot be represented in uid_t and if strtoul() does not say > ERANGE, we know whatever value in SUID_UID did not overflow ulong. It is a little subtle, but strtoul doesn't warrant always an ERANGE because it tries to be helpful when given a negative integer and returns instead an equivalent unsigned long as per spec[1] (or in this case the commentary from OpenBSD man page which is also easier to link) "If the minus sign was part of the input sequence, the numeric value calculated from the sequence of digits is negated as if by unary minus in the result type, which applies unsigned integer wraparound rules." > > it ALSO avoids someone trying to sneak a value that would overflow in > > one of the most common configurations we will run where sizeof(long) > > > sizeof(uid_t) && MIN_UID_T >=0, by using an equivalent to MAX_UID_T > > Sorry, -ECANNOTPARSE. If strtoul() can parse everything in uid_t > then where is the room for overflowing? So lets assume a 32bit unsigned uid_t, that wraparounds at 2^32+1, if we get a negative value that is equivalent to something bigger than it, or even a positive value bigger than it, then the assignment will overflow unless we keep it in check by that obviously too clever condition that was removed and we MIGHT even assume an uid_t of 0, which is embarrasing[0]. > We are trying to protect an > unsuspecting user who temporary has become 'root' via sudo, and not > somebody deliberately hurt themselves or others by setting SUDO_UID > deliberately to strange values (once you are 'root', you have easier > ways to hurt other people). You are correct for the current code that even has a big warning telling people NEVER to run that function for anyone other than root, but who knows how this will evolve in the future. Removing it also has other sideeffect, like making this code work in incorrect ways if uid_t is signed, which I mentioned before but probably should had been added as a comment, but that was part of the requirements[2] we had when Phillip argued correctly that I was restricting the valid uid to only half was possible in 32bit systems. FWIW, sudo prints the uid using "%u" so using unsigned long makes more sense and all these problems are unlikely to be practical issues now so I am ok taking your code if you insist, but I still think that the original one was safer in case things change in the future or if there is a platform we currently run on with has signed uid_t, so I will keep it in the RFC with hopefully enough comments to convince you. Carlo [0] https://github.com/systemd/systemd/issues/11026 [1] https://man.openbsd.org/strtoul.3 [2] https://lore.kernel.org/git/CAPUEspjoTYtv9K=rvpkFnyGnEz_uxefED820rx09b6qGG93SqA@mail.gmail.com/
next prev parent reply other threads:[~2022-05-07 11:57 UTC|newest] Thread overview: 170+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-04-26 18:31 [RFC PATCH] git-compat-util: avoid failing dir ownership checks if running priviledged Carlo Marcelo Arenas Belón 2022-04-26 19:48 ` Derrick Stolee 2022-04-26 19:56 ` Junio C Hamano 2022-04-26 20:10 ` rsbecker 2022-04-26 20:45 ` Carlo Arenas 2022-04-26 21:10 ` Junio C Hamano 2022-04-26 20:12 ` Carlo Arenas 2022-04-26 20:26 ` Carlo Arenas 2022-04-29 16:16 ` Derrick Stolee 2022-04-27 0:05 ` [PATCH] git-compat-util: avoid failing dir ownership checks if running privileged Carlo Marcelo Arenas Belón 2022-04-27 9:33 ` Phillip Wood 2022-04-27 12:30 ` Phillip Wood 2022-04-27 14:15 ` rsbecker 2022-04-27 15:58 ` Carlo Arenas 2022-04-27 16:14 ` Phillip Wood 2022-04-27 18:54 ` Junio C Hamano 2022-04-27 20:59 ` Carlo Arenas 2022-04-27 21:09 ` rsbecker 2022-04-27 21:25 ` Junio C Hamano 2022-04-28 17:56 ` Phillip Wood 2022-04-27 15:38 ` Carlo Arenas 2022-04-27 15:50 ` rsbecker 2022-04-27 16:19 ` Junio C Hamano 2022-04-27 16:45 ` Carlo Arenas 2022-04-27 17:22 ` Phillip Wood 2022-04-27 17:49 ` rsbecker 2022-04-27 17:54 ` Carlo Arenas 2022-04-27 18:05 ` rsbecker 2022-04-27 18:11 ` Carlo Arenas 2022-04-27 18:16 ` rsbecker 2022-04-27 16:31 ` Phillip Wood 2022-04-27 16:54 ` Carlo Arenas 2022-04-27 17:28 ` Phillip Wood 2022-04-27 17:49 ` Carlo Arenas 2022-04-27 22:26 ` [RFC PATCH v2] " Carlo Marcelo Arenas Belón 2022-04-27 22:33 ` Junio C Hamano 2022-04-28 3:35 ` [PATCH 0/2] fix `sudo make install` regression in maint Carlo Marcelo Arenas Belón 2022-04-28 3:35 ` [PATCH 1/2] Documentation: explain how safe.directory works when running under sudo Carlo Marcelo Arenas Belón 2022-04-28 5:17 ` Junio C Hamano 2022-04-28 5:58 ` Carlo Arenas 2022-04-28 6:41 ` Junio C Hamano 2022-04-28 3:35 ` [PATCH 2/2] t: add tests for safe.directory when running with sudo Carlo Marcelo Arenas Belón 2022-04-28 5:34 ` Junio C Hamano 2022-04-28 4:57 ` [PATCH 0/2] fix `sudo make install` regression in maint Junio C Hamano 2022-04-28 10:58 ` [PATCH v2 0/3] " Carlo Marcelo Arenas Belón 2022-04-28 10:58 ` [PATCH v2 1/3] git-compat-util: avoid failing dir ownership checks if running privileged Carlo Marcelo Arenas Belón 2022-04-28 18:02 ` Phillip Wood 2022-04-28 18:57 ` Carlo Arenas 2022-04-28 10:58 ` [PATCH v2 2/3] Documentation: explain how safe.directory works when running under sudo Carlo Marcelo Arenas Belón 2022-04-30 6:17 ` Bagas Sanjaya 2022-04-30 6:39 ` Junio C Hamano 2022-04-30 14:15 ` Carlo Marcelo Arenas Belón 2022-04-28 10:58 ` [PATCH v2 3/3] t: add tests for safe.directory when running with sudo Carlo Marcelo Arenas Belón 2022-04-28 16:55 ` Junio C Hamano 2022-04-28 18:08 ` Phillip Wood 2022-04-28 18:12 ` Junio C Hamano 2022-05-06 17:50 ` Carlo Arenas 2022-05-06 21:43 ` Junio C Hamano 2022-05-06 22:57 ` Carlo Arenas 2022-05-06 23:55 ` Junio C Hamano 2022-05-07 11:57 ` Carlo Marcelo Arenas Belón [this message] 2022-04-28 19:53 ` rsbecker 2022-04-28 20:22 ` Carlo Arenas 2022-04-28 20:43 ` rsbecker 2022-04-28 20:51 ` Junio C Hamano 2022-04-28 20:56 ` Carlo Arenas 2022-04-28 21:55 ` rsbecker 2022-04-28 22:21 ` Junio C Hamano 2022-04-28 22:45 ` rsbecker 2022-04-28 20:46 ` Junio C Hamano 2022-04-28 20:32 ` Junio C Hamano 2022-04-28 20:40 ` rsbecker 2022-04-28 20:48 ` Carlo Arenas 2022-04-28 21:02 ` Carlo Arenas 2022-04-28 21:07 ` Junio C Hamano 2022-04-29 1:24 ` Carlo Marcelo Arenas Belón 2022-04-29 18:50 ` Junio C Hamano 2022-04-29 20:05 ` Carlo Marcelo Arenas Belón 2022-05-02 18:39 ` [RFC PATCH v3 0/3] fix `sudo make install` regression in maint Carlo Marcelo Arenas Belón 2022-05-02 18:39 ` [RFC PATCH v3 1/3] t: document regression git safe.directory when using sudo Carlo Marcelo Arenas Belón 2022-05-02 21:35 ` Junio C Hamano 2022-05-02 23:07 ` Carlo Arenas 2022-05-02 18:39 ` [RFC PATCH v3 2/3] git-compat-util: avoid failing dir ownership checks if running privileged Carlo Marcelo Arenas Belón 2022-05-02 18:39 ` [RFC PATCH v3 3/3] t0034: enhance framework to allow testing more commands under sudo Carlo Marcelo Arenas Belón 2022-05-02 22:10 ` Junio C Hamano 2022-05-03 0:00 ` Carlo Arenas 2022-05-03 6:54 ` [PATCH v3 0/3] fix `sudo make install` regression in maint Carlo Marcelo Arenas Belón 2022-05-03 6:54 ` [PATCH v3 1/3] t: document regression git safe.directory when using sudo Carlo Marcelo Arenas Belón 2022-05-03 14:03 ` Phillip Wood 2022-05-03 15:56 ` Carlo Marcelo Arenas Belón 2022-05-04 11:15 ` Phillip Wood 2022-05-04 13:02 ` Carlo Arenas 2022-05-04 14:11 ` Phillip Wood 2022-05-05 13:44 ` Johannes Schindelin 2022-05-05 14:34 ` Phillip Wood 2022-05-05 15:50 ` Junio C Hamano 2022-05-05 18:33 ` Junio C Hamano 2022-05-05 19:39 ` Junio C Hamano 2022-05-06 21:03 ` Carlo Arenas 2022-05-09 8:21 ` Phillip Wood 2022-05-09 14:51 ` Carlo Arenas 2022-05-09 15:18 ` Phillip Wood 2022-05-09 16:01 ` Junio C Hamano 2022-05-09 16:21 ` Carlo Arenas 2022-05-06 17:39 ` Carlo Arenas 2022-05-03 6:54 ` [PATCH v3 2/3] git-compat-util: avoid failing dir ownership checks if running privileged Carlo Marcelo Arenas Belón 2022-05-05 14:01 ` Johannes Schindelin 2022-05-05 14:32 ` Phillip Wood 2022-05-06 19:15 ` Carlo Arenas 2022-05-06 20:00 ` Junio C Hamano 2022-05-06 20:22 ` Carlo Arenas 2022-05-06 20:59 ` Junio C Hamano 2022-05-06 21:40 ` Carlo Arenas 2022-05-06 21:07 ` rsbecker 2022-05-05 16:09 ` Junio C Hamano 2022-05-06 20:02 ` Carlo Arenas 2022-05-03 6:54 ` [PATCH v3 3/3] t0034: enhance framework to allow testing more commands under sudo Carlo Marcelo Arenas Belón 2022-05-03 14:12 ` Phillip Wood 2022-05-03 15:27 ` Junio C Hamano 2022-05-06 16:54 ` Carlo Arenas 2022-05-07 16:35 ` [RFC PATCH v4 0/3] fix `sudo make install` regression in maint Carlo Marcelo Arenas Belón 2022-05-07 16:35 ` [RFC PATCH v4 1/3] t: regression git needs safe.directory when using sudo Carlo Marcelo Arenas Belón 2022-05-07 16:35 ` [RFC PATCH v4 2/3] git-compat-util: avoid failing dir ownership checks if running privileged Carlo Marcelo Arenas Belón 2022-05-07 17:34 ` Junio C Hamano 2022-05-07 18:56 ` Carlo Marcelo Arenas Belón 2022-05-09 16:54 ` Junio C Hamano 2022-05-09 17:36 ` rsbecker 2022-05-09 18:48 ` Carlo Arenas 2022-05-09 19:16 ` rsbecker 2022-05-09 19:41 ` Junio C Hamano 2022-05-07 16:35 ` [RFC PATCH v4 3/3] t0034: add negative tests and allow git init to mostly work under sudo Carlo Marcelo Arenas Belón 2022-05-10 14:17 ` [RFC PATCH v4 0/3] fix `sudo make install` regression in maint Phillip Wood 2022-05-10 15:47 ` Carlo Arenas 2022-05-10 17:46 ` [PATCH " Carlo Marcelo Arenas Belón 2022-05-10 17:46 ` [PATCH v4 1/3] t: regression git needs safe.directory when using sudo Carlo Marcelo Arenas Belón 2022-05-10 22:10 ` Junio C Hamano 2022-05-10 23:11 ` Carlo Arenas 2022-05-10 23:44 ` Junio C Hamano 2022-05-11 0:56 ` Carlo Arenas 2022-05-11 1:11 ` Junio C Hamano 2022-05-10 17:46 ` [PATCH v4 2/3] git-compat-util: avoid failing dir ownership checks if running privileged Carlo Marcelo Arenas Belón 2022-05-10 22:57 ` Junio C Hamano 2022-05-11 7:34 ` Carlo Arenas 2022-05-11 14:58 ` Junio C Hamano 2022-05-10 17:46 ` [PATCH v4 3/3] t0034: add negative tests and allow git init to mostly work under sudo Carlo Marcelo Arenas Belón 2022-05-10 23:11 ` Junio C Hamano 2022-05-10 23:25 ` Junio C Hamano 2022-05-11 14:04 ` Carlo Arenas 2022-05-11 15:29 ` Junio C Hamano 2022-05-13 1:00 ` [PATCH v5 0/4] fix `sudo make install` regression in maint Carlo Marcelo Arenas Belón 2022-05-13 1:00 ` [PATCH v5 1/4] t: regression git needs safe.directory when using sudo Carlo Marcelo Arenas Belón 2022-06-03 12:12 ` SZEDER Gábor 2022-05-13 1:00 ` [PATCH v5 2/4] git-compat-util: avoid failing dir ownership checks if running privileged Carlo Marcelo Arenas Belón 2022-06-03 11:05 ` SZEDER Gábor 2022-06-03 16:54 ` Junio C Hamano 2022-06-03 17:34 ` SZEDER Gábor 2022-05-13 1:00 ` [PATCH v5 3/4] t0034: add negative tests and allow git init to mostly work under sudo Carlo Marcelo Arenas Belón 2022-05-13 1:20 ` Junio C Hamano 2022-05-14 14:36 ` Carlo Arenas 2022-05-15 16:54 ` Junio C Hamano 2022-05-15 19:21 ` Carlo Arenas 2022-05-16 5:27 ` Junio C Hamano 2022-05-16 13:07 ` Carlo Marcelo Arenas Belón 2022-05-16 16:25 ` Junio C Hamano 2022-05-13 1:00 ` [PATCH v5 4/4] git-compat-util: allow root to access both SUDO_UID and root owned Carlo Marcelo Arenas Belón 2022-06-15 14:02 ` Johannes Schindelin 2022-06-17 14:26 ` Carlo Arenas 2022-06-17 16:00 ` Junio C Hamano 2022-06-17 20:23 ` [PATCH v6] " Carlo Marcelo Arenas Belón 2022-06-17 21:02 ` Junio C Hamano
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 List information: http://vger.kernel.org/majordomo-info.html * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220507115701.nozz53t4j52r2xon@carlos-mbp.lan \ --to=carenas@gmail.com \ --cc=git@vger.kernel.org \ --cc=gitster@pobox.com \ --cc=phillip.wood123@gmail.com \ --subject='Re: [PATCH v2 3/3] t: add tests for safe.directory when running with sudo' \ /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
Code repositories for project(s) associated with this inbox: https://80x24.org/mirrors/git.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).