realpath: Set errno to ENAMETOOLONG for result larger than PATH_MAX [BZ #28770]
authorSiddhesh Poyarekar <siddhesh@sourceware.org>
Thu, 13 Jan 2022 05:58:36 +0000 (11:28 +0530)
committerSiddhesh Poyarekar <siddhesh@sourceware.org>
Fri, 21 Jan 2022 17:31:30 +0000 (23:01 +0530)
commitee8d5e33adb284601c00c94687bc907e10aec9bb
treec1e3b5584266640b915abcbd151032935b9695fb
parentfb7bff12e81c677a6622f724edd4d4987dd9d971
realpath: Set errno to ENAMETOOLONG for result larger than PATH_MAX [BZ #28770]

realpath returns an allocated string when the result exceeds PATH_MAX,
which is unexpected when its second argument is not NULL.  This results
in the second argument (resolved) being uninitialized and also results
in a memory leak since the caller expects resolved to be the same as the
returned value.

Return NULL and set errno to ENAMETOOLONG if the result exceeds
PATH_MAX.  This fixes [BZ #28770], which is CVE-2021-3998.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
NEWS
stdlib/Makefile
stdlib/canonicalize.c
stdlib/tst-realpath-toolong.c [new file with mode: 0644]