[PATCH 3/4] stdlib: Fix arithmetic overflows in realpath [BZ #26592]
Adhemerval Zanella
adhemerval.zanella@linaro.org
Tue Oct 27 12:59:38 GMT 2020
Ping.
On 10/09/2020 12:19, Adhemerval Zanella wrote:
> The realpath uses an end-of-array pointer 'rpath_limit', and makes
> invalid (overflowing) comparisons against it to catch overflow:
>
> 117 /* Find end of path component. */
> 118 if (dest + (end-start) >= rpath_limit)
>
> I could not see a easy way to stress this issue since it rely on how
> the input argument is layout in memory along with a large filename
> name that trigger the overflow comparison. However, the fix is
> simple enough where it simple reorganize arithmetic in the comparison.
>
> Checked on x86_64-linux-gnu and i686-linux-gnu.
> ---
> stdlib/canonicalize.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/stdlib/canonicalize.c b/stdlib/canonicalize.c
> index 6798ed8963..44a25a9a59 100644
> --- a/stdlib/canonicalize.c
> +++ b/stdlib/canonicalize.c
> @@ -136,7 +136,7 @@ __realpath (const char *name, char *resolved)
> if (dest[-1] != '/')
> *dest++ = '/';
>
> - if (dest + (end - start) >= rpath_limit)
> + if (end - start >= rpath_limit - dest)
> {
> ptrdiff_t dest_offset = dest - rpath;
> char *new_rpath;
>
More information about the Libc-alpha
mailing list