fix CVE-2019-20352 CVE-2020-24241
This commit is contained in:
parent
a852df8a04
commit
0e3b35ff04
52
backport-CVE-2019-20352.patch
Normal file
52
backport-CVE-2019-20352.patch
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
From 7c88289e222dc5ef9f53f9e86ecaab1924744b88 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Cyrill Gorcunov <gorcunov@gmail.com>
|
||||||
|
Date: Tue, 18 Aug 2020 11:25:14 +0300
|
||||||
|
Subject: [PATCH] BR3392711: preproc: fix memory corruption in
|
||||||
|
expand_one_smacro
|
||||||
|
|
||||||
|
https://github.com/netwide-assembler/nasm/commit/7c88289e222dc5ef9f53f9e86ecaab1924744b88
|
||||||
|
|
||||||
|
The mempcpy helper returns *last* byte pointer thus when
|
||||||
|
we call set_text_free we have to pass a pointer to the
|
||||||
|
start of the string.
|
||||||
|
|
||||||
|
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
|
||||||
|
---
|
||||||
|
asm/preproc.c | 8 ++++----
|
||||||
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/asm/preproc.c b/asm/preproc.c
|
||||||
|
index fec9520..1368cee 100644
|
||||||
|
--- a/asm/preproc.c
|
||||||
|
+++ b/asm/preproc.c
|
||||||
|
@@ -5531,7 +5531,7 @@ static SMacro *expand_one_smacro(Token ***tpp)
|
||||||
|
{
|
||||||
|
size_t mlen = strlen(m->name);
|
||||||
|
size_t len;
|
||||||
|
- char *p;
|
||||||
|
+ char *p, *from;
|
||||||
|
|
||||||
|
t->type = mstart->type;
|
||||||
|
if (t->type == TOK_LOCAL_MACRO) {
|
||||||
|
@@ -5544,15 +5544,15 @@ static SMacro *expand_one_smacro(Token ***tpp)
|
||||||
|
plen = pep - psp;
|
||||||
|
|
||||||
|
len = mlen + plen;
|
||||||
|
- p = nasm_malloc(len + 1);
|
||||||
|
+ from = p = nasm_malloc(len + 1);
|
||||||
|
p = mempcpy(p, psp, plen);
|
||||||
|
} else {
|
||||||
|
len = mlen;
|
||||||
|
- p = nasm_malloc(len + 1);
|
||||||
|
+ from = p = nasm_malloc(len + 1);
|
||||||
|
}
|
||||||
|
p = mempcpy(p, m->name, mlen);
|
||||||
|
*p = '\0';
|
||||||
|
- set_text_free(t, p, len);
|
||||||
|
+ set_text_free(t, from, len);
|
||||||
|
|
||||||
|
t->next = tline;
|
||||||
|
break;
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
76
backport-CVE-2020-24241-1.patch
Normal file
76
backport-CVE-2020-24241-1.patch
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
From 6ac6ac57e3d01ea8ed4ea47706eb724b59176461 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "H. Peter Anvin (Intel)" <hpa@zytor.com>
|
||||||
|
Date: Thu, 30 Jul 2020 15:46:12 -0700
|
||||||
|
Subject: [PATCH] parser: when flattening an eop, must preserve any data buffer
|
||||||
|
|
||||||
|
https://github.com/netwide-assembler/nasm/commit/6ac6ac57e3d01ea8ed4ea47706eb724b59176461
|
||||||
|
|
||||||
|
An eop may have a data buffer associated with it as part of the same
|
||||||
|
memory allocation. Therefore, we need to move "subexpr" up instead of
|
||||||
|
merging it into "eop".
|
||||||
|
|
||||||
|
This *partially* resolves BR 3392707, but that test case still
|
||||||
|
triggers a violation when using -gcv8.
|
||||||
|
|
||||||
|
Reported-by: Suhwan <prada960808@gmail.com>
|
||||||
|
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
|
||||||
|
---
|
||||||
|
asm/parser.c | 16 +++++++++++-----
|
||||||
|
test/br3392707.asm | 21 +++++++++++++++++++++
|
||||||
|
2 files changed, 32 insertions(+), 5 deletions(-)
|
||||||
|
create mode 100644 test/br3392707.asm
|
||||||
|
|
||||||
|
diff --git a/asm/parser.c b/asm/parser.c
|
||||||
|
index dbd2240c..584e40c9 100644
|
||||||
|
--- a/asm/parser.c
|
||||||
|
+++ b/asm/parser.c
|
||||||
|
@@ -458,11 +458,17 @@ static int parse_eops(extop **result, bool critical, int elem)
|
||||||
|
/* Subexpression is empty */
|
||||||
|
eop->type = EOT_NOTHING;
|
||||||
|
} else if (!subexpr->next) {
|
||||||
|
- /* Subexpression is a single element, flatten */
|
||||||
|
- eop->val = subexpr->val;
|
||||||
|
- eop->type = subexpr->type;
|
||||||
|
- eop->dup *= subexpr->dup;
|
||||||
|
- nasm_free(subexpr);
|
||||||
|
+ /*
|
||||||
|
+ * Subexpression is a single element, flatten.
|
||||||
|
+ * Note that if subexpr has an allocated buffer associated
|
||||||
|
+ * with it, freeing it would free the buffer, too, so
|
||||||
|
+ * we need to move subexpr up, not eop down.
|
||||||
|
+ */
|
||||||
|
+ if (!subexpr->elem)
|
||||||
|
+ subexpr->elem = eop->elem;
|
||||||
|
+ subexpr->dup *= eop->dup;
|
||||||
|
+ nasm_free(eop);
|
||||||
|
+ eop = subexpr;
|
||||||
|
} else {
|
||||||
|
eop->type = EOT_EXTOP;
|
||||||
|
}
|
||||||
|
diff --git a/test/br3392707.asm b/test/br3392707.asm
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000..6e84c5b4
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/test/br3392707.asm
|
||||||
|
@@ -0,0 +1,21 @@
|
||||||
|
+ bits 32
|
||||||
|
+
|
||||||
|
+ db 33
|
||||||
|
+ db (44)
|
||||||
|
+; db (44,55) -- error
|
||||||
|
+ db %(44.55)
|
||||||
|
+ db %('XX','YY')
|
||||||
|
+ db ('AA')
|
||||||
|
+ db %('BB')
|
||||||
|
+ db ?
|
||||||
|
+ db 6 dup (33)
|
||||||
|
+ db 6 dup (33, 34)
|
||||||
|
+ db 6 dup (33, 34), 35
|
||||||
|
+ db 7 dup (99)
|
||||||
|
+ db 7 dup (?,?)
|
||||||
|
+ dw byte (?,44)
|
||||||
|
+
|
||||||
|
+ dw 0xcc, 4 dup byte ('PQR'), ?, 0xabcd
|
||||||
|
+
|
||||||
|
+ dd 16 dup (0xaaaa, ?, 0xbbbbbb)
|
||||||
|
+ dd 64 dup (?)
|
||||||
55
backport-CVE-2020-24241-2.patch
Normal file
55
backport-CVE-2020-24241-2.patch
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
From 78df8828a0a5d8e2d8ff3dced562bf1778ce2e6c Mon Sep 17 00:00:00 2001
|
||||||
|
From: "H. Peter Anvin (Intel)" <hpa@zytor.com>
|
||||||
|
Date: Thu, 30 Jul 2020 17:06:24 -0700
|
||||||
|
Subject: [PATCH] output/codeview.c: use list_for_each_safe() to free a list
|
||||||
|
|
||||||
|
https://github.com/netwide-assembler/nasm/commit/78df8828a0a5d8e2d8ff3dced562bf1778ce2e6c
|
||||||
|
|
||||||
|
Using list_for_each() is by definition not safe when freeing the
|
||||||
|
members of the list, use list_for_each_free() instead.
|
||||||
|
|
||||||
|
Also, use nasm_new() and nasm_free() where appropriate.
|
||||||
|
|
||||||
|
This was discovered as a downstream bug from BR 3392707.
|
||||||
|
|
||||||
|
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
|
||||||
|
---
|
||||||
|
output/codeview.c | 9 ++++-----
|
||||||
|
1 file changed, 4 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/output/codeview.c b/output/codeview.c
|
||||||
|
index be3fd27a..8276a4f3 100644
|
||||||
|
--- a/output/codeview.c
|
||||||
|
+++ b/output/codeview.c
|
||||||
|
@@ -305,7 +305,7 @@ static void build_type_table(struct coff_Section *const sect);
|
||||||
|
static void cv8_cleanup(void)
|
||||||
|
{
|
||||||
|
struct cv8_symbol *sym;
|
||||||
|
- struct source_file *file;
|
||||||
|
+ struct source_file *file, *ftmp;
|
||||||
|
|
||||||
|
struct coff_Section *symbol_sect = coff_sects[cv8_state.symbol_sect];
|
||||||
|
struct coff_Section *type_sect = coff_sects[cv8_state.type_sect];
|
||||||
|
@@ -316,10 +316,10 @@ static void cv8_cleanup(void)
|
||||||
|
build_symbol_table(symbol_sect);
|
||||||
|
build_type_table(type_sect);
|
||||||
|
|
||||||
|
- list_for_each(file, cv8_state.source_files) {
|
||||||
|
+ list_for_each_safe(file, ftmp, cv8_state.source_files) {
|
||||||
|
nasm_free(file->fullname);
|
||||||
|
saa_free(file->lines);
|
||||||
|
- free(file);
|
||||||
|
+ nasm_free(file);
|
||||||
|
}
|
||||||
|
hash_free(&cv8_state.file_hash);
|
||||||
|
|
||||||
|
@@ -398,8 +398,7 @@ static struct source_file *register_file(const char *filename)
|
||||||
|
|
||||||
|
fullpath = nasm_realpath(filename);
|
||||||
|
|
||||||
|
- file = nasm_zalloc(sizeof(*file));
|
||||||
|
-
|
||||||
|
+ nasm_new(file);
|
||||||
|
file->filename = filename;
|
||||||
|
file->fullname = fullpath;
|
||||||
|
file->fullnamelen = strlen(fullpath);
|
||||||
10
nasm.spec
10
nasm.spec
@ -8,12 +8,17 @@
|
|||||||
|
|
||||||
Name: nasm
|
Name: nasm
|
||||||
Version: 2.15.03
|
Version: 2.15.03
|
||||||
Release: 1
|
Release: 2
|
||||||
Summary: The Netwide Assembler, a portable x86 assembler with Intel-like syntax
|
Summary: The Netwide Assembler, a portable x86 assembler with Intel-like syntax
|
||||||
License: BSD
|
License: BSD
|
||||||
URL: http://www.nasm.us
|
URL: http://www.nasm.us
|
||||||
Source0: http://www.nasm.us/pub/nasm/releasebuilds/%{version}/%{name}-%{version}.tar.bz2
|
Source0: http://www.nasm.us/pub/nasm/releasebuilds/%{version}/%{name}-%{version}.tar.bz2
|
||||||
Source1: http://www.nasm.us/pub/nasm/releasebuilds/%{version}/%{name}-%{version}-xdoc.tar.bz2
|
Source1: http://www.nasm.us/pub/nasm/releasebuilds/%{version}/%{name}-%{version}-xdoc.tar.bz2
|
||||||
|
|
||||||
|
Patch6000: backport-CVE-2019-20352.patch
|
||||||
|
Patch6001: backport-CVE-2020-24241-1.patch
|
||||||
|
Patch6002: backport-CVE-2020-24241-2.patch
|
||||||
|
|
||||||
#https://bugzilla.nasm.us/attachment.cgi?id=411648
|
#https://bugzilla.nasm.us/attachment.cgi?id=411648
|
||||||
BuildRequires: perl(Env) autoconf asciidoc xmlto gcc make git
|
BuildRequires: perl(Env) autoconf asciidoc xmlto gcc make git
|
||||||
|
|
||||||
@ -82,6 +87,9 @@ make all %{?_smp_mflags}
|
|||||||
%{_mandir}/man1/ld*
|
%{_mandir}/man1/ld*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Jan 07 2020 shixuantong <shixuantong@huawei.com> - 2.15.03-2
|
||||||
|
- fix CVE-2019-20352 CVE-2020-24241
|
||||||
|
|
||||||
* Thu Jul 23 2020 shixuantong <shixuantong@huawei.com> - 2.15.03-1
|
* Thu Jul 23 2020 shixuantong <shixuantong@huawei.com> - 2.15.03-1
|
||||||
- update to 2.15.03-1
|
- update to 2.15.03-1
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user