Uploaded image for project: 'Apache Arrow'
  1. Apache Arrow
  2. ARROW-10914

[Rust]: SIMD implementation of arithmetic kernels reads out of bounds

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 3.0.0
    • Rust

    Description

      The simd arithmetic kernels use the following pattern repeatedly:

          for i in (0..left.len()).step_by(lanes) { ... }
      

      If len is not a multiple of the number of lanes, this would read out of bounds in the last iteration. Currently, all buffers have an additional padding of 64 bytes (equal to the simd width), which masks this problem in most tests. As soon as we use a slice of an array, it should however be reproducible even with this padding.

      Even without a crash, the issue is detectable with valgrind:

      ==31106== Invalid read of size 32
      ==31106==    at 0x1ECEE1: arrow::compute::kernels::arithmetic::add::hfded8b2c06cf22de (in /home/joernhorstmann/Source/github/apache/arrow/rust/target/release/deps/arrow-205580f93d58d5a9)
      ==31106==    by 0x2650EF: arrow::compute::kernels::arithmetic::tests::test_arithmetic_kernel_should_not_rely_on_padding::hacb7c7921dc38e6a (in /home/joernhorstmann/Source/github/apache/arrow/rust/target/release/deps/arrow-205580f93d58d5a9)
      

      Attachments

        Issue Links

          Activity

            People

              jhorstmann Jörn Horstmann
              jhorstmann Jörn Horstmann
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 40m
                  40m