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.