I have allocated code using mmap, but unable to free it because of segmentation fault. I have done mprotect - PROT_WRITE to make it writable, but still, I am unable to free it. My code:
1 #include <stdio.h> 2 #include <memory.h> 3 #include <stdlib.h> 4 #include <unistd.h> 5 #include <sys/mman.h> 6 #include <sys/types.h> 7 #include <fcntl.h> 8 9 int main() 10 { 11 void * allocation; 12 size_t size; 13 static int devZerofd = -1; 14 15 if ( devZerofd == -1 ) { 16 devZerofd = open("/dev/zero", O_RDWR); 17 if ( devZerofd < 0 ) 18 perror("open() on /dev/zero failed"); 19 } 20 21 allocation = (caddr_t) mmap(0, 5000, PROT_READ|PROT_NONE, MAP_PRIVATE, devZerofd, 0); 22 23 if ( allocation == (caddr_t)-1 ) 24 fprintf(stderr, "mmap() failed "); 25 26 if ( mprotect((caddr_t)allocation, 5000, PROT_WRITE) < 0 ) 27 fprintf(stderr, "mprotect failed"); 28 else 29 printf("mprotect done: memory allocated at address %u\n",allocation); 30 31 strcpy(allocation,"Hello, how are you"); 32 puts(allocation); 33 34 if ( mprotect((caddr_t)allocation, 5000, PROT_WRITE) < 0 ) 35 fprintf(stderr, "mprotect failed"); 36 37 free(allocation); 38 39 } 40 41