Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 Nov 2009 15:29:19 +0530
From:      Sharad Chandra <sharadc@in.niksun.com>
To:        freebsd-hackers@freebsd.org
Cc:        Manprit Singh <manprits@in.niksun.com>
Subject:   mprotect(2) clears the flag for whole page which causes program crash.
Message-ID:  <200911171529.20098.sharadc@in.niksun.com>

next in thread | raw e-mail | index | archive | help
--Boundary-00=_4PnALyOOKlA8Off
Content-Type: text/plain;
  charset="us-ascii"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Hi,

mportect clears the exec flag of whole page by which my program crashed. I am 
attaching sample code. It is performing below task

1) allocate memory1
2) allocate memory2
3) change permission of memory 1 and 2 to exec by mprotect.
4) clear the exec permission of memory 1 and free it.
5) execute the memory2 by mapping to pointer function.
6) clear the exec permission of memory 2 and free it.

Program crashed at step 5 if memory 1 and 2 are in same page.

$ uname -a
FreeBSD app164.in.niksun.com 7.2-RELEASE FreeBSD 7.2-RELEASE #0: Fri May  1 
07:18:07 UTC 2009     
root@driscoll.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  amd64

$ gcc -g -o test -Wall mprotect.c
$ ./test
mem1 at: 34369183888
mem2 at: 34369183892
address difference: 4
test_func1 function returned 0
test_func2 will crash here
Segmentation fault (core dumped)

Is it known bug or is there any workaround? How will a userland process make 
sure that process will not crash as malloc(3) can allocate where ever it get 
the memory free to use.

--
Thanks,
Sharad Chandra

--Boundary-00=_4PnALyOOKlA8Off--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200911171529.20098.sharadc>