fix for CVE-2020-10713
This commit is contained in:
parent
2e2f005f5b
commit
c9c112e1c3
68
0001-yylex-Make-lexer-fatal-errors-actually-be-fatal.patch
Normal file
68
0001-yylex-Make-lexer-fatal-errors-actually-be-fatal.patch
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
From a948ac01744f3490fa5af4b38039f7dade68bb3e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Jones <pjones@redhat.com>
|
||||||
|
Date: Wed, 15 Apr 2020 15:45:02 -0400
|
||||||
|
Subject: [PATCH EMBARGOED CVE-2020-10713] yylex: Make lexer fatal errors
|
||||||
|
actually be fatal
|
||||||
|
|
||||||
|
When presented with a command that can't be tokenized to anything
|
||||||
|
smaller than YYLMAX characters, the parser calls YY_FATAL_ERROR(errmsg),
|
||||||
|
expecting that will stop further processing, as such:
|
||||||
|
|
||||||
|
#define YY_DO_BEFORE_ACTION \
|
||||||
|
yyg->yytext_ptr = yy_bp; \
|
||||||
|
yyleng = (int) (yy_cp - yy_bp); \
|
||||||
|
yyg->yy_hold_char = *yy_cp; \
|
||||||
|
*yy_cp = '\0'; \
|
||||||
|
if ( yyleng >= YYLMAX ) \
|
||||||
|
YY_FATAL_ERROR( "token too large, exceeds YYLMAX" ); \
|
||||||
|
yy_flex_strncpy( yytext, yyg->yytext_ptr, yyleng + 1 , yyscanner); \
|
||||||
|
yyg->yy_c_buf_p = yy_cp;
|
||||||
|
|
||||||
|
The code flex generates expects that YY_FATAL_ERROR() will either return
|
||||||
|
for it or do some form of longjmp(), or handle the error in some way at
|
||||||
|
least, and so the strncpy() call isn't in an "else" clause, and thus if
|
||||||
|
YY_FATAL_ERROR() is *not* actually fatal, it does the call with the
|
||||||
|
questionable limit, and predictable results ensue.
|
||||||
|
|
||||||
|
Unfortunately, our implementation of YY_FATAL_ERROR() is:
|
||||||
|
|
||||||
|
#define YY_FATAL_ERROR(msg) \
|
||||||
|
do { \
|
||||||
|
grub_printf (_("fatal error: %s\n"), _(msg)); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
The same pattern exists in yyless(), and similar problems exist in users
|
||||||
|
of YY_INPUT(), several places in the main parsing loop,
|
||||||
|
yy_get_next_buffer(), yy_load_buffer_state(), yyensure_buffer_stack,
|
||||||
|
yy_scan_buffer(), etc.
|
||||||
|
|
||||||
|
All of these callers expect YY_FATAL_ERROR() to actually be fatal, and
|
||||||
|
the things they do if it returns after calling it are wildly unsafe.
|
||||||
|
|
||||||
|
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||||
|
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
|
||||||
|
---
|
||||||
|
grub-core/script/yylex.l | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/grub-core/script/yylex.l b/grub-core/script/yylex.l
|
||||||
|
index 7b44c37b7..b7203c823 100644
|
||||||
|
--- a/grub-core/script/yylex.l
|
||||||
|
+++ b/grub-core/script/yylex.l
|
||||||
|
@@ -37,11 +37,11 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* As we don't have access to yyscanner, we cannot do much except to
|
||||||
|
- * print the fatal error.
|
||||||
|
+ * print the fatal error and exit.
|
||||||
|
*/
|
||||||
|
#define YY_FATAL_ERROR(msg) \
|
||||||
|
do { \
|
||||||
|
- grub_printf (_("fatal error: %s\n"), _(msg)); \
|
||||||
|
+ grub_fatal (_("fatal error: %s\n"), _(msg));\
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define COPY(str, hint) \
|
||||||
|
--
|
||||||
|
2.11.0
|
||||||
|
|
||||||
@ -251,6 +251,7 @@ Patch6008: normal-menu-Do-not-treat-error-values-as-key-presses.patch
|
|||||||
Patch6009: osdep-freebsd-Fix-partition-calculation-for-EBR-entr.patch
|
Patch6009: osdep-freebsd-Fix-partition-calculation-for-EBR-entr.patch
|
||||||
Patch6010: 0001-CVE-2019-14865.patch
|
Patch6010: 0001-CVE-2019-14865.patch
|
||||||
Patch6011: 0002-CVE-2019-14865.patch
|
Patch6011: 0002-CVE-2019-14865.patch
|
||||||
|
Patch6012: 0001-yylex-Make-lexer-fatal-errors-actually-be-fatal.patch
|
||||||
Patch9000: 0001-fix-grub-search-configfile-failed-in-net.patch
|
Patch9000: 0001-fix-grub-search-configfile-failed-in-net.patch
|
||||||
Patch9001: Workaround-for-EFI-Bug-Plan3.patch
|
Patch9001: Workaround-for-EFI-Bug-Plan3.patch
|
||||||
Patch9002: revert-0067-Be-more-aggro.patch
|
Patch9002: revert-0067-Be-more-aggro.patch
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
Name: grub2
|
Name: grub2
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Version: 2.02
|
Version: 2.02
|
||||||
Release: 75
|
Release: 76
|
||||||
Summary: Bootloader with support for Linux, Multiboot and more
|
Summary: Bootloader with support for Linux, Multiboot and more
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
URL: http://www.gnu.org/software/grub/
|
URL: http://www.gnu.org/software/grub/
|
||||||
@ -361,6 +361,12 @@ fi
|
|||||||
%{_datadir}/man/man*
|
%{_datadir}/man/man*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Jul 31 2020 openEuler Buildteam <buildteam@openeuler.org> - 2.02-76
|
||||||
|
- Type:cves
|
||||||
|
- Id:CVE-2020-10713
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix CVE-2020-10713
|
||||||
|
|
||||||
* Fri Jun 5 2020 fengtao <fengtao40@huawei.com> - 2.02-75
|
* Fri Jun 5 2020 fengtao <fengtao40@huawei.com> - 2.02-75
|
||||||
- remove sign for grub efi
|
- remove sign for grub efi
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user