mmap: fix petty bug in anonymous shared mmap offset handling
authorTejun Heo <tj@kernel.org>
Wed, 3 Sep 2008 14:09:47 +0000 (16:09 +0200)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 4 Sep 2008 02:58:53 +0000 (19:58 -0700)
commitce36394269ccd9d1d286d6192ba09fa6894365e9
treefb235ff6ea1363ae4fd933e29268e76cdade5682
parentd210baf53b699fc61aa891c177b71d7082d3b957
mmap: fix petty bug in anonymous shared mmap offset handling

Anonymous mappings should ignore offset but shared anonymous mapping
forgot to clear it and makes the following legit test program trigger
SIGBUS.

 #include <sys/mman.h>
 #include <stdio.h>
 #include <errno.h>

 #define PAGE_SIZE 4096

 int main(void)
 {
 char *p;
 int i;

 p = mmap(NULL, 2 * PAGE_SIZE, PROT_READ|PROT_WRITE,
  MAP_SHARED|MAP_ANONYMOUS, -1, PAGE_SIZE);
 if (p == MAP_FAILED) {
 perror("mmap");
 return 1;
 }

 for (i = 0; i < 2; i++) {
 printf("page %d\n", i);
 p[i * 4096] = i;
 }
 return 0;
 }

Fix it.

Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Hugh Dickins <hugh@veritas.com>
Acked-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/mmap.c