]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/commit
metag/usercopy: Fix src fixup in from user rapf loops
authorJames Hogan <james.hogan@imgtec.com>
Mon, 3 Apr 2017 16:41:40 +0000 (17:41 +0100)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 21 Apr 2017 08:12:14 +0000 (10:12 +0200)
commita76590471c45f71184a3818c9d685c7acdfa6211
treef051f99dd7daa048d4d550fc6b8833e77bd98027
parente1ea981f4165199cee4036eee64ff652f0cedda3
metag/usercopy: Fix src fixup in from user rapf loops

BugLink: http://bugs.launchpad.net/bugs/1682130
commit 2c0b1df88b987a12d95ea1d6beaf01894f3cc725 upstream.

The fixup code to rewind the source pointer in
__asm_copy_from_user_{32,64}bit_rapf_loop() always rewound the source by
a single unit (4 or 8 bytes), however this is insufficient if the fault
didn't occur on the first load in the loop, as the source pointer will
have been incremented but nothing will have been stored until all 4
register [pairs] are loaded.

Read the LSM_STEP field of TXSTATUS (which is already loaded into a
register), a bit like the copy_to_user versions, to determine how many
iterations of MGET[DL] have taken place, all of which need rewinding.

Fixes: 373cd784d0fc ("metag: Memory handling")
Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: linux-metag@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
arch/metag/lib/usercopy.c