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:
Tejun Heo <tj@kernel.org>
Acked-by:  Hugh Dickins <hugh@veritas.com>
Acked-by:
Hugh Dickins <hugh@veritas.com>
Acked-by:  KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Signed-off-by:
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Signed-off-by:  Linus Torvalds <torvalds@linux-foundation.org>
Linus Torvalds <torvalds@linux-foundation.org>
Loading
Please register or sign in to comment
