On Tue, 13 Oct 2020 15:37:40 +1100, Michael Neuling wrote: > __get_user_atomic_128_aligned() stores to kaddr using stvx which is a > VMX store instruction, hence kaddr must be 16 byte aligned otherwise > the store won't occur as expected. > > Unfortunately when we call __get_user_atomic_128_aligned() in > p9_hmi_special_emu(), the buffer we pass as kaddr (ie. vbuf) isn't > guaranteed to be 16B aligned. This means that the write to vbuf in > __get_user_atomic_128_aligned() has the bottom bits of the address > truncated. This results in other local variables being > overwritten. Also vbuf will not contain the correct data which results > in the userspace emulation being wrong and hence user data corruption. > > [...]
Applied to powerpc/fixes. [1/2] powerpc: Fix undetected data corruption with P9N DD2.1 VSX CI load emulation https://git.kernel.org/powerpc/c/1da4a0272c5469169f78cd76cf175ff984f52f06 [2/2] selftests/powerpc: Make alignment handler test P9N DD2.1 vector CI load workaround https://git.kernel.org/powerpc/c/d1781f23704707d350b8c9006e2bdf5394bf91b2 cheers