[PATCH 1/2] Fix underallocation of abort_msg_s struct (CVE-2025-0395)
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Wed Jan 22 13:14:03 GMT 2025
On 22/01/25 10:09, Siddhesh Poyarekar wrote:
> Include the space needed to store the length of the message itself, in
> addition to the message string. This resolves BZ #32582.
>
> Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
LGTM, thanks. I plan to consolidate the assert implementation to avoid
allocate memory, but it can wait for 2.42.
Reviewed: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> ---
> assert/assert.c | 4 +++-
> sysdeps/posix/libc_fatal.c | 4 +++-
> 2 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/assert/assert.c b/assert/assert.c
> index db90b8d7ef..d21d76fa62 100644
> --- a/assert/assert.c
> +++ b/assert/assert.c
> @@ -17,6 +17,7 @@
>
> #include <intprops.h>
> #include <ldsodefs.h>
> +#include <libc-pointer-arith.h>
> #include <libintl.h>
> #include <libio/iolibio.h>
> #include <setvmaname.h>
> @@ -60,7 +61,8 @@ __assert_fail_base (const char *fmt, const char *assertion, const char *file,
> (void) __fxprintf (NULL, "%s", str);
> (void) fflush (stderr);
>
> - total = (total + 1 + GLRO(dl_pagesize) - 1) & ~(GLRO(dl_pagesize) - 1);
> + total = ALIGN_UP (total + sizeof (struct abort_msg_s) + 1,
> + GLRO(dl_pagesize));
> struct abort_msg_s *buf = __mmap (NULL, total, PROT_READ | PROT_WRITE,
> MAP_ANON | MAP_PRIVATE, -1, 0);
> if (__glibc_likely (buf != MAP_FAILED))
> diff --git a/sysdeps/posix/libc_fatal.c b/sysdeps/posix/libc_fatal.c
> index eb72a380eb..d90cc6c681 100644
> --- a/sysdeps/posix/libc_fatal.c
> +++ b/sysdeps/posix/libc_fatal.c
> @@ -20,6 +20,7 @@
> #include <errno.h>
> #include <fcntl.h>
> #include <ldsodefs.h>
> +#include <libc-pointer-arith.h>
> #include <paths.h>
> #include <stdarg.h>
> #include <stdbool.h>
> @@ -105,7 +106,8 @@ __libc_message_impl (const char *fmt, ...)
> {
> WRITEV_FOR_FATAL (fd, iov, iovcnt, total);
>
> - total = (total + 1 + GLRO(dl_pagesize) - 1) & ~(GLRO(dl_pagesize) - 1);
> + total = ALIGN_UP (total + sizeof (struct abort_msg_s) + 1,
> + GLRO(dl_pagesize));
> struct abort_msg_s *buf = __mmap (NULL, total,
> PROT_READ | PROT_WRITE,
> MAP_ANON | MAP_PRIVATE, -1, 0);
More information about the Libc-alpha
mailing list