diff options
| author | Ankur Tyagi <ankur.tyagi85@gmail.com> | 2025-12-09 08:02:33 +1300 |
|---|---|---|
| committer | Anuj Mittal <anuj.mittal@oss.qualcomm.com> | 2025-12-11 08:00:53 +0530 |
| commit | 91ea5aa570d289605f5ef4822840a104c7ded631 (patch) | |
| tree | 3b42be790965ea766e2c4d46e6e31e3a87d18f59 /meta-multimedia/recipes-multimedia | |
| parent | b7fd86557f787334c0224d079f2f843277566f9c (diff) | |
| download | meta-openembedded-91ea5aa570d289605f5ef4822840a104c7ded631.tar.gz | |
libavif: patch CVE-2025-48174
Details https://nvd.nist.gov/vuln/detail/CVE-2025-48174
Signed-off-by: Ankur Tyagi <ankur.tyagi85@gmail.com>
Signed-off-by: Anuj Mittal <anuj.mittal@oss.qualcomm.com>
Diffstat (limited to 'meta-multimedia/recipes-multimedia')
5 files changed, 163 insertions, 1 deletions
diff --git a/meta-multimedia/recipes-multimedia/libavif/libavif/CVE-2025-48174_1.patch b/meta-multimedia/recipes-multimedia/libavif/libavif/CVE-2025-48174_1.patch new file mode 100644 index 0000000000..c9bee6c62a --- /dev/null +++ b/meta-multimedia/recipes-multimedia/libavif/libavif/CVE-2025-48174_1.patch | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | From d9c933e79109becdbc6be9ddf9fbe00be03d533e Mon Sep 17 00:00:00 2001 | ||
| 2 | From: DanisJiang <43723722+DanisJiang@users.noreply.github.com> | ||
| 3 | Date: Fri, 18 Apr 2025 17:31:53 +0800 | ||
| 4 | Subject: [PATCH] Add integer overflow checks to makeRoom. | ||
| 5 | |||
| 6 | CVE: CVE-2025-48174 | ||
| 7 | Upstream-Status: Backport [https://github.com/AOMediaCodec/libavif/commit/e5fdefe7d1776e6c4cf1703c163a8c0535599029] | ||
| 8 | (cherry picked from commit e5fdefe7d1776e6c4cf1703c163a8c0535599029) | ||
| 9 | Signed-off-by: Ankur Tyagi <ankur.tyagi85@gmail.com> | ||
| 10 | --- | ||
| 11 | src/stream.c | 3 +++ | ||
| 12 | 1 file changed, 3 insertions(+) | ||
| 13 | |||
| 14 | diff --git a/src/stream.c b/src/stream.c | ||
| 15 | index c85ca31b..70e8bfaa 100644 | ||
| 16 | --- a/src/stream.c | ||
| 17 | +++ b/src/stream.c | ||
| 18 | @@ -320,6 +320,9 @@ avifBool avifROStreamReadAndEnforceVersion(avifROStream * stream, uint8_t enforc | ||
| 19 | static avifResult makeRoom(avifRWStream * stream, size_t size) | ||
| 20 | { | ||
| 21 | size_t neededSize = stream->offset + size; | ||
| 22 | + if (neededSize < stream->offset) { | ||
| 23 | + return AVIF_RESULT_INVALID_ARGUMENT; | ||
| 24 | + } | ||
| 25 | size_t newSize = stream->raw->size; | ||
| 26 | while (newSize < neededSize) { | ||
| 27 | newSize += AVIF_STREAM_BUFFER_INCREMENT; | ||
diff --git a/meta-multimedia/recipes-multimedia/libavif/libavif/CVE-2025-48174_2.patch b/meta-multimedia/recipes-multimedia/libavif/libavif/CVE-2025-48174_2.patch new file mode 100644 index 0000000000..4ba27d5a57 --- /dev/null +++ b/meta-multimedia/recipes-multimedia/libavif/libavif/CVE-2025-48174_2.patch | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | From 5bd6529e7e729718ac2d164859965771466c8410 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: DanisJiang <43723722+DanisJiang@users.noreply.github.com> | ||
| 3 | Date: Mon, 21 Apr 2025 10:45:59 +0800 | ||
| 4 | Subject: [PATCH] Add integer overflow check to makeRoom. | ||
| 5 | |||
| 6 | CVE: CVE-2025-48174 | ||
| 7 | Upstream-Status: Backport [https://github.com/AOMediaCodec/libavif/commit/50a743062938a3828581d725facc9c2b92a1d109] | ||
| 8 | (cherry picked from commit 50a743062938a3828581d725facc9c2b92a1d109) | ||
| 9 | Signed-off-by: Ankur Tyagi <ankur.tyagi85@gmail.com> | ||
| 10 | --- | ||
| 11 | src/stream.c | 6 +++--- | ||
| 12 | 1 file changed, 3 insertions(+), 3 deletions(-) | ||
| 13 | |||
| 14 | diff --git a/src/stream.c b/src/stream.c | ||
| 15 | index 70e8bfaa..893ba3f0 100644 | ||
| 16 | --- a/src/stream.c | ||
| 17 | +++ b/src/stream.c | ||
| 18 | @@ -319,10 +319,10 @@ avifBool avifROStreamReadAndEnforceVersion(avifROStream * stream, uint8_t enforc | ||
| 19 | #define AVIF_STREAM_BUFFER_INCREMENT (1024 * 1024) | ||
| 20 | static avifResult makeRoom(avifRWStream * stream, size_t size) | ||
| 21 | { | ||
| 22 | - size_t neededSize = stream->offset + size; | ||
| 23 | - if (neededSize < stream->offset) { | ||
| 24 | - return AVIF_RESULT_INVALID_ARGUMENT; | ||
| 25 | + if (size > SIZE_MAX - stream->offset) { | ||
| 26 | + return AVIF_RESULT_OUT_OF_MEMORY; | ||
| 27 | } | ||
| 28 | + size_t neededSize = stream->offset + size; | ||
| 29 | size_t newSize = stream->raw->size; | ||
| 30 | while (newSize < neededSize) { | ||
| 31 | newSize += AVIF_STREAM_BUFFER_INCREMENT; | ||
diff --git a/meta-multimedia/recipes-multimedia/libavif/libavif/CVE-2025-48174_3.patch b/meta-multimedia/recipes-multimedia/libavif/libavif/CVE-2025-48174_3.patch new file mode 100644 index 0000000000..2fddbeeb81 --- /dev/null +++ b/meta-multimedia/recipes-multimedia/libavif/libavif/CVE-2025-48174_3.patch | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | From 0b0b88596f21821af605ed316e996739820d3b17 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: "Danis Jiang (Yuhao Jiang)" | ||
| 3 | <43723722+DanisJiang@users.noreply.github.com> | ||
| 4 | Date: Thu, 24 Apr 2025 10:39:19 +0800 | ||
| 5 | Subject: [PATCH] Fix format errors | ||
| 6 | |||
| 7 | CVE: CVE-2025-48174 | ||
| 8 | Upstream-Status: Backport [https://github.com/AOMediaCodec/libavif/commit/c9f1bea437f21cb78f9919c332922a3b0ba65e11] | ||
| 9 | (cherry picked from commit c9f1bea437f21cb78f9919c332922a3b0ba65e11) | ||
| 10 | Signed-off-by: Ankur Tyagi <ankur.tyagi85@gmail.com> | ||
| 11 | --- | ||
| 12 | src/stream.c | 2 +- | ||
| 13 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
| 14 | |||
| 15 | diff --git a/src/stream.c b/src/stream.c | ||
| 16 | index 893ba3f0..b38c93c6 100644 | ||
| 17 | --- a/src/stream.c | ||
| 18 | +++ b/src/stream.c | ||
| 19 | @@ -320,7 +320,7 @@ avifBool avifROStreamReadAndEnforceVersion(avifROStream * stream, uint8_t enforc | ||
| 20 | static avifResult makeRoom(avifRWStream * stream, size_t size) | ||
| 21 | { | ||
| 22 | if (size > SIZE_MAX - stream->offset) { | ||
| 23 | - return AVIF_RESULT_OUT_OF_MEMORY; | ||
| 24 | + return AVIF_RESULT_OUT_OF_MEMORY; | ||
| 25 | } | ||
| 26 | size_t neededSize = stream->offset + size; | ||
| 27 | size_t newSize = stream->raw->size; | ||
diff --git a/meta-multimedia/recipes-multimedia/libavif/libavif/CVE-2025-48174_4.patch b/meta-multimedia/recipes-multimedia/libavif/libavif/CVE-2025-48174_4.patch new file mode 100644 index 0000000000..ecdef9e5bc --- /dev/null +++ b/meta-multimedia/recipes-multimedia/libavif/libavif/CVE-2025-48174_4.patch | |||
| @@ -0,0 +1,72 @@ | |||
| 1 | From 083ce38f549183a3d74a0a6d2dc4d3f4b195867f Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Wan-Teh Chang <wtc@google.com> | ||
| 3 | Date: Sun, 27 Apr 2025 14:34:35 -0700 | ||
| 4 | Subject: [PATCH] Add another integer overflow check to makeRoom | ||
| 5 | |||
| 6 | Replace the while loop with a formula in makeRoom. | ||
| 7 | |||
| 8 | Test the integer overflow checks in makeRoom. | ||
| 9 | |||
| 10 | See https://github.com/AOMediaCodec/libavif/pull/2768. | ||
| 11 | |||
| 12 | CVE: CVE-2025-48174 | ||
| 13 | Upstream-Status: Backport [https://github.com/AOMediaCodec/libavif/commit/32eae7c5c1e72d9999cb31d02e333b6a76029bad] | ||
| 14 | (cherry picked from commit 32eae7c5c1e72d9999cb31d02e333b6a76029bad) | ||
| 15 | Signed-off-by: Ankur Tyagi <ankur.tyagi85@gmail.com> | ||
| 16 | --- | ||
| 17 | src/stream.c | 16 +++++++++------- | ||
| 18 | tests/gtest/avifstreamtest.cc | 13 +++++++++++++ | ||
| 19 | 2 files changed, 22 insertions(+), 7 deletions(-) | ||
| 20 | |||
| 21 | diff --git a/src/stream.c b/src/stream.c | ||
| 22 | index b38c93c6..e79e9691 100644 | ||
| 23 | --- a/src/stream.c | ||
| 24 | +++ b/src/stream.c | ||
| 25 | @@ -319,14 +319,16 @@ avifBool avifROStreamReadAndEnforceVersion(avifROStream * stream, uint8_t enforc | ||
| 26 | #define AVIF_STREAM_BUFFER_INCREMENT (1024 * 1024) | ||
| 27 | static avifResult makeRoom(avifRWStream * stream, size_t size) | ||
| 28 | { | ||
| 29 | - if (size > SIZE_MAX - stream->offset) { | ||
| 30 | - return AVIF_RESULT_OUT_OF_MEMORY; | ||
| 31 | - } | ||
| 32 | - size_t neededSize = stream->offset + size; | ||
| 33 | - size_t newSize = stream->raw->size; | ||
| 34 | - while (newSize < neededSize) { | ||
| 35 | - newSize += AVIF_STREAM_BUFFER_INCREMENT; | ||
| 36 | + AVIF_CHECKERR(size <= SIZE_MAX - stream->offset, AVIF_RESULT_OUT_OF_MEMORY); | ||
| 37 | + size_t newSize = stream->offset + size; | ||
| 38 | + if (newSize <= stream->raw->size) { | ||
| 39 | + return AVIF_RESULT_OK; | ||
| 40 | } | ||
| 41 | + // Make newSize a multiple of AVIF_STREAM_BUFFER_INCREMENT. | ||
| 42 | + size_t rem = newSize % AVIF_STREAM_BUFFER_INCREMENT; | ||
| 43 | + size_t padding = (rem == 0) ? 0 : AVIF_STREAM_BUFFER_INCREMENT - rem; | ||
| 44 | + AVIF_CHECKERR(newSize <= SIZE_MAX - padding, AVIF_RESULT_OUT_OF_MEMORY); | ||
| 45 | + newSize += padding; | ||
| 46 | return avifRWDataRealloc(stream->raw, newSize); | ||
| 47 | } | ||
| 48 | |||
| 49 | diff --git a/tests/gtest/avifstreamtest.cc b/tests/gtest/avifstreamtest.cc | ||
| 50 | index af94bb82..e768939b 100644 | ||
| 51 | --- a/tests/gtest/avifstreamtest.cc | ||
| 52 | +++ b/tests/gtest/avifstreamtest.cc | ||
| 53 | @@ -204,6 +204,19 @@ TEST(StreamTest, Roundtrip) { | ||
| 54 | EXPECT_FALSE(avifROStreamSkip(&ro_stream, /*byteCount=*/1)); | ||
| 55 | } | ||
| 56 | |||
| 57 | +// Test the overflow checks in the makeRoom() function in src/stream.c. | ||
| 58 | +TEST(StreamTest, OverflowChecksInMakeRoom) { | ||
| 59 | + testutil::AvifRwData rw_data; | ||
| 60 | + avifRWStream rw_stream; | ||
| 61 | + avifRWStreamStart(&rw_stream, &rw_data); | ||
| 62 | + const char ten_bytes[10] = {0}; | ||
| 63 | + EXPECT_EQ(avifRWStreamWrite(&rw_stream, ten_bytes, 10), AVIF_RESULT_OK); | ||
| 64 | + EXPECT_EQ(avifRWStreamWrite(&rw_stream, ten_bytes, SIZE_MAX - 9), | ||
| 65 | + AVIF_RESULT_OUT_OF_MEMORY); | ||
| 66 | + EXPECT_EQ(avifRWStreamWrite(&rw_stream, ten_bytes, SIZE_MAX - 10), | ||
| 67 | + AVIF_RESULT_OUT_OF_MEMORY); | ||
| 68 | +} | ||
| 69 | + | ||
| 70 | //------------------------------------------------------------------------------ | ||
| 71 | |||
| 72 | } // namespace | ||
diff --git a/meta-multimedia/recipes-multimedia/libavif/libavif_1.0.1.bb b/meta-multimedia/recipes-multimedia/libavif/libavif_1.0.1.bb index 8ddd16ee2a..bca6e40409 100644 --- a/meta-multimedia/recipes-multimedia/libavif/libavif_1.0.1.bb +++ b/meta-multimedia/recipes-multimedia/libavif/libavif_1.0.1.bb | |||
| @@ -4,7 +4,12 @@ SECTION = "libs" | |||
| 4 | LICENSE = "BSD-2-Clause" | 4 | LICENSE = "BSD-2-Clause" |
| 5 | LIC_FILES_CHKSUM = "file://LICENSE;md5=c528b75b07425b5c1d2e34de98c397b5" | 5 | LIC_FILES_CHKSUM = "file://LICENSE;md5=c528b75b07425b5c1d2e34de98c397b5" |
| 6 | 6 | ||
| 7 | SRC_URI = "git://github.com/AOMediaCodec/libavif.git;protocol=https;branch=v1.0.x" | 7 | SRC_URI = "git://github.com/AOMediaCodec/libavif.git;protocol=https;branch=v1.0.x \ |
| 8 | file://CVE-2025-48174_1.patch \ | ||
| 9 | file://CVE-2025-48174_2.patch \ | ||
| 10 | file://CVE-2025-48174_3.patch \ | ||
| 11 | file://CVE-2025-48174_4.patch \ | ||
| 12 | " | ||
| 8 | 13 | ||
| 9 | S = "${WORKDIR}/git" | 14 | S = "${WORKDIR}/git" |
| 10 | SRCREV = "d1c26facaf5a8a97919ceee06814d05d10e25622" | 15 | SRCREV = "d1c26facaf5a8a97919ceee06814d05d10e25622" |
