realpath: Avoid overwriting preexisting error (CVE-2021-3998)

Set errno and failure for paths that are too long only if no other error
occurred earlier.

Related: BZ #28770

Reviewed-by: Andreas Schwab <schwab@linux-m68k.org>
Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
(cherry picked from commit 84d2d0fe20)
This commit is contained in:
Siddhesh Poyarekar 2022-01-24 21:36:41 +05:30
parent 472e799a5f
commit d084965adc

View File

@ -404,7 +404,7 @@ error:
{ {
if (dest - rname <= get_path_max ()) if (dest - rname <= get_path_max ())
rname = strcpy (resolved, rname); rname = strcpy (resolved, rname);
else else if (!failed)
{ {
failed = true; failed = true;
__set_errno (ENAMETOOLONG); __set_errno (ENAMETOOLONG);