From: Zbigniew Jędrzejewski-Szmek Date: Wed, 20 Mar 2019 08:33:27 +0000 (+0100) Subject: util-lib: use a fixed buffer size for terminal path X-Git-Tag: v242-rc1~61^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=30222f4b2c90dae73c012c1733b3ba46b9afd7a8;p=thirdparty%2Fsystemd.git util-lib: use a fixed buffer size for terminal path The loop around ttyname_r() makes it look like we use unbounded stack allocations. We know that that paths have a maximum size, so let's simplify the whole thing. Replaces #12043. --- diff --git a/src/basic/terminal-util.c b/src/basic/terminal-util.c index 4702e917324..ab8917ccc5c 100644 --- a/src/basic/terminal-util.c +++ b/src/basic/terminal-util.c @@ -891,33 +891,24 @@ bool on_tty(void) { } int getttyname_malloc(int fd, char **ret) { - size_t l = 100; + char path[PATH_MAX], *c; /* PATH_MAX is counted *with* the trailing NUL byte */ int r; assert(fd >= 0); assert(ret); - for (;;) { - char path[l]; - - r = ttyname_r(fd, path, sizeof(path)); - if (r == 0) { - char *c; + r = ttyname_r(fd, path, sizeof path); /* positive error */ + assert(r >= 0); + if (r == ERANGE) + return -ENAMETOOLONG; + if (r > 0) + return -r; - c = strdup(skip_dev_prefix(path)); - if (!c) - return -ENOMEM; - - *ret = c; - return 0; - } - - if (r != ERANGE) - return -r; - - l *= 2; - } + c = strdup(skip_dev_prefix(path)); + if (!c) + return -ENOMEM; + *ret = c; return 0; }