[ 
https://issues.apache.org/jira/browse/KUDU-1674?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dinesh Bhat resolved KUDU-1674.
-------------------------------
       Resolution: Fixed
    Fix Version/s:     (was: 1.0.1)
                   1.1.0

> SEGV in SubProcess::Call if it tries to capture stderr alone
> ------------------------------------------------------------
>
>                 Key: KUDU-1674
>                 URL: https://issues.apache.org/jira/browse/KUDU-1674
>             Project: Kudu
>          Issue Type: Bug
>          Components: util
>    Affects Versions: 1.0.0
>            Reporter: Dinesh Bhat
>            Assignee: Dinesh Bhat
>             Fix For: 1.1.0
>
>
> One of the jenkins run captured this when we called
> SubProcess::Call(argv[0], nullptr, &stderr);
> {noformat}
> WARNING: ThreadSanitizer: heap-use-after-free (pid=28482)
>   Read of size 8 at 0x7d0800005e38 by main thread:
>     #0 memcpy 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/llvm-3.9.0.src/projects/compiler-rt/lib/tsan/../sanitizer_common/sanitizer_common_interceptors.inc:598
>  (kudu-admin-test+0x00000046850b)
>     #1 std::__1::basic_string<char, std::__1::char_traits<char>, 
> std::__1::allocator<char> >::__move_assign(std::__1::basic_string<char, 
> std::__1::char_traits<char>, std::__1::allocator<char> >&, 
> std::__1::integral_constant<bool, true>) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/installed/tsan/include/c++/v1/string:2525:18
>  (libkudu_util.so+0x00000016ca51)
>     #2 std::__1::basic_string<char, std::__1::char_traits<char>, 
> std::__1::allocator<char> >::operator=(std::__1::basic_string<char, 
> std::__1::char_traits<char>, std::__1::allocator<char> >&&) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/installed/tsan/include/c++/v1/string:2536
>  (libkudu_util.so+0x00000016ca51)
>     #3 kudu::Subprocess::Call(std::__1::vector<std::__1::basic_string<char, 
> std::__1::char_traits<char>, std::__1::allocator<char> >, 
> std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, 
> std::__1::allocator<char> > > > const&, std::__1::basic_string<char, 
> std::__1::char_traits<char>, std::__1::allocator<char> >*, 
> std::__1::basic_string<char, std::__1::char_traits<char>, 
> std::__1::allocator<char> >*) 
> /home/jenkins-slave/workspace/kudu-2/src/kudu/util/subprocess.cc:503 
> (libkudu_util.so+0x00000016ca51)
>     #4 kudu::tools::AdminCliTest_TestLeaderStepDown_Test::TestBody() 
> /home/jenkins-slave/workspace/kudu-2/src/kudu/tools/kudu-admin-test.cc:199:14 
> (kudu-admin-test+0x0000004cc43b)
>     #5 void 
> testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, 
> void>(testing::Test*, void (testing::Test::*)(), char const*) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2078:10
>  (libgmock.so+0x000000048243)
>     #6 void 
> testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, 
> void>(testing::Test*, void (testing::Test::*)(), char const*) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2114
>  (libgmock.so+0x000000048243)
>     #7 testing::Test::Run() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2150:5
>  (libgmock.so+0x00000002ce6f)
>     #8 testing::TestInfo::Run() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2326:11
>  (libgmock.so+0x00000002dea7)
>     #9 testing::TestCase::Run() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2444:28
>  (libgmock.so+0x00000002eaf8)
>     #10 testing::internal::UnitTestImpl::RunAllTests() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:4315:43
>  (libgmock.so+0x000000038f51)
>     #11 bool 
> testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl,
>  bool>(testing::internal::UnitTestImpl*, bool 
> (testing::internal::UnitTestImpl::*)(), char const*) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2078:10
>  (libgmock.so+0x000000048df3)
>     #12 bool 
> testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl,
>  bool>(testing::internal::UnitTestImpl*, bool 
> (testing::internal::UnitTestImpl::*)(), char const*) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2114
>  (libgmock.so+0x000000048df3)
>     #13 testing::UnitTest::Run() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:3926:10
>  (libgmock.so+0x000000038988)
>     #14 RUN_ALL_TESTS() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/installed/tsan/include/gtest/gtest.h:2288:46
>  (libkudu_test_main.so+0x000000002acb)
>     #15 main 
> /home/jenkins-slave/workspace/kudu-2/src/kudu/util/test_main.cc:75:13 
> (libkudu_test_main.so+0x00000000255a)
>   Previous write of size 8 at 0x7d0800005e38 by main thread:
>     #0 operator delete[](void*) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/llvm-3.9.0.src/projects/compiler-rt/lib/tsan/rtl/tsan_new_delete.cc:79
>  (kudu-admin-test+0x0000004c7a41)
>     #1 void 
> google::protobuf::internal::RepeatedPtrFieldBase::Destroy<google::protobuf::RepeatedPtrField<kudu::ColumnSchemaPB>::TypeHandler>()
>  
> /home/jenkins-slave/workspace/kudu-2/thirdparty/installed/tsan/include/google/protobuf/repeated_field.h:871:3
>  (libksck.so+0x00000003fa53)
>     #2 
> google::protobuf::RepeatedPtrField<kudu::ColumnSchemaPB>::~RepeatedPtrField() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/installed/tsan/include/google/protobuf/repeated_field.h:1090:3
>  (libksck.so+0x00000003f979)
>     #3 kudu::SchemaPB::~SchemaPB() 
> /home/jenkins-slave/workspace/kudu-2/build/tsan/src/kudu/common/common.pb.cc:1277:1
>  (libkudu_common_proto.so+0x00000001fea4)
>     #4 kudu::SchemaPB::~SchemaPB() 
> /home/jenkins-slave/workspace/kudu-2/build/tsan/src/kudu/common/common.pb.cc:1274:23
>  (libkudu_common_proto.so+0x00000001fef9)
>     #5 kudu::tserver::ListTabletsResponsePB_StatusAndSchemaPB::SharedDtor() 
> /home/jenkins-slave/workspace/kudu-2/build/tsan/src/kudu/tserver/tserver.pb.cc:2543:5
>  (libtserver_proto.so+0x00000002e99c)
>     #6 
> kudu::tserver::ListTabletsResponsePB_StatusAndSchemaPB::~ListTabletsResponsePB_StatusAndSchemaPB()
>  
> /home/jenkins-slave/workspace/kudu-2/build/tsan/src/kudu/tserver/tserver.pb.cc:2537:3
>  (libtserver_proto.so+0x00000002e913)
>     #7 
> kudu::tserver::ListTabletsResponsePB_StatusAndSchemaPB::~ListTabletsResponsePB_StatusAndSchemaPB()
>  
> /home/jenkins-slave/workspace/kudu-2/build/tsan/src/kudu/tserver/tserver.pb.cc:2535:85
>  (libtserver_proto.so+0x00000002e9e9)
>     #8 
> google::protobuf::internal::GenericTypeHandler<kudu::tserver::ListTabletsResponsePB_StatusAndSchemaPB>::Delete(kudu::tserver::ListTabletsResponsePB_StatusAndSchemaPB*)
>  
> /home/jenkins-slave/workspace/kudu-2/thirdparty/installed/tsan/include/google/protobuf/repeated_field.h:363:44
>  (libtserver_proto.so+0x000000041cc7)
>     #9 void 
> google::protobuf::internal::RepeatedPtrFieldBase::Destroy<google::protobuf::RepeatedPtrField<kudu::tserver::ListTabletsResponsePB_StatusAndSchemaPB>::TypeHandler>()
>  
> /home/jenkins-slave/workspace/kudu-2/thirdparty/installed/tsan/include/google/protobuf/repeated_field.h:869:5
>  (libtserver_proto.so+0x000000041c56)
>     #10 
> google::protobuf::RepeatedPtrField<kudu::tserver::ListTabletsResponsePB_StatusAndSchemaPB>::~RepeatedPtrField()
>  
> /home/jenkins-slave/workspace/kudu-2/thirdparty/installed/tsan/include/google/protobuf/repeated_field.h:1090:3
>  (libtserver_proto.so+0x00000003ba39)
>     #11 kudu::tserver::ListTabletsResponsePB::~ListTabletsResponsePB() 
> /home/jenkins-slave/workspace/kudu-2/build/tsan/src/kudu/tserver/tserver.pb.cc:2860:1
>  (libtserver_proto.so+0x00000002f8cc)
>     #12 kudu::itest::ListTablets(kudu::itest::TServerDetails const*, 
> kudu::MonoDelta const&, 
> std::__1::vector<kudu::tserver::ListTabletsResponsePB_StatusAndSchemaPB, 
> std::__1::allocator<kudu::tserver::ListTabletsResponsePB_StatusAndSchemaPB> 
> >*) 
> /home/jenkins-slave/workspace/kudu-2/src/kudu/integration-tests/cluster_itest_util.cc:586:1
>  (libintegration-tests.so+0x000000045dd1)
>     #13 kudu::itest::WaitUntilTabletInState(kudu::itest::TServerDetails*, 
> std::__1::basic_string<char, std::__1::char_traits<char>, 
> std::__1::allocator<char> > const&, kudu::tablet::TabletStatePB, 
> kudu::MonoDelta const&) 
> /home/jenkins-slave/workspace/kudu-2/src/kudu/integration-tests/cluster_itest_util.cc:701:9
>  (libintegration-tests.so+0x000000046c14)
>     #14 kudu::itest::WaitUntilTabletRunning(kudu::itest::TServerDetails*, 
> std::__1::basic_string<char, std::__1::char_traits<char>, 
> std::__1::allocator<char> > const&, kudu::MonoDelta const&) 
> /home/jenkins-slave/workspace/kudu-2/src/kudu/integration-tests/cluster_itest_util.cc:734:10
>  (libintegration-tests.so+0x000000047175)
>     #15 kudu::tools::AdminCliTest_TestLeaderStepDown_Test::TestBody() 
> /home/jenkins-slave/workspace/kudu-2/src/kudu/tools/kudu-admin-test.cc:184:5 
> (kudu-admin-test+0x0000004cc1f3)
>     #16 void 
> testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, 
> void>(testing::Test*, void (testing::Test::*)(), char const*) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2078:10
>  (libgmock.so+0x000000048243)
>     #17 void 
> testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, 
> void>(testing::Test*, void (testing::Test::*)(), char const*) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2114
>  (libgmock.so+0x000000048243)
>     #18 testing::Test::Run() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2150:5
>  (libgmock.so+0x00000002ce6f)
>     #19 testing::TestInfo::Run() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2326:11
>  (libgmock.so+0x00000002dea7)
>     #20 testing::TestCase::Run() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2444:28
>  (libgmock.so+0x00000002eaf8)
>     #21 testing::internal::UnitTestImpl::RunAllTests() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:4315:43
>  (libgmock.so+0x000000038f51)
>     #22 bool 
> testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl,
>  bool>(testing::internal::UnitTestImpl*, bool 
> (testing::internal::UnitTestImpl::*)(), char const*) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2078:10
>  (libgmock.so+0x000000048df3)
>     #23 bool 
> testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl,
>  bool>(testing::internal::UnitTestImpl*, bool 
> (testing::internal::UnitTestImpl::*)(), char const*) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2114
>  (libgmock.so+0x000000048df3)
>     #24 testing::UnitTest::Run() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:3926:10
>  (libgmock.so+0x000000038988)
>     #25 RUN_ALL_TESTS() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/installed/tsan/include/gtest/gtest.h:2288:46
>  (libkudu_test_main.so+0x000000002acb)
>     #26 main 
> /home/jenkins-slave/workspace/kudu-2/src/kudu/util/test_main.cc:75:13 
> (libkudu_test_main.so+0x00000000255a)
>   Location is heap block of size 24 at 0x7d0800005e20 allocated by main 
> thread:
>     #0 operator new(unsigned long) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/llvm-3.9.0.src/projects/compiler-rt/lib/tsan/rtl/tsan_new_delete.cc:41
>  (kudu-admin-test+0x0000004c7713)
>     #1 std::__1::__allocate(unsigned long) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/installed/tsan/include/c++/v1/new:168:10
>  (kudu-admin-test+0x0000004d942e)
>     #2 std::__1::allocator<std::__1::basic_string<char, 
> std::__1::char_traits<char>, std::__1::allocator<char> > >::allocate(unsigned 
> long, void const*) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/installed/tsan/include/c++/v1/memory:1735
>  (kudu-admin-test+0x0000004d942e)
>     #3 
> std::__1::allocator_traits<std::__1::allocator<std::__1::basic_string<char, 
> std::__1::char_traits<char>, std::__1::allocator<char> > > 
> >::allocate(std::__1::allocator<std::__1::basic_string<char, 
> std::__1::char_traits<char>, std::__1::allocator<char> > >&, unsigned long) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/installed/tsan/include/c++/v1/memory:1490
>  (kudu-admin-test+0x0000004d942e)
>     #4 std::__1::__split_buffer<std::__1::basic_string<char, 
> std::__1::char_traits<char>, std::__1::allocator<char> >, 
> std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, 
> std::__1::allocator<char> > >&>::__split_buffer(unsigned long, unsigned long, 
> std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, 
> std::__1::allocator<char> > >&) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/installed/tsan/include/c++/v1/__split_buffer:311
>  (kudu-admin-test+0x0000004d942e)
>     #5 void std::__1::vector<std::__1::basic_string<char, 
> std::__1::char_traits<char>, std::__1::allocator<char> >, 
> std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, 
> std::__1::allocator<char> > > 
> >::__push_back_slow_path<std::__1::basic_string<char, 
> std::__1::char_traits<char>, std::__1::allocator<char> > 
> const&>(std::__1::basic_string<char, std::__1::char_traits<char>, 
> std::__1::allocator<char> > const&) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/installed/tsan/include/c++/v1/vector:1573:49
>  (kudu-admin-test+0x0000004d991d)
>     #6 std::__1::vector<std::__1::basic_string<char, 
> std::__1::char_traits<char>, std::__1::allocator<char> >, 
> std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, 
> std::__1::allocator<char> > > >::push_back(std::__1::basic_string<char, 
> std::__1::char_traits<char>, std::__1::allocator<char> > const&) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/installed/tsan/include/c++/v1/vector:1594:9
>  (libkudu_util.so+0x00000016cffb)
>     #7 kudu::(anonymous namespace)::ReadFdsFully(std::__1::basic_string<char, 
> std::__1::char_traits<char>, std::__1::allocator<char> > const&, 
> std::__1::vector<int, std::__1::allocator<int> > const&, 
> std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, 
> std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, 
> std::__1::char_traits<char>, std::__1::allocator<char> > > >*) 
> /home/jenkins-slave/workspace/kudu-2/src/kudu/util/subprocess.cc:237 
> (libkudu_util.so+0x00000016cffb)
>     #8 kudu::Subprocess::Call(std::__1::vector<std::__1::basic_string<char, 
> std::__1::char_traits<char>, std::__1::allocator<char> >, 
> std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, 
> std::__1::allocator<char> > > > const&, std::__1::basic_string<char, 
> std::__1::char_traits<char>, std::__1::allocator<char> >*, 
> std::__1::basic_string<char, std::__1::char_traits<char>, 
> std::__1::allocator<char> >*) 
> /home/jenkins-slave/workspace/kudu-2/src/kudu/util/subprocess.cc:497:3 
> (libkudu_util.so+0x00000016c8c1)
>     #9 kudu::tools::AdminCliTest_TestLeaderStepDown_Test::TestBody() 
> /home/jenkins-slave/workspace/kudu-2/src/kudu/tools/kudu-admin-test.cc:199:14 
> (kudu-admin-test+0x0000004cc43b)
>     #10 void 
> testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, 
> void>(testing::Test*, void (testing::Test::*)(), char const*) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2078:10
>  (libgmock.so+0x000000048243)
>     #11 void 
> testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, 
> void>(testing::Test*, void (testing::Test::*)(), char const*) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2114
>  (libgmock.so+0x000000048243)
>     #12 testing::Test::Run() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2150:5
>  (libgmock.so+0x00000002ce6f)
>     #13 testing::TestInfo::Run() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2326:11
>  (libgmock.so+0x00000002dea7)
>     #14 testing::TestCase::Run() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2444:28
>  (libgmock.so+0x00000002eaf8)
>     #15 testing::internal::UnitTestImpl::RunAllTests() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:4315:43
>  (libgmock.so+0x000000038f51)
>     #16 bool 
> testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl,
>  bool>(testing::internal::UnitTestImpl*, bool 
> (testing::internal::UnitTestImpl::*)(), char const*) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2078:10
>  (libgmock.so+0x000000048df3)
>     #17 bool 
> testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl,
>  bool>(testing::internal::UnitTestImpl*, bool 
> (testing::internal::UnitTestImpl::*)(), char const*) 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:2114
>  (libgmock.so+0x000000048df3)
>     #18 testing::UnitTest::Run() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/src/gmock-1.7.0/gtest/src/gtest.cc:3926:10
>  (libgmock.so+0x000000038988)
>     #19 RUN_ALL_TESTS() 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/installed/tsan/include/gtest/gtest.h:2288:46
>  (libkudu_test_main.so+0x000000002acb)
>     #20 main 
> /home/jenkins-slave/workspace/kudu-2/src/kudu/util/test_main.cc:75:13 
> (libkudu_test_main.so+0x00000000255a)
> SUMMARY: ThreadSanitizer: heap-use-after-free 
> /home/jenkins-slave/workspace/kudu-2/thirdparty/installed/tsan/include/c++/v1/string:2525:18
>  in std::__1::basic_string<char, std::__1::char_traits<char>, 
> std::__1::allocator<char> >::__move_assign(std::__1::basic_string<char, 
> std::__1::char_traits<char>, std::__1::allocator<char> >&, 
> std::__1::integral_constant<bool, true>)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to