wrong parameter passed to ceph_zero_pape_vector_range() in striped_read() of fs/ceph/file.c
A bug is found in striped_read() of fs/ceph/file.c.
striped_read() calls ceph_zero_pape_vector_range() at line 359.
The first argument, page_align + read + ret, passed to ceph_zero_pape_vector_range()
When a file has holes, this wrong parameter may cause memory corruption either in kernal
space or user space. Kernel space memory may be corrupted in the case of non direct IO;
user space memory may be corrupted in the case of direct IO. In the latter case, the application
doing direct IO may crash due to memory corruption, as we have experienced.
The correct value should be initial_align + read + ret, where intial_align = o_direct ? buf_align : io_align.
Compared with page_align, the current page offest, initial_align is the initial page offest, which
should be used to calculate the page and offset in ceph_zero_pape_vector_range().
#3 Updated by Greg Farnum over 8 years ago
Zheng, we've got a new failing directio test at http://qa-proxy.ceph.com/teuthology/teuthology-2014-12-28_23:08:01-kcephfs-next-testing-basic-multi/682654/, could this be the cause?