This bugzilla service is closed. All entries have been migrated to https://gitlab.com/libeigen/eigen

Bug 1411

Summary: Quaternion product crashes if EIGEN_DONT_ALIGN_STATICALLY is defined
Product: Eigen Reporter: Shuntaro Yamazaki <shuntaraw>
Component: GeometryAssignee: Nobody <eigen.nobody>
Status: RESOLVED FIXED    
Severity: Crash CC: chtz, gael.guennebaud, hauke.heibel, jacob.benoit.1
Priority: High    
Version: 3.4 (development)   
Hardware: x86 - SSE   
OS: All   
Whiteboard:
Attachments:
Description Flags
Patch none

Description Shuntaro Yamazaki 2017-03-28 03:50:51 UTC
Created attachment 783 [details]
Patch

SSE intrinsics can be called with unaligned pointers in quat_product::run, causing SegFault. The same applies to quat_conj::run.

$ cat qprod.cpp
#include <Eigen/Geometry>
int main() {
    Eigen::Quaterniond q1 = Eigen::Quaterniond(1,0,0,0);
    Eigen::Quaterniond q2 = Eigen::Quaterniond(1,0,0,0);
    Eigen::Quaterniond q = q1 * q2;
    return q.norm();
}

$ clang++ --version
clang version 3.7.0 (trunk 239477)
Target: x86_64-unknown-linux-gnu

$ clang++ -I. -DEIGEN_DONT_ALIGN_STATICALLY qprod.cpp

$ ./a.out 
Segmentation fault

Note that the above code may not cause SegFault if on-stack Quaternion objects happen to be 16-byte aligned. 

The issue seems to exist in the latest stable and development branches, and is solved by an attached patch. 

Thanks,
Shuntaro
Comment 1 Shuntaro Yamazaki 2017-05-09 13:02:59 UTC
Can anyone take a look at this report?
Comment 2 Shuntaro Yamazaki 2017-05-09 13:03:20 UTC
Can anyone take a look at this report?
Comment 3 Gael Guennebaud 2017-06-07 08:12:19 UTC
Thank you for the report and patch that I adapted to be more general:

https://bitbucket.org/eigen/eigen/commits/ecca45864eb6 (devel)
https://bitbucket.org/eigen/eigen/commits/19554c1ac9a5 (3.3)
Comment 4 Nobody 2019-12-04 16:55:02 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to gitlab.com's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.com/libeigen/eigen/issues/1411.