From 35c277851972267d4d020126ab8f893c4b17dd36 Mon Sep 17 00:00:00 2001 From: Martin Liska 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