parisc: fix mmap(MAP_FIXED|MAP_SHARED) to already mmapped address
authorHelge Deller <deller@gmx.de>
Wed, 20 Nov 2013 22:07:42 +0000 (23:07 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 12 Dec 2013 06:36:27 +0000 (22:36 -0800)
commitca62ebe3b1b6f3c9835cf84d1ba6e1f091c39726
tree7e3785a42ec233f1f0efadfd686376508c7d404a
parentfa1a9f327eefbad2ac93a2c3ad0c7188f14a5ce5
parisc: fix mmap(MAP_FIXED|MAP_SHARED) to already mmapped address

commit 0576da2c08e3d332f1b0653030d28ab804585ab6 upstream.

locale-gen on Debian showed a strange problem on parisc:
mmap2(NULL, 536870912, PROT_NONE, MAP_SHARED, 3, 0) = 0x42a54000
mmap2(0x42a54000, 103860, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FIXED, 3, 0) = -1 EINVAL (Invalid argument)

Basically it was just trying to re-mmap() a file at the same address
which it was given by a previous mmap() call. But this remapping failed
with EINVAL.

The problem is, that when MAP_FIXED and MAP_SHARED flags were used, we didn't
included the mapping-based offset when we verified the alignment of the given
fixed address against the offset which we calculated it in the previous call.

Signed-off-by: Helge Deller <deller@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/parisc/kernel/sys_parisc.c