changing mmap() permissions

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Randy Kaelber
Date:  
Subject: changing mmap() permissions
Hello, all.

I have a question for the programmer crowd here:

I'm trying to implement a distributed shared memory system using network
sockets and mmap(). A problem I have run into is that I want to protect
segments of memory from being written to by a process. While it's easy
enough to mmap() a region read only, What I want to do is receive a
chunk of data from a remote process, mmap() it to a specific address,
and then make that block read-only, such that if a process tries to
write it after I've copied it in, it will get a seg fault. If I start
read only, I cannot copy data to the region at all.

What I currently have is this: I read the data from the network into a
mmap()ed read-write temp file, munmap() the region, and then re mmap()
the temp file to the same address, this time with read only access.
This works, but it is kind of a hack, IMO. I have all these temp files
hanging around that burn up disk needlessly. I'd like to mmap()
/dev/zero in read-write, copy the data in, and then change my
permissions on the region to read-only directly.

I've searched the 'net quite a bit for an answer, but none have been
forthcoming. Just mmap()ing over the already mmap()ed region returns an
error. Note that I *am* forcing a mmap() address (i.e. specifying a
start address and the MAP_FIXED flag), since my addresses need to be
synchronized over multiple systems, such that pointers point to where I
think they're pointing at.

-- 
Randy Kaelber                                       

Software Engineer  
Mars Space Flight Facility, Department of Geological Sciences
Arizona State University, Tempe, Arizona, USA


"Anarchy is the sure consequence of tyranny; for no power that is not
limited by laws can ever be protected by them." - Milton