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>