From cc8c43c4d688b53c7bec729872392dd74bb6c539 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 14 Aug 2024 07:53:00 -0600 Subject: [PATCH] Format ttydev as (signed) long long, not unsigned. Now that we parse ttydev as a long long it makes more sense to format it the same way. This completely avoids the sign extension issue on systems where dev_t is signed. --- config.h.in | 3 --- configure | 35 ----------------------------- configure.ac | 1 - src/regress/ttyname/check_ttyname.c | 16 +++++-------- src/sudo.c | 10 ++------- 5 files changed, 7 insertions(+), 58 deletions(-) diff --git a/config.h.in b/config.h.in index 2f98706749..531fe8efe0 100644 --- a/config.h.in +++ b/config.h.in @@ -1293,9 +1293,6 @@ /* Define to 1 if you want sudo to set $HOME in shell mode. */ #undef SHELL_SETS_HOME -/* The size of 'dev_t', as computed by sizeof. */ -#undef SIZEOF_DEV_T - /* The size of 'id_t', as computed by sizeof. */ #undef SIZEOF_ID_T diff --git a/configure b/configure index c44bad861a..18eb2bdf27 100755 --- a/configure +++ b/configure @@ -21003,41 +21003,6 @@ printf "%s\n" "$ac_cv_sizeof_long_long" >&6; } printf "%s\n" "#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long" >>confdefs.h -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of dev_t" >&5 -printf %s "checking size of dev_t... " >&6; } -if test ${ac_cv_sizeof_dev_t+y} -then : - printf %s "(cached) " >&6 -else case e in #( - e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (dev_t))" "ac_cv_sizeof_dev_t" "$ac_includes_default" -then : - -else case e in #( - e) if test "$ac_cv_type_dev_t" = yes; then - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (dev_t) -See 'config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_dev_t=0 - fi ;; -esac -fi - ;; -esac -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_dev_t" >&5 -printf "%s\n" "$ac_cv_sizeof_dev_t" >&6; } - - - -printf "%s\n" "#define SIZEOF_DEV_T $ac_cv_sizeof_dev_t" >>confdefs.h - - # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. diff --git a/configure.ac b/configure.ac index d48a596dc4..28b63ef0d8 100644 --- a/configure.ac +++ b/configure.ac @@ -2507,7 +2507,6 @@ SUDO_SOCK_SA_LEN SUDO_SOCK_SIN_LEN AC_CHECK_SIZEOF([long]) AC_CHECK_SIZEOF([long long]) -AC_CHECK_SIZEOF([dev_t]) AC_CHECK_SIZEOF([id_t]) AC_CHECK_SIZEOF([time_t]) AC_CHECK_SIZEOF([uid_t]) diff --git a/src/regress/ttyname/check_ttyname.c b/src/regress/ttyname/check_ttyname.c index 6dca0f7330..779f73612d 100644 --- a/src/regress/ttyname/check_ttyname.c +++ b/src/regress/ttyname/check_ttyname.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2013-2020, 2022 Todd C. Miller + * Copyright (c) 2013-2020, 2022, 2024 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -88,8 +88,7 @@ main(int argc, char *argv[]) /* Lookup tty name using kernel info if possible. */ ttydev = get_process_ttyname(pathbuf, sizeof(pathbuf)); if (ttydev != (dev_t)-1) { - char numbuf[STRLEN_MAX_UNSIGNED(unsigned long long) + 1]; - unsigned long long ullval; + char numbuf[STRLEN_MAX_SIGNED(long long) + 1]; const char *errstr; dev_t newdev; @@ -98,20 +97,15 @@ main(int argc, char *argv[]) /* Check that we can format a dev_t as a string and parse it. */ ntests++; -#if SIZEOF_DEV_T == SIZEOF_LONG - ullval = (unsigned long)ttydev; -#else - ullval = (unsigned long long)ttydev; -#endif - (void)snprintf(numbuf, sizeof(numbuf), "%llu", ullval); + (void)snprintf(numbuf, sizeof(numbuf), "%lld", (long long)ttydev); newdev = sudo_strtonum(numbuf, LLONG_MIN, LLONG_MAX, &errstr); if (errstr != NULL) { printf("%s: FAIL unable to parse device number %s: %s", getprogname(), numbuf, errstr); errors++; } else if (ttydev != newdev) { - printf("%s: FAIL device mismatch for %s, %s != %llu", - getprogname(), pathbuf, numbuf, ullval); + printf("%s: FAIL device mismatch for %s, %s != %lld", + getprogname(), pathbuf, numbuf, (long long)ttydev); errors++; } } diff --git a/src/sudo.c b/src/sudo.c index 514e33eab3..3700a79ee3 100644 --- a/src/sudo.c +++ b/src/sudo.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2009-2023 Todd C. Miller + * Copyright (c) 2009-2024 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -620,13 +620,7 @@ get_user_info(struct user_details *ud) ttydev = get_process_ttyname(path, sizeof(path)); if (ttydev != (dev_t)-1) { - int len; -#if SIZEOF_DEV_T == SIZEOF_LONG - len = asprintf(&info[++i], "ttydev=%lu", (unsigned long)ttydev); -#else - len = asprintf(&info[++i], "ttydev=%llu", (unsigned long long)ttydev); -#endif - if (len == -1) + if (asprintf(&info[++i], "ttydev=%lld", (long long)ttydev) == -1) goto oom; info[++i] = sudo_new_key_val("tty", path); if (info[i] == NULL)