AddressSanitizer: stack-buffer-overflow in TensorChippingOp/TensorBlockAssignment
Summary
AddressSanitizer: stack-buffer-overflow in TensorChippingOp/TensorBlockAssignment
Environment
- Operating System : Linux
- Architecture : x64
- Eigen Version : 3.4.0 and master (as 2021 december 21st)
- Compiler Version : Gcc 6.1
- Compile Flags : -O3 -march=corei7 -mno-fma4 -msse4.1 -msse4.2 -mpopcnt -mpclmul --param allow-store-data-races=1 -fcx-limited-range -funsafe-math-optimizations -fopenmp -falign-functions=1 -falign-loops=1 -falign-jumps=1 -falign-labels=1 -fomit-frame-pointer -fassociative-math -fno-signed-zeros -fno-trapping-math -fno-math-errno -freciprocal-math -fcx-limited-range -fno-signaling-nans -fno-rounding-math -funsafe-math-optimizations -mfpmath=sse -mavx512f -mavx512dq -mavx512cd -mavx512bw -mavx512vl -mfma
- Vector Extension : AVX512 (no failure in AVX2 build)
Minimal Example
o3d->chip(z, 2) = data_->chip(z, 2).contract(*weights, pd).eval() + bias->broadcast(bcVert);
Steps to reproduce
Will create and attach a minimalist main.cpp to repro.
What is the current bug behavior?
AddressSanitizer: stack-buffer-overflow
What is the expected correct behavior?
No ASAN failure
Relevant logs
ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffdaa344420 at pc 0x7f92bb8021d1 bp 0x7ffdaa3441a0 sp 0x7ffdaa344198
WRITE of size 8 at 0x7ffdaa344420 thread T0
#0 0x7f92bb8021d0 in Eigen::internal::TensorBlockAssignment<float, 3, Eigen::TensorReshapingOp<Eigen::DSizes<long, 3> const, Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_sum_op<float, float>, Eigen::TensorMap<Eigen::Tensor<float, 2, 0, long> const, 0, Eigen::MakePointer> const, Eigen::TensorMap<Eigen::Tensor<float, 2, 0, long> const, 0, Eigen::MakePointer> const> const>, long>::BlockIteratorState::BlockIteratorState()
unsupported/Eigen/CXX11/src/Tensor/TensorBlock.h:1545
#1 0x7f92bb7f3373 in std::array<Eigen::internal::TensorBlockAssignment<float, 3, Eigen::TensorReshapingOp<Eigen::DSizes<long, 3> const, Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_sum_op<float, float>, Eigen::TensorMap<Eigen::Tensor<float, 2, 0, long> const, 0, Eigen::MakePointer> const, Eigen::TensorMap<Eigen::Tensor<float, 2, 0, long> const, 0, Eigen::MakePointer> const> const>, long>::BlockIteratorState, 3ul>::array()
gcc-6.1.0/include/c++/6.1.0/array:90
#2 0x7f92bb7f37e9 in Eigen::internal::TensorBlockAssignment<float, 3, Eigen::TensorReshapingOp<Eigen::DSizes<long, 3> const, Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_sum_op<float, float>, Eigen::TensorMap<Eigen::Tensor<float, 2, 0, long> const, 0, Eigen::MakePointer> const, Eigen::TensorMap<Eigen::Tensor<float, 2, 0, long> const, 0, Eigen::MakePointer> const> const>, long>::Run(Eigen::internal::TensorBlockAssignment<float, 3, Eigen::TensorReshapingOp<Eigen::DSizes<long, 3> const, Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_sum_op<float, float>, Eigen::TensorMap<Eigen::Tensor<float, 2, 0, long> const, 0, Eigen::MakePointer> const, Eigen::TensorMap<Eigen::Tensor<float, 2, 0, long> const, 0, Eigen::MakePointer> const> const>, long>::Target const&, Eigen::TensorReshapingOp<Eigen::DSizes<long, 3> const, Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_sum_op<float, float>, Eigen::TensorMap<Eigen::Tensor<float, 2, 0, long> const, 0, Eigen::MakePointer> const, Eigen::TensorMap<Eigen::Tensor<float, 2, 0, long> const, 0, Eigen::MakePointer> const> const> const&)
unsupported/Eigen/CXX11/src/Tensor/TensorBlock.h:1501
#3 0x7f92bb7dd704 in void Eigen::TensorEvaluator<Eigen::TensorChippingOp<-1l, Eigen::Tensor<float, 3, 0, long> >, Eigen::DefaultDevice>::writeBlock<Eigen::internal::TensorCwiseBinaryBlock<Eigen::internal::scalar_sum_op<float, float>, Eigen::internal::TensorMaterializedBlock<float, 2, 0, long>, Eigen::internal::TensorMaterializedBlock<float, 2, 0, long> > >(Eigen::internal::TensorBlockDescriptor<2, long> const&, Eigen::internal::TensorCwiseBinaryBlock<Eigen::internal::scalar_sum_op<float, float>, Eigen::internal::TensorMaterializedBlock<float, 2, 0, long>, Eigen::internal::TensorMaterializedBlock<float, 2, 0, long> > const&)
unsupported/Eigen/CXX11/src/Tensor/TensorChipping.h:506
#4 0x7f92bb7cf9cd in Eigen::TensorEvaluator<Eigen::TensorAssignOp<Eigen::TensorChippingOp<-1l, Eigen::Tensor<float, 3, 0, long> >, Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_sum_op<float, float>, Eigen::TensorForcedEvalOp<Eigen::TensorContractionOp<std::array<Eigen::IndexPair<long>, 1ul> const, Eigen::TensorChippingOp<-1l, Eigen::Tensor<float, 3, 0, long> > const, Eigen::Tensor<float, 2, 0, long> const, Eigen::NoOpOutputKernel const> const> const, Eigen::TensorBroadcastingOp<std::array<long, 2ul> const, Eigen::Tensor<float, 2, 0, long> const> const> const> const, Eigen::DefaultDevice>::evalBlock(Eigen::internal::TensorBlockDescriptor<2, long>&, Eigen::internal::TensorBlockScratchAllocator<Eigen::DefaultDevice>&)
unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h:224
#5 0x7f92bb7c11fb in Eigen::internal::TensorExecutor<Eigen::TensorAssignOp<Eigen::TensorChippingOp<-1l, Eigen::Tensor<float, 3, 0, long> >, Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_sum_op<float, float>, Eigen::TensorForcedEvalOp<Eigen::TensorContractionOp<std::array<Eigen::IndexPair<long>, 1ul> const, Eigen::TensorChippingOp<-1l, Eigen::Tensor<float, 3, 0, long> > const, Eigen::Tensor<float, 2, 0, long> const, Eigen::NoOpOutputKernel const> const> const, Eigen::TensorBroadcastingOp<std::array<long, 2ul> const, Eigen::Tensor<float, 2, 0, long> const> const> const> const, Eigen::DefaultDevice, true, (Eigen::internal::TiledEvaluation)1>::run(Eigen::TensorAssignOp<Eigen::TensorChippingOp<-1l, Eigen::Tensor<float, 3, 0, long> >, Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_sum_op<float, float>, Eigen::TensorForcedEvalOp<Eigen::TensorContractionOp<std::array<Eigen::IndexPair<long>, 1ul> const, Eigen::TensorChippingOp<-1l, Eigen::Tensor<float, 3, 0, long> > const, Eigen::Tensor<float, 2, 0, long> const, Eigen::NoOpOutputKernel const> const> const, Eigen::TensorBroadcastingOp<std::array<long, 2ul> const, Eigen::Tensor<float, 2, 0, long> const> const> const> const&, Eigen::DefaultDevice const&)
unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h:206
#6 0x7f92bb7b6bda in Eigen::TensorChippingOp<-1l, Eigen::Tensor<float, 3, 0, long> >& Eigen::TensorBase<Eigen::TensorChippingOp<-1l, Eigen::Tensor<float, 3, 0, long> >, 1>::operator=<Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_sum_op<float, float>, Eigen::TensorForcedEvalOp<Eigen::TensorContractionOp<std::array<Eigen::IndexPair<long>, 1ul> const, Eigen::TensorChippingOp<-1l, Eigen::Tensor<float, 3, 0, long> > const, Eigen::Tensor<float, 2, 0, long> const, Eigen::NoOpOutputKernel const> const> const, Eigen::TensorBroadcastingOp<std::array<long, 2ul> const, Eigen::Tensor<float, 2, 0, long> const> const> >(Eigen::TensorCwiseBinaryOp<Eigen::internal::scalar_sum_op<float, float>, Eigen::TensorForcedEvalOp<Eigen::TensorContractionOp<std::array<Eigen::IndexPair<long>, 1ul> const, Eigen::TensorChippingOp<-1l, Eigen::Tensor<float, 3, 0, long> > const, Eigen::Tensor<float, 2, 0, long> const, Eigen::NoOpOutputKernel const> const> const, Eigen::TensorBroadcastingOp<std::array<long, 2ul> const, Eigen::Tensor<float, 2, 0, long> const> const> const&)
unsupported/Eigen/CXX11/src/Tensor/TensorBase.h:1164
-
Have a plan to fix this issue.