From d2abde53033d58b6665becd75f854ad87aba33f6 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Tue, 31 Mar 2026 15:43:43 +0100 Subject: libreboot-utils: stricter errno handling where possible, try not to clobber sys errno. override it only when relatively safe. also: when a syscall succeeds, it may set errno. this is rare, but permitted (nothing specified against it in specs, and the specs say that errno is undefined on success). i'm not libc, but i'm wrapping around it, so i need to be careful in how i handle the errno value. also: i removed the requirement for directories to be executable, in mkhtemp.c, because this isn't required and will only break certain setups. in world_writeable and sticky, i made the checks stricter: the faccessat check was being skipped on some paths, so i've closed that loophole now. i also generally cleaned up some code, as part of the errno handling refactoring, where it made sense to do so, plus a few other bits of code cleanup. Signed-off-by: Leah Rowe --- util/libreboot-utils/lib/num.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'util/libreboot-utils/lib/num.c') diff --git a/util/libreboot-utils/lib/num.c b/util/libreboot-utils/lib/num.c index e13a8853..ad349173 100644 --- a/util/libreboot-utils/lib/num.c +++ b/util/libreboot-utils/lib/num.c @@ -28,8 +28,6 @@ unsigned short hextonum(char ch_s) { - int saved_errno = errno; - unsigned char ch; size_t rval; @@ -43,8 +41,8 @@ hextonum(char ch_s) if ((unsigned int)(ch - 'a') <= 5) return ch - 'a' + 10; - if (ch == '?' || ch == 'x') - return rsize(16); /* <-- with rejection sampling! */ + if (ch == '?' || ch == 'x') /* random */ + return (short)rsize(16); /* <-- with rejection sampling! */ return 16; } -- cgit v1.2.1