forked from pool/mariadb
41 lines
1.3 KiB
Diff
41 lines
1.3 KiB
Diff
|
From 35c277851972267d4d020126ab8f893c4b17dd36 Mon Sep 17 00:00:00 2001
|
||
|
From: Martin Liska <mliska@suse.cz>
|
||
|
Date: Sun, 8 Dec 2019 10:52:27 +0100
|
||
|
Subject: [PATCH] MDEV-21248: Prevent optimizing out buf argument in
|
||
|
check_stack_overrun.
|
||
|
|
||
|
When using LTO, one can see optimization of stack variables that
|
||
|
are passed to check_stack_overrun as argument buf. That prevents
|
||
|
proper stack overrun detection.
|
||
|
---
|
||
|
sql/sql_parse.cc | 13 +++++++++++--
|
||
|
1 file changed, 11 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
|
||
|
index dc81e8a2b91..6f3c076709a 100644
|
||
|
--- a/sql/sql_parse.cc
|
||
|
+++ b/sql/sql_parse.cc
|
||
|
@@ -7392,8 +7392,17 @@ long max_stack_used;
|
||
|
corresponding exec. (Thus we only have to check in fix_fields.)
|
||
|
- Passing to check_stack_overrun() prevents the compiler from removing it.
|
||
|
*/
|
||
|
-bool check_stack_overrun(THD *thd, long margin,
|
||
|
- uchar *buf __attribute__((unused)))
|
||
|
+
|
||
|
+bool
|
||
|
+#ifdef __GNUC__
|
||
|
+/*
|
||
|
+ Do not optimize the function in order to preserve a stack variable creation.
|
||
|
+ Otherwise, the variable pointed as "buf" can be removed due to a missing
|
||
|
+ usage.
|
||
|
+ */
|
||
|
+__attribute__((optimize("-O0")))
|
||
|
+#endif
|
||
|
+check_stack_overrun(THD *thd, long margin, uchar *buf __attribute__((unused)))
|
||
|
{
|
||
|
long stack_used;
|
||
|
DBUG_ASSERT(thd == current_thd);
|
||
|
--
|
||
|
2.25.1
|
||
|
|