Unified · Split
| @@ -38,12 +38,13 @@ int tcc_relocate(TCCState *s1) · 37 unmodified lines | |||
| 38 | { | 38 | { |
| 39 | int ret; | 39 | int ret; |
| 40 | #ifdef HAVE_SELINUX | 40 | #ifdef HAVE_SELINUX |
| 41 | /* Use mmap instead of malloc for Selinux | ||
| 42 | Ref http://www.gnu.org/s/libc/manual/html_node/File-Size.html */ | ||
| 41 | char tmpfname[] = "/tmp/.tccrunXXXXXX"; | 43 | char tmpfname[] = "/tmp/.tccrunXXXXXX"; |
| 42 | int fd = mkstemp (tmpfname); | 44 | int fd = mkstemp (tmpfname); |
| 43 | unlink (tmpfname); ftruncate (fd, 1000); | ||
| 44 | if ((ret= tcc_relocate_ex(s1,NULL)) < 0)return -1; | 45 | if ((ret= tcc_relocate_ex(s1,NULL)) < 0)return -1; |
| 45 | s1->mem_size=ret; | 46 | s1->mem_size=ret; |
| 46 | /* Use mmap instead of malloc for Selinux */ | 47 | unlink (tmpfname); ftruncate (fd, s1->mem_size); |
| 47 | s1->write_mem = mmap (NULL, ret, PROT_READ|PROT_WRITE, | 48 | s1->write_mem = mmap (NULL, ret, PROT_READ|PROT_WRITE, |
| 48 | MAP_SHARED, fd, 0); | 49 | MAP_SHARED, fd, 0); |
| 49 | if(s1->write_mem == MAP_FAILED){ | 50 | if(s1->write_mem == MAP_FAILED){ |