!27 Fix CVE-2021-45944 CVE-2021-45949
Merge pull request !27 from 杨壮壮/openEuler-20.03-LTS-SP3
This commit is contained in:
commit
7386109f4d
45
backport-CVE-2021-45944.patch
Normal file
45
backport-CVE-2021-45944.patch
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
From 7861fcad13c497728189feafb41cd57b5b50ea25 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chris Liddell <chris.liddell@artifex.com>
|
||||||
|
Date: Fri, 12 Feb 2021 10:34:23 +0000
|
||||||
|
Subject: [PATCH] oss-fuzz 30715: Check stack limits after function evaluation.
|
||||||
|
|
||||||
|
During function result sampling, after the callout to the Postscript
|
||||||
|
interpreter, make sure there is enough stack space available before pushing
|
||||||
|
or popping entries.
|
||||||
|
|
||||||
|
In thise case, the Postscript procedure for the "function" is totally invalid
|
||||||
|
(as a function), and leaves the op stack in an unrecoverable state (as far as
|
||||||
|
function evaluation is concerned). We end up popping more entries off the
|
||||||
|
stack than are available.
|
||||||
|
|
||||||
|
To cope, add in stack limit checking to throw an appropriate error when this
|
||||||
|
happens.
|
||||||
|
---
|
||||||
|
psi/zfsample.c | 14 +++++++++++---
|
||||||
|
1 file changed, 11 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/psi/zfsample.c b/psi/zfsample.c
|
||||||
|
index 290809405d..652ae02c67 100644
|
||||||
|
--- a/psi/zfsample.c
|
||||||
|
+++ b/psi/zfsample.c
|
||||||
|
@@ -551,9 +551,17 @@ sampled_data_continue(i_ctx_t *i_ctx_p)
|
||||||
|
} else {
|
||||||
|
if (stack_depth_adjust) {
|
||||||
|
stack_depth_adjust -= num_out;
|
||||||
|
- push(O_STACK_PAD - stack_depth_adjust);
|
||||||
|
- for (i=0;i<O_STACK_PAD - stack_depth_adjust;i++)
|
||||||
|
- make_null(op - i);
|
||||||
|
+ if ((O_STACK_PAD - stack_depth_adjust) < 0) {
|
||||||
|
+ stack_depth_adjust = -(O_STACK_PAD - stack_depth_adjust);
|
||||||
|
+ check_op(stack_depth_adjust);
|
||||||
|
+ pop(stack_depth_adjust);
|
||||||
|
+ }
|
||||||
|
+ else {
|
||||||
|
+ check_ostack(O_STACK_PAD - stack_depth_adjust);
|
||||||
|
+ push(O_STACK_PAD - stack_depth_adjust);
|
||||||
|
+ for (i=0;i<O_STACK_PAD - stack_depth_adjust;i++)
|
||||||
|
+ make_null(op - i);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
61
backport-CVE-2021-45949.patch
Normal file
61
backport-CVE-2021-45949.patch
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
From 2a3129365d3bc0d4a41f107ef175920d1505d1f7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chris Liddell <chris.liddell@artifex.com>
|
||||||
|
Date: Tue, 1 Jun 2021 19:57:16 +0100
|
||||||
|
Subject: [PATCH] Bug 703902: Fix op stack management in
|
||||||
|
sampled_data_continue()
|
||||||
|
|
||||||
|
Replace pop() (which does no checking, and doesn't handle stack extension
|
||||||
|
blocks) with ref_stack_pop() which does do all that.
|
||||||
|
|
||||||
|
We still use pop() in one case (it's faster), but we have to later use
|
||||||
|
ref_stack_pop() before calling sampled_data_sample() which also accesses the
|
||||||
|
op stack.
|
||||||
|
|
||||||
|
Fixes:
|
||||||
|
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=34675
|
||||||
|
---
|
||||||
|
psi/zfsample.c | 16 ++++++++++------
|
||||||
|
1 file changed, 10 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/psi/zfsample.c b/psi/zfsample.c
|
||||||
|
index 0e8e4bc8dd..00cd0cfdd9 100644
|
||||||
|
--- a/psi/zfsample.c
|
||||||
|
+++ b/psi/zfsample.c
|
||||||
|
@@ -533,15 +533,19 @@ sampled_data_continue(i_ctx_t *i_ctx_p)
|
||||||
|
for (j = 0; j < bps; j++)
|
||||||
|
data_ptr[bps * i + j] = (byte)(cv >> ((bps - 1 - j) * 8)); /* MSB first */
|
||||||
|
}
|
||||||
|
- pop(num_out); /* Move op to base of result values */
|
||||||
|
|
||||||
|
- /* Check if we are done collecting data. */
|
||||||
|
+ pop(num_out); /* Move op to base of result values */
|
||||||
|
|
||||||
|
+ /* From here on, we have to use ref_stack_pop() rather than pop()
|
||||||
|
+ so that it handles stack extension blocks properly, before calling
|
||||||
|
+ sampled_data_sample() which also uses the op stack.
|
||||||
|
+ */
|
||||||
|
+ /* Check if we are done collecting data. */
|
||||||
|
if (increment_cube_indexes(params, penum->indexes)) {
|
||||||
|
if (stack_depth_adjust == 0)
|
||||||
|
- pop(O_STACK_PAD); /* Remove spare stack space */
|
||||||
|
+ ref_stack_pop(&o_stack, O_STACK_PAD); /* Remove spare stack space */
|
||||||
|
else
|
||||||
|
- pop(stack_depth_adjust - num_out);
|
||||||
|
+ ref_stack_pop(&o_stack, stack_depth_adjust - num_out);
|
||||||
|
/* Execute the closing procedure, if given */
|
||||||
|
code = 0;
|
||||||
|
if (esp_finish_proc != 0)
|
||||||
|
@@ -554,11 +558,11 @@ sampled_data_continue(i_ctx_t *i_ctx_p)
|
||||||
|
if ((O_STACK_PAD - stack_depth_adjust) < 0) {
|
||||||
|
stack_depth_adjust = -(O_STACK_PAD - stack_depth_adjust);
|
||||||
|
check_op(stack_depth_adjust);
|
||||||
|
- pop(stack_depth_adjust);
|
||||||
|
+ ref_stack_pop(&o_stack, stack_depth_adjust);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
check_ostack(O_STACK_PAD - stack_depth_adjust);
|
||||||
|
- push(O_STACK_PAD - stack_depth_adjust);
|
||||||
|
+ ref_stack_push(&o_stack, O_STACK_PAD - stack_depth_adjust);
|
||||||
|
for (i=0;i<O_STACK_PAD - stack_depth_adjust;i++)
|
||||||
|
make_null(op - i);
|
||||||
|
}
|
||||||
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
Name: ghostscript
|
Name: ghostscript
|
||||||
Version: 9.52
|
Version: 9.52
|
||||||
Release: 5
|
Release: 6
|
||||||
Summary: An interpreter for PostScript and PDF files
|
Summary: An interpreter for PostScript and PDF files
|
||||||
License: AGPLv3+
|
License: AGPLv3+
|
||||||
URL: https://ghostscript.com/
|
URL: https://ghostscript.com/
|
||||||
@ -44,6 +44,8 @@ Patch25: Bug-702582-CVE-2020-15900-Memory-Corruption-in-Ghost.patch
|
|||||||
Patch26: oss-fuzz-22182-validate-glyph-offset-length-values.patch
|
Patch26: oss-fuzz-22182-validate-glyph-offset-length-values.patch
|
||||||
Patch27: oss-fuzz-23637-Fix-error-code-confusion.patch
|
Patch27: oss-fuzz-23637-Fix-error-code-confusion.patch
|
||||||
Patch28: oss-fuzz-23946-Move-buffer-bounds-check-to-before-us.patch
|
Patch28: oss-fuzz-23946-Move-buffer-bounds-check-to-before-us.patch
|
||||||
|
Patch29: backport-CVE-2021-45944.patch
|
||||||
|
Patch30: backport-CVE-2021-45949.patch
|
||||||
|
|
||||||
BuildRequires: automake gcc
|
BuildRequires: automake gcc
|
||||||
BuildRequires: adobe-mappings-cmap-devel adobe-mappings-pdf-devel
|
BuildRequires: adobe-mappings-cmap-devel adobe-mappings-pdf-devel
|
||||||
@ -204,6 +206,12 @@ install -m 0755 -d %{buildroot}%{_datadir}/%{name}/conf.d/
|
|||||||
%{_bindir}/dvipdf
|
%{_bindir}/dvipdf
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Jan 11 2022 yangzhuangzhuang <yangzhuangzhuang1@huawei.com> - 9.52-6
|
||||||
|
- Type:CVE
|
||||||
|
- ID:CVE-2021-45944 CVE-2021-45949
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix CVE-2021-45944 CVE-2021-45949
|
||||||
|
|
||||||
* Mon Apr 19 2021 panxiaohe <panxiaohe@huawei.com> - 9.52-5
|
* Mon Apr 19 2021 panxiaohe <panxiaohe@huawei.com> - 9.52-5
|
||||||
- Type:enhancement
|
- Type:enhancement
|
||||||
- ID:NA
|
- ID:NA
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user