Fix CVE-2022-37434 and CVE-2022-33070
This commit is contained in:
parent
6d38298eb4
commit
f274099e1b
35
backport-0001-CVE-2022-37434.patch
Normal file
35
backport-0001-CVE-2022-37434.patch
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
From eff308af425b67093bab25f80f1ae950166bece1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Adler <fork@madler.net>
|
||||||
|
Date: Sat, 30 Jul 2022 15:51:11 -0700
|
||||||
|
Subject: [PATCH] Fix a bug when getting a gzip header extra field with
|
||||||
|
inflate().
|
||||||
|
|
||||||
|
If the extra field was larger than the space the user provided with
|
||||||
|
inflateGetHeader(), and if multiple calls of inflate() delivered
|
||||||
|
the extra header data, then there could be a buffer overflow of the
|
||||||
|
provided space. This commit assures that provided space is not
|
||||||
|
exceeded.
|
||||||
|
---
|
||||||
|
inflate.c | 5 +++--
|
||||||
|
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/zlib/inflate.c b/lib/zlib/inflate.c
|
||||||
|
index 2a0ac30..95a38f5 100644
|
||||||
|
--- a/lib/zlib/inflate.c
|
||||||
|
+++ b/lib/zlib/inflate.c
|
||||||
|
@@ -765,9 +765,10 @@ int flush;
|
||||||
|
copy = state->length;
|
||||||
|
if (copy > have) copy = have;
|
||||||
|
if (copy) {
|
||||||
|
+ len = state->head->extra_len - state->length;
|
||||||
|
if (state->head != Z_NULL &&
|
||||||
|
- state->head->extra != Z_NULL) {
|
||||||
|
- len = state->head->extra_len - state->length;
|
||||||
|
+ state->head->extra != Z_NULL &&
|
||||||
|
+ len < state->head->extra_max) {
|
||||||
|
zmemcpy(state->head->extra + len, next,
|
||||||
|
len + copy > state->head->extra_max ?
|
||||||
|
state->head->extra_max - len : copy);
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
||||||
32
backport-0002-CVE-2022-37434.patch
Normal file
32
backport-0002-CVE-2022-37434.patch
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
From 1eb7682f845ac9e9bf9ae35bbfb3bad5dacbd91d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Adler <fork@madler.net>
|
||||||
|
Date: Mon, 8 Aug 2022 10:50:09 -0700
|
||||||
|
Subject: [PATCH] Fix extra field processing bug that dereferences NULL
|
||||||
|
state->head.
|
||||||
|
|
||||||
|
The recent commit to fix a gzip header extra field processing bug
|
||||||
|
introduced the new bug fixed here.
|
||||||
|
---
|
||||||
|
inflate.c | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/zlib/inflate.c b/lib/zlib/inflate.c
|
||||||
|
index 95a38f5..9c5934e 100644
|
||||||
|
--- a/lib/zlib/inflate.c
|
||||||
|
+++ b/lib/zlib/inflate.c
|
||||||
|
@@ -765,10 +765,10 @@ int flush;
|
||||||
|
copy = state->length;
|
||||||
|
if (copy > have) copy = have;
|
||||||
|
if (copy) {
|
||||||
|
- len = state->head->extra_len - state->length;
|
||||||
|
if (state->head != Z_NULL &&
|
||||||
|
state->head->extra != Z_NULL &&
|
||||||
|
- len < state->head->extra_max) {
|
||||||
|
+ (len = state->head->extra_len - state->length) <
|
||||||
|
+ state->head->extra_max) {
|
||||||
|
zmemcpy(state->head->extra + len, next,
|
||||||
|
len + copy > state->head->extra_max ?
|
||||||
|
state->head->extra_max - len : copy);
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
||||||
73
backport-CVE-2022-33070.patch
Normal file
73
backport-CVE-2022-33070.patch
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
diff -Naru a/lib/protobuf-c/protobuf-c.c b/lib/protobuf-c/protobuf-c.c
|
||||||
|
--- a/lib/protobuf-c/protobuf-c.c
|
||||||
|
+++ b/lib/protobuf-c/protobuf-c.c
|
||||||
|
@@ -316,9 +316,8 @@
|
||||||
|
static inline uint32_t
|
||||||
|
zigzag32(int32_t v)
|
||||||
|
{
|
||||||
|
- // Note: the right-shift must be arithmetic
|
||||||
|
- // Note: left shift must be unsigned because of overflow
|
||||||
|
- return ((uint32_t)(v) << 1) ^ (uint32_t)(v >> 31);
|
||||||
|
+ // Note: Using unsigned types prevents undefined behavior
|
||||||
|
+ return ((uint32_t)v << 1) ^ -((uint32_t)v >> 31);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -380,9 +379,8 @@
|
||||||
|
static inline uint64_t
|
||||||
|
zigzag64(int64_t v)
|
||||||
|
{
|
||||||
|
- // Note: the right-shift must be arithmetic
|
||||||
|
- // Note: left shift must be unsigned because of overflow
|
||||||
|
- return ((uint64_t)(v) << 1) ^ (uint64_t)(v >> 63);
|
||||||
|
+ // Note: Using unsigned types prevents undefined behavior
|
||||||
|
+ return ((uint64_t)v << 1) ^ -((uint64_t)v >> 63);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -802,7 +800,8 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
- * Pack a signed 32-bit integer and return the number of bytes written.
|
||||||
|
+ * Pack a signed 32-bit integer and return the number of bytes written,
|
||||||
|
+ * passed as unsigned to avoid implementation-specific behavior.
|
||||||
|
* Negative numbers are encoded as two's complement 64-bit integers.
|
||||||
|
*
|
||||||
|
* \param value
|
||||||
|
@@ -813,14 +812,14 @@
|
||||||
|
* Number of bytes written to `out`.
|
||||||
|
*/
|
||||||
|
static inline size_t
|
||||||
|
-int32_pack(int32_t value, uint8_t *out)
|
||||||
|
+int32_pack(uint32_t value, uint8_t *out)
|
||||||
|
{
|
||||||
|
- if (value < 0) {
|
||||||
|
+ if ((int32_t)value < 0) {
|
||||||
|
out[0] = value | 0x80;
|
||||||
|
out[1] = (value >> 7) | 0x80;
|
||||||
|
out[2] = (value >> 14) | 0x80;
|
||||||
|
out[3] = (value >> 21) | 0x80;
|
||||||
|
- out[4] = (value >> 28) | 0x80;
|
||||||
|
+ out[4] = (value >> 28) | 0xf0;
|
||||||
|
out[5] = out[6] = out[7] = out[8] = 0xff;
|
||||||
|
out[9] = 0x01;
|
||||||
|
return 10;
|
||||||
|
@@ -2425,7 +2424,7 @@
|
||||||
|
unzigzag32(uint32_t v)
|
||||||
|
{
|
||||||
|
// Note: Using unsigned types prevents undefined behavior
|
||||||
|
- return (int32_t)((v >> 1) ^ (~(v & 1) + 1));
|
||||||
|
+ return (int32_t)((v >> 1) ^ -(v & 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint32_t
|
||||||
|
@@ -2467,7 +2466,7 @@
|
||||||
|
unzigzag64(uint64_t v)
|
||||||
|
{
|
||||||
|
// Note: Using unsigned types prevents undefined behavior
|
||||||
|
- return (int64_t)((v >> 1) ^ (~(v & 1) + 1));
|
||||||
|
+ return (int64_t)((v >> 1) ^ -(v & 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint64_t
|
||||||
@ -1,6 +1,6 @@
|
|||||||
Name: sudo
|
Name: sudo
|
||||||
Version: 1.9.8p2
|
Version: 1.9.8p2
|
||||||
Release: 1
|
Release: 2
|
||||||
Summary: Allows restricted root access for specified users
|
Summary: Allows restricted root access for specified users
|
||||||
License: ISC
|
License: ISC
|
||||||
URL: http://www.courtesan.com/sudo/
|
URL: http://www.courtesan.com/sudo/
|
||||||
@ -10,6 +10,10 @@ Source1: sudoers
|
|||||||
Source2: sudo
|
Source2: sudo
|
||||||
Source3: sudo-i
|
Source3: sudo-i
|
||||||
|
|
||||||
|
Patch0: backport-0001-CVE-2022-37434.patch
|
||||||
|
Patch1: backport-0002-CVE-2022-37434.patch
|
||||||
|
Patch2: backport-CVE-2022-33070.patch
|
||||||
|
|
||||||
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
Requires: pam
|
Requires: pam
|
||||||
Recommends: vim-minimal
|
Recommends: vim-minimal
|
||||||
@ -150,6 +154,9 @@ install -p -c -m 0644 %{SOURCE3} $RPM_BUILD_ROOT/etc/pam.d/sudo-i
|
|||||||
%exclude %{_pkgdocdir}/ChangeLog
|
%exclude %{_pkgdocdir}/ChangeLog
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Sep 2 2022 wangyu <wangyu283@huawei.com> - 1.9.8p2-2
|
||||||
|
- Fix CVE-2022-37434 and CVE-2022-33070
|
||||||
|
|
||||||
* Tue Feb 15 2022 panxiaohe <panxh.life@foxmail.com> - 1.9.8p2-1
|
* Tue Feb 15 2022 panxiaohe <panxh.life@foxmail.com> - 1.9.8p2-1
|
||||||
- Update to 1.9.8p2
|
- Update to 1.9.8p2
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user