Backport fix for CVE-2022-44638

pixman < 0.42.2 is affected by an out-of-bounds write error in the
`rasterize_edges_8()` function due to an integer overflow in the
`pixman_sample_floor_y()` function.

For more information please check the upstream bug report [1].

This patch backports commit a1f88e842e02 ("Avoid integer overflow
leading to out-of-bounds write") [2] to fix CVE-2022-44638.

In order to test and validate the fix, a reproducer can be found in the
original bug report [3] and compiled with the following command:

    $ gcc -o poc poc.c -ldl -fsanitize=address \
      $(pkg-config --cflags --libs pixman-1)

[1] https://gitlab.freedesktop.org/pixman/pixman/-/issues/63
[2] a1f88e842e
[3] https://gitlab.freedesktop.org/pixman/pixman/uploads/a55795e36afc03445ed838b0fda786f9/poc.c
Resolves: https://issues.redhat.com/browse/RHEL-7854
This commit is contained in:
José Expósito 2023-10-04 10:59:02 +02:00
parent aae78bea47
commit 046693e14b
2 changed files with 34 additions and 1 deletions

View File

@ -0,0 +1,29 @@
From a1f88e842e0216a5b4df1ab023caebe33c101395 Mon Sep 17 00:00:00 2001
From: Matt Turner <mattst88@gmail.com>
Date: Wed, 2 Nov 2022 12:07:32 -0400
Subject: [PATCH] Avoid integer overflow leading to out-of-bounds write
Thanks to Maddie Stone and Google's Project Zero for discovering this
issue, providing a proof-of-concept, and a great analysis.
Closes: https://gitlab.freedesktop.org/pixman/pixman/-/issues/63
---
pixman/pixman-trap.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pixman/pixman-trap.c b/pixman/pixman-trap.c
index 91766fd..7560405 100644
--- a/pixman/pixman-trap.c
+++ b/pixman/pixman-trap.c
@@ -74,7 +74,7 @@ pixman_sample_floor_y (pixman_fixed_t y,
if (f < Y_FRAC_FIRST (n))
{
- if (pixman_fixed_to_int (i) == 0x8000)
+ if (pixman_fixed_to_int (i) == 0xffff8000)
{
f = 0; /* saturate */
}
--
2.41.0

View File

@ -3,7 +3,7 @@
Name: pixman Name: pixman
Version: 0.38.4 Version: 0.38.4
Release: 3%{?dist} Release: 4%{?dist}
Summary: Pixel manipulation library Summary: Pixel manipulation library
Group: System Environment/Libraries Group: System Environment/Libraries
@ -18,6 +18,7 @@ Source1: make-pixman-snapshot.sh
Patch0: 0001-Initialize-temporary-buffers-in-general_composite_re.patch Patch0: 0001-Initialize-temporary-buffers-in-general_composite_re.patch
Patch1: 0001-Fix-bilinear-filter-computation-in-wide-pipeline.patch Patch1: 0001-Fix-bilinear-filter-computation-in-wide-pipeline.patch
Patch2: 0001-Avoid-integer-overflow-leading-to-out-of-bounds-writ.patch
BuildRequires: automake autoconf libtool BuildRequires: automake autoconf libtool
BuildRequires: gcc BuildRequires: gcc
@ -69,6 +70,9 @@ make check %{?_smp_mflags} V=1
%{_libdir}/pkgconfig/pixman-1.pc %{_libdir}/pkgconfig/pixman-1.pc
%changelog %changelog
* Wed Oct 04 2023 José Expósito <jexposit@redhat.com> - 0.38.4-4
- Backport fix for CVE-2022-44638
* Sat Sep 03 2022 Benjamin Gilbert <bgilbert@backtick.net> - 0.38.4-3 * Sat Sep 03 2022 Benjamin Gilbert <bgilbert@backtick.net> - 0.38.4-3
- Fix bilinear filter computation in wide pipeline - Fix bilinear filter computation in wide pipeline