Files
openwrt_yocto/poky/meta/recipes-multimedia/libpng/files/CVE-2025-65018-01.patch
T
francis.wang 4c86c082a2 Initial commit: OpenWrt-Yocto monorepo
Combine poky (Yocto scarthgap), meta-openembedded (scarthgap), and
meta-openwrt into a single repository.

Components:
- poky/             Yocto core framework (BitBake + OE-Core)
- meta-openembedded/ Community layers (meta-oe, meta-python, meta-networking)
- meta-openwrt/     OpenWrt customization layer
- setup-env.sh      One-click build environment setup
- README.md         Project documentation
2026-07-11 13:28:01 +08:00

61 lines
2.5 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
From 16b5e3823918840aae65c0a6da57c78a5a496a4d Mon Sep 17 00:00:00 2001
From: Cosmin Truta <ctruta@gmail.com>
Date: Mon, 17 Nov 2025 20:38:47 +0200
Subject: [PATCH] Fix a buffer overflow in `png_image_finish_read`
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Reject bit-depth mismatches between IHDR and the requested output
format. When a 16-bit PNG is processed with an 8-bit output format
request, `png_combine_row` writes using the IHDR depth before
transformation, causing writes beyond the buffer allocated via
`PNG_IMAGE_SIZE(image)`.
The validation establishes a safe API contract where
`PNG_IMAGE_SIZE(image)` is guaranteed to be sufficient across the
transformation pipeline.
Example overflow (32×32 pixels, 16-bit RGB to 8-bit RGBA):
- Input format: 16 bits/channel × 3 channels = 6144 bytes
- Output buffer: 8 bits/channel × 4 channels = 4096 bytes
- Overflow: 6144 bytes - 4096 bytes = 2048 bytes
Larger images produce proportionally larger overflows. For example,
for 256×256 pixels, the overflow is 131072 bytes.
Reported-by: yosiimich <yosiimich@users.noreply.github.com>
CVE: CVE-2025-65018
Upstream-Status: Backport [https://github.com/pnggroup/libpng/commit/16b5e3823918840aae65c0a6da57c78a5a496a4d]
Signed-off-by: Peter Marko <peter.marko@siemens.com>
---
pngread.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/pngread.c b/pngread.c
index 212afb7d2..92571ec33 100644
--- a/pngread.c
+++ b/pngread.c
@@ -4166,6 +4166,20 @@ png_image_finish_read(png_imagep image, png_const_colorp background,
int result;
png_image_read_control display;
+ /* Reject bit depth mismatches to avoid buffer overflows. */
+ png_uint_32 ihdr_bit_depth =
+ image->opaque->png_ptr->bit_depth;
+ int requested_linear =
+ (image->format & PNG_FORMAT_FLAG_LINEAR) != 0;
+ if (ihdr_bit_depth == 16 && !requested_linear)
+ return png_image_error(image,
+ "png_image_finish_read: "
+ "16-bit PNG must use 16-bit output format");
+ if (ihdr_bit_depth < 16 && requested_linear)
+ return png_image_error(image,
+ "png_image_finish_read: "
+ "8-bit PNG must not use 16-bit output format");
+
memset(&display, 0, (sizeof display));
display.image = image;
display.buffer = buffer;