BiteTheDDDDt opened a new pull request, #25380:
URL: https://github.com/apache/doris/pull/25380

   ## Proposed changes
   fix heap-use-after-free on map_agg
   
   ```cpp
   disabled stack guard. The VM will try to fix the stack guard now.
   It's highly recommended that you fix the library with 'execstack -c 
<libfile>', or link it with '-z noexecstack'.
   =================================================================
   ==8358==ERROR: AddressSanitizer: heap-use-after-free on address 
0x608002c319b0 at pc 0x55778c831c4d bp 0x7fa85a63b390 sp 0x7fa85a63b388
   READ of size 4 at 0x608002c319b0 thread T278 (WithoutGroupTas)
       #0 0x55778c831c4c in doris::HashUtil::crc_hash(void const*, int, 
unsigned int) /root/doris/be/src/util/hash_util.hpp:80:40
       #1 0x55778d864183 in doris::HashUtil::hash(void const*, int, unsigned 
int) /root/doris/be/src/util/hash_util.hpp:299:20
       #2 0x5577986ff725 in doris::hash_value(doris::StringRef const&) 
/root/doris/be/src/vec/common/string_ref.h:309:12
       #3 0x5577986ff725 in unsigned long 
phmap::Hash<doris::StringRef>::_hash<doris::StringRef, 0>(doris::StringRef 
const&) const 
/var/local/thirdparty/installed/include/parallel_hashmap/phmap_utils.h:153:16
       #4 0x5577986ff725 in 
phmap::Hash<doris::StringRef>::operator()(doris::StringRef const&) const 
/var/local/thirdparty/installed/include/parallel_hashmap/phmap_utils.h:164:16
       #5 0x5577986ff725 in unsigned long 
phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef, 
long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::HashElement::operator()<doris::StringRef, std::piecewise_construct_t const&, 
std::tuple<doris::StringRef const&>, std::tuple<long const&> >(doris::StringRef 
const&, std::piecewise_construct_t const&, std::tuple<doris::StringRef 
const&>&&, std::tuple<long const&>&&) const 
/var/local/thirdparty/installed/include/parallel_hashmap/phmap.h:1867:48
       #6 0x5577986ff725 in 
decltype(std::declval<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::HashElement>()(std::declval<doris::StringRef const& const&>(), 
std::piecewise_construct, std::declval<std::tuple<doris::StringRef const&> >(), 
std::declval<std::tuple<long const&> >())) 
phmap::priv::memory_internal::DecomposePairImpl<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > >::HashElement, 
doris::StringRef const&, std::tuple<long const&> 
>(phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef, 
long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > >::HashElement&&, 
std::pair<std:
 :tuple<doris::StringRef const&>, std::tuple<long const&> >) 
/var/local/thirdparty/installed/include/parallel_hashmap/phmap.h:751:12
       #7 0x5577986ff725 in 
decltype(memory_internal::DecomposePairImpl(std::forward<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > >::HashElement>(fp), 
PairArgs(std::forward<std::pair<doris::StringRef const, long>&>(fp0)))) 
phmap::priv::DecomposePair<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > >::HashElement, 
std::pair<doris::StringRef const, 
long>&>(phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > >::HashElement&&, 
std::pair<doris::StringRef const, long>&) 
/var/local/thirdparty/installed/include/parallel_hashmap/phmap.
 h:4119:12
       #8 0x5577986ff725 in 
decltype(phmap::priv::DecomposePair(std::declval<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > >::HashElement>(), 
std::declval<std::pair<doris::StringRef const, long>&>())) 
phmap::priv::FlatHashMapPolicy<doris::StringRef, 
long>::apply<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > >::HashElement, 
std::pair<doris::StringRef const, 
long>&>(phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > >::HashElement&&, 
std::pair<doris::StringRef const, long>&) 
/var/local/thirdparty/installed/include/parallel_ha
 shmap/phmap.h:4222:16
       #9 0x5577986ff725 in 
decltype(phmap::priv::FlatHashMapPolicy<doris::StringRef, 
long>::apply(std::forward<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > >::HashElement>(fp), 
std::forward<std::pair<doris::StringRef const, long>&>(fp0))) 
phmap::priv::hash_policy_traits<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, 
void>::apply<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > >::HashElement, 
std::pair<doris::StringRef const, long>&, 
phmap::priv::FlatHashMapPolicy<doris::StringRef, long> 
>(phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef, 
long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::
 StringRef const, long> > >::HashElement&&, std::pair<doris::StringRef const, 
long>&) 
/var/local/thirdparty/installed/include/parallel_hashmap/phmap_base.h:548:16
       #10 0x5577986ff725 in 
phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef, 
long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > >::resize(unsigned 
long) /var/local/thirdparty/installed/include/parallel_hashmap/phmap.h:2019:34
       #11 0x5577986ff153 in 
phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef, 
long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::prepare_insert(unsigned long) 
/var/local/thirdparty/installed/include/parallel_hashmap/phmap.h:2198:13
       #12 0x5577986feb54 in std::pair<unsigned long, bool> 
phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef, 
long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::find_or_prepare_insert<doris::StringRef>(doris::StringRef const&, unsigned 
long) /var/local/thirdparty/installed/include/parallel_hashmap/phmap.h:2186:17
       #13 0x5577987011bf in 
std::pair<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > >::iterator, bool> 
phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef, 
long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::emplace_decomposable<doris::StringRef, std::piecewise_construct_t const&, 
std::tuple<doris::StringRef&>, std::tuple<unsigned long&&> >(doris::StringRef 
const&, unsigned long, std::piecewise_construct_t const&, 
std::tuple<doris::StringRef&>&&, std::tuple<unsigned long&&>&&) 
/var/local/thirdparty/installed/include/parallel_hashmap/phmap.h:1887:20
       #14 0x55779878b4fb in 
std::pair<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > >::iterator, bool> 
phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef, 
long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::EmplaceDecomposable::operator()<doris::StringRef, std::piecewise_construct_t 
const&, std::tuple<doris::StringRef&>, std::tuple<unsigned long&&> 
>(doris::StringRef const&, std::piecewise_construct_t const&, 
std::tuple<doris::StringRef&>&&, std::tuple<unsigned long&&>&&) const 
/var/local/thirdparty/installed/include/parallel_hashmap/phmap.h:1898:22
       #15 0x55779878b4fb in 
decltype(std::declval<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::EmplaceDecomposable>()(std::declval<doris::StringRef& const&>(), 
std::piecewise_construct, std::declval<std::tuple<doris::StringRef&> >(), 
std::declval<std::tuple<unsigned long&&> >())) 
phmap::priv::memory_internal::DecomposePairImpl<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::EmplaceDecomposable, doris::StringRef&, std::tuple<unsigned long&&> 
>(phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef, 
long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::EmplaceDecomposable&&,
  std::pair<std::tuple<doris::StringRef&>, std::tuple<unsigned long&&> >) 
/var/local/thirdparty/installed/include/parallel_hashmap/phmap.h:751:12
       #16 0x55779878b4fb in 
decltype(memory_internal::DecomposePairImpl(std::forward<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::EmplaceDecomposable>(fp), PairArgs(std::forward<doris::StringRef&>(fp0), 
std::forward<unsigned long>(fp0)))) 
phmap::priv::DecomposePair<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::EmplaceDecomposable, doris::StringRef&, unsigned 
long>(phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::EmplaceDecomposable&&, doris::StringRef&, unsigned long&&) 
/var/local/thirdparty/installed/include/p
 arallel_hashmap/phmap.h:4119:12
       #17 0x55779878b4fb in 
decltype(phmap::priv::DecomposePair(std::declval<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::EmplaceDecomposable>(), std::declval<doris::StringRef&>(), 
std::declval<unsigned long>())) 
phmap::priv::FlatHashMapPolicy<doris::StringRef, 
long>::apply<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::EmplaceDecomposable, doris::StringRef&, unsigned 
long>(phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::EmplaceDecomposable&&, doris::StringRef&, unsigned long&&) 
/var/local/thirdparty/installed/
 include/parallel_hashmap/phmap.h:4222:16
       #18 0x55779878b4fb in 
decltype(phmap::priv::FlatHashMapPolicy<doris::StringRef, 
long>::apply(std::forward<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::EmplaceDecomposable>(fp), std::forward<doris::StringRef&>(fp0), 
std::forward<unsigned long>(fp0))) 
phmap::priv::hash_policy_traits<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, 
void>::apply<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::EmplaceDecomposable, doris::StringRef&, unsigned long, 
phmap::priv::FlatHashMapPolicy<doris::StringRef, long> 
>(phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef, 
long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocat
 or<std::pair<doris::StringRef const, long> > >::EmplaceDecomposable&&, 
doris::StringRef&, unsigned long&&) 
/var/local/thirdparty/installed/include/parallel_hashmap/phmap_base.h:548:16
       #19 0x55779878b4fb in 
std::pair<phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef,
 long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > >::iterator, bool> 
phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<doris::StringRef, 
long>, phmap::Hash<doris::StringRef>, phmap::EqualTo<doris::StringRef>, 
std::allocator<std::pair<doris::StringRef const, long> > 
>::emplace<doris::StringRef&, unsigned long, 0>(doris::StringRef&, unsigned 
long&&) /var/local/thirdparty/installed/include/parallel_hashmap/phmap.h:1438:16
       #20 0x55779878b4fb in 
doris::vectorized::AggregateFunctionMapAggData<std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > >::add(doris::vectorized::Field 
const&, doris::vectorized::Field const&) 
/root/doris/be/src/vec/aggregate_functions/aggregate_function_map.h:100:18
       #21 0x557798783cac in 
doris::vectorized::AggregateFunctionMapAgg<doris::vectorized::AggregateFunctionMapAggData<std::__cxx11::basic_string<char,
 std::char_traits<char>, std::allocator<char> > >, 
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > 
>::deserialize_and_merge_vec(char* const*, unsigned long, char*, 
doris::vectorized::ColumnString const*, doris::vectorized::Arena*, unsigned 
long) const 
/root/doris/be/src/vec/aggregate_functions/aggregate_function_map.h:281:35
       #22 0x55779ec8b28b in doris::Status 
doris::vectorized::AggregationNode::_merge_with_serialized_key_helper<false, 
false>(doris::vectorized::Block*) 
/root/doris/be/src/vec/exec/vaggregation_node.h:693:63
       #23 0x55779eb0ae08 in 
doris::vectorized::AggregationNode::_merge_with_serialized_key(doris::vectorized::Block*)
 /root/doris/be/src/vec/exec/vaggregation_node.cpp:1535:16
       #24 0x55779edf3816 in doris::Status std::__invoke_impl<doris::Status, 
doris::Status 
(doris::vectorized::AggregationNode::*&)(doris::vectorized::Block*), 
doris::vectorized::AggregationNode*&, 
doris::vectorized::Block*>(std::__invoke_memfun_deref, doris::Status 
(doris::vectorized::AggregationNode::*&)(doris::vectorized::Block*), 
doris::vectorized::AggregationNode*&, doris::vectorized::Block*&&) 
/var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:74:14
       #25 0x55779edf3816 in std::enable_if<is_invocable_r_v<doris::Status, 
doris::Status 
(doris::vectorized::AggregationNode::*&)(doris::vectorized::Block*), 
doris::vectorized::AggregationNode*&, doris::vectorized::Block*>, 
doris::Status>::type std::__invoke_r<doris::Status, doris::Status 
(doris::vectorized::AggregationNode::*&)(doris::vectorized::Block*), 
doris::vectorized::AggregationNode*&, doris::vectorized::Block*>(doris::Status 
(doris::vectorized::AggregationNode::*&)(doris::vectorized::Block*), 
doris::vectorized::AggregationNode*&, doris::vectorized::Block*&&) 
/var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:114:9
       #26 0x55779edf3816 in doris::Status std::_Bind_result<doris::Status, 
doris::Status (doris::vectorized::AggregationNode::* 
(doris::vectorized::AggregationNode*, 
std::_Placeholder<1>))(doris::vectorized::Block*)>::__call<doris::Status, 
doris::vectorized::Block*&&, 0ul, 
1ul>(std::tuple<doris::vectorized::Block*&&>&&, std::_Index_tuple<0ul, 1ul>) 
/var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/functional:570:11
       #27 0x55779edf3816 in doris::Status std::_Bind_result<doris::Status, 
doris::Status (doris::vectorized::AggregationNode::* 
(doris::vectorized::AggregationNode*, 
std::_Placeholder<1>))(doris::vectorized::Block*)>::operator()<doris::vectorized::Block*>(doris::vectorized::Block*&&)
 
/var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/functional:629:17
   ```
   
   ## Further comments
   
   If this is a relatively large or complex change, kick off the discussion at 
[d...@doris.apache.org](mailto:d...@doris.apache.org) by explaining why you 
chose the solution you did and what alternatives you considered, etc...
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to