summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Marko <peter.marko@siemens.com>2025-11-27 19:03:23 +0100
committerSteve Sakoman <steve@sakoman.com>2025-12-05 07:13:42 -0800
commiteed16ae61397d8d77af378641253ffebf9cfee4d (patch)
tree6dd57f2a42eb4cee1a308825067a24b893404f58
parentb0b3210686a7c0e99d3c88ef1cc9a337d0a48afd (diff)
downloadpoky-eed16ae61397d8d77af378641253ffebf9cfee4d.tar.gz
libpng: patch CVE-2025-64506
Pick commit per NVD report. (From OE-Core rev: f3bdbd782eed2b597927df489a7d38a22fbba5ed) Signed-off-by: Peter Marko <peter.marko@siemens.com> Signed-off-by: Steve Sakoman <steve@sakoman.com>
-rw-r--r--meta/recipes-multimedia/libpng/files/CVE-2025-64506.patch57
-rw-r--r--meta/recipes-multimedia/libpng/libpng_1.6.42.bb1
2 files changed, 58 insertions, 0 deletions
diff --git a/meta/recipes-multimedia/libpng/files/CVE-2025-64506.patch b/meta/recipes-multimedia/libpng/files/CVE-2025-64506.patch
new file mode 100644
index 0000000000..dc7fe00601
--- /dev/null
+++ b/meta/recipes-multimedia/libpng/files/CVE-2025-64506.patch
@@ -0,0 +1,57 @@
1From 2bd84c019c300b78e811743fbcddb67c9d9bf821 Mon Sep 17 00:00:00 2001
2From: Cosmin Truta <ctruta@gmail.com>
3Date: Fri, 7 Nov 2025 22:40:05 +0200
4Subject: [PATCH] Fix a heap buffer overflow in `png_write_image_8bit`
5
6The condition guarding the pre-transform path incorrectly allowed 8-bit
7input data to enter `png_write_image_8bit` which expects 16-bit input.
8This caused out-of-bounds reads when processing 8-bit grayscale+alpha
9images (GitHub #688), or 8-bit RGB or RGB+alpha images (GitHub #746),
10with the `convert_to_8bit` flag set (an invalid combination that should
11bypass the pre-transform path).
12
13The second part of the condition, i.e.
14
15 colormap == 0 && convert_to_8bit != 0
16
17failed to verify that input was 16-bit, i.e.
18
19 linear != 0
20
21contradicting the comment "This only applies when the input is 16-bit".
22
23The fix consists in restructuring the condition to ensure both the
24`alpha` path and the `convert_to_8bit` path require linear (16-bit)
25input. The corrected condition, i.e.
26
27 linear != 0 && (alpha != 0 || display->convert_to_8bit != 0)
28
29matches the expectation of the `png_write_image_8bit` function and
30prevents treating 8-bit buffers as 16-bit data.
31
32Reported-by: Samsung-PENTEST <Samsung-PENTEST@users.noreply.github.com>
33Reported-by: weijinjinnihao <weijinjinnihao@users.noreply.github.com>
34Analyzed-by: degrigis <degrigis@users.noreply.github.com>
35Reviewed-by: John Bowler <jbowler@acm.org>
36
37CVE: CVE-2025-64506
38Upstream-Status: Backport [https://github.com/pnggroup/libpng/commit/2bd84c019c300b78e811743fbcddb67c9d9bf821]
39Signed-off-by: Peter Marko <peter.marko@siemens.com>
40---
41 pngwrite.c | 3 +--
42 1 file changed, 1 insertion(+), 2 deletions(-)
43
44diff --git a/pngwrite.c b/pngwrite.c
45index 35a5d17b6..83148960e 100644
46--- a/pngwrite.c
47+++ b/pngwrite.c
48@@ -2142,8 +2142,7 @@ png_image_write_main(png_voidp argument)
49 * before it is written. This only applies when the input is 16-bit and
50 * either there is an alpha channel or it is converted to 8-bit.
51 */
52- if ((linear != 0 && alpha != 0 ) ||
53- (colormap == 0 && display->convert_to_8bit != 0))
54+ if (linear != 0 && (alpha != 0 || display->convert_to_8bit != 0))
55 {
56 png_bytep row = png_voidcast(png_bytep, png_malloc(png_ptr,
57 png_get_rowbytes(png_ptr, info_ptr)));
diff --git a/meta/recipes-multimedia/libpng/libpng_1.6.42.bb b/meta/recipes-multimedia/libpng/libpng_1.6.42.bb
index dec78e568c..ab043e3338 100644
--- a/meta/recipes-multimedia/libpng/libpng_1.6.42.bb
+++ b/meta/recipes-multimedia/libpng/libpng_1.6.42.bb
@@ -15,6 +15,7 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/project/${BPN}/${BPN}${LIBV}/${PV}/${BP}.tar.xz
15 file://CVE-2025-64505-01.patch \ 15 file://CVE-2025-64505-01.patch \
16 file://CVE-2025-64505-02.patch \ 16 file://CVE-2025-64505-02.patch \
17 file://CVE-2025-64505-03.patch \ 17 file://CVE-2025-64505-03.patch \
18 file://CVE-2025-64506.patch \
18" 19"
19 20
20SRC_URI[sha256sum] = "c919dbc11f4c03b05aba3f8884d8eb7adfe3572ad228af972bb60057bdb48450" 21SRC_URI[sha256sum] = "c919dbc11f4c03b05aba3f8884d8eb7adfe3572ad228af972bb60057bdb48450"