From 016e08ca07f86af9e0131a908a2df116bcb9a48e Mon Sep 17 00:00:00 2001 From: Martin Schwenke Date: Fri, 5 Jun 2020 22:05:42 +1000 Subject: [PATCH 3/3] util: Reallocate larger buffer if getpwuid_r() returns ERANGE Signed-off-by: Martin Schwenke Reviewed-by: Volker Lendecke Reviewed-by: Bjoern Jacke Autobuild-User(master): Martin Schwenke Autobuild-Date(master): Tue Jun 9 21:07:24 UTC 2020 on sn-devel-184 (cherry picked from commit ddac6b2eb4adaec8fc5e25ca07387d2b9417764c) Upstream-Status:Backport [https://gitlab.com/samba-team/samba/-/commit/016e08ca07f86af9e0131a908a2df116bcb9a48e] Signed-off-by: Yi Zhao --- lib/util/util_paths.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/util/util_paths.c b/lib/util/util_paths.c index 9bc6df37e5d..72cc0aab8de 100644 --- a/lib/util/util_paths.c +++ b/lib/util/util_paths.c @@ -86,6 +86,19 @@ static char *get_user_home_dir(TALLOC_CTX *mem_ctx) } rc = getpwuid_r(getuid(), &pwd, buf, len, &pwdbuf); + while (rc == ERANGE) { + size_t newlen = 2 * len; + if (newlen < len) { + /* Overflow */ + goto done; + } + len = newlen; + buf = talloc_realloc_size(mem_ctx, buf, len); + if (buf == NULL) { + goto done; + } + rc = getpwuid_r(getuid(), &pwd, buf, len, &pwdbuf); + } if (rc != 0 || pwdbuf == NULL ) { const char *szPath = getenv("HOME"); if (szPath == NULL) { -- 2.17.1