Path: gmd.de!newsserver.jvnc.net!howland.reston.ans.net!usc!cs.utexas.edu!
uunet!news.univie.ac.at!info.univie.ac.at!trick.ani.univie.ac.at!bernhard
From: bernh...@trick.ani.univie.ac.at (Bernhard Strassl)
Newsgroups: comp.os.linux.development
Subject: *NO* HELP w/ mprotect() ???
Date: 10 Sep 1993 07:14:06 GMT
Organization: Vienna University Computer Center, Austria
Lines: 83
Distribution: world
Message-ID: <26p9fu$dj9@infosrv.edvz.univie.ac.at>
NNTP-Posting-Host: trick.ani.univie.ac.at
Recently I saw two postings from people that asked for the
implementation of the mprotect() system call (I include the
SUN man page below).
I also need this call to get the 'Texas object storage' running
on my Linux PC at home (it seems to work fine on our SUNs here)
and I waited for an answer of some Linux guru.
But there was absolutely no response to these requests (at least
on our news server) so I call for help again:
Please can anyone who is familar with the implementation of the
Linux virtual memory management post/mail me the source for
such a function?
I had a look at the kernel mmap() sources (I run a very old 0.99pl6
version of Linux which has this function only partially working) and
I think it will not be much work for a person who knows how the
memory tables are organized. (I would have to spend too much time to
find it out by myself.)
Many thanks in advance!
-bernhard
---------------------------------------------------------------
The Xm++ / CommonInteract Project
Vienna User Interface Group
Bernhard Strassl University of Vienna
xmp...@ani.univie.ac.at Dpt. for Applied Computer Science
and Information Systems
---------------------------------------------------------------
MPROTECT(2) SYSTEM CALLS MPROTECT(2)
NAME
mprotect - set protection of memory mapping
SYNOPSIS
#include <sys/mman.h>
mprotect(addr, len, prot)
caddr_t addr;
int len, prot;
DESCRIPTION
mprotect() changes the access protections on the mappings
specified by the range [addr, addr + len) to be that speci-
fied by prot. Legitimate values for prot are the same as
those permitted for mmap(2).
RETURN VALUES
mprotect() returns:
0 on success.
-1 on failure and sets errno to indicate the error.
ERRORS
EACCES prot specifies a protection which violates
the access permission the process has to the
underlying memory object.
EINVAL addr is not a multiple of the page size as
returned by getpagesize(2).
ENOMEM Addresses in the range [addr, addr + len) are
invalid for the address space of a process,
or specify one or more pages which are not
mapped.
When mprotect() fails for reasons other than EINVAL, the
protections on some of the pages in the range [addr, addr +
len) will have been changed. If the error occurs on some
page at address addr2, then the protections of all whole
pages in the range [addr, addr2) have been modified.
SEE ALSO
getpagesize(2), mmap(2)
Sun Release 4.1 Last change: 21 January 1990 1
Newsgroups: comp.os.linux.development
Path: gmd.de!newsserver.jvnc.net!howland.reston.ans.net!europa.eng.gtefsd.com!
darwin.sura.net!dtix.dt.navy.mil!cs.umd.edu!ra!tantalus.nrl.navy.mil!eric
From: e...@tantalus.nrl.navy.mil (Eric Youngdale)
Subject: Re: *NO* HELP w/ mprotect() ???
Message-ID: <CD5L5u.Czp@ra.nrl.navy.mil>
Sender: use...@ra.nrl.navy.mil
Organization: Naval Research Laboratory
References: <26p9fu$dj9@infosrv.edvz.univie.ac.at>
Date: Fri, 10 Sep 1993 19:37:05 GMT
Lines: 38
In article <26p9fu$...@infosrv.edvz.univie.ac.at>
bernh...@trick.ani.univie.ac.at (Bernhard Strassl) writes:
>
>Recently I saw two postings from people that asked for the
>implementation of the mprotect() system call (I include the
>SUN man page below).
>
>I also need this call to get the 'Texas object storage' running
>on my Linux PC at home (it seems to work fine on our SUNs here)
>and I waited for an answer of some Linux guru.
>
>But there was absolutely no response to these requests (at least
>on our news server) so I call for help again:
>
>Please can anyone who is familar with the implementation of the
>Linux virtual memory management post/mail me the source for
>such a function?
>I had a look at the kernel mmap() sources (I run a very old 0.99pl6
>version of Linux which has this function only partially working) and
>I think it will not be much work for a person who knows how the
>memory tables are organized. (I would have to spend too much time to
>find it out by myself.)
First of all, I would suggest that you get pl12 or pl13 (once it is
out). There have been a number of changes to the memory manager recently which
would make it much easier to implent a mprotect function. I suggest that you
start with mm/mmap.c in the function sys_munmap, and modify this to do the job.
There will be two things you will need to do. First you will need to
modify the protection stored in the vm_area_struct so that new pages faulted in
get the correct protection. You will also need to sweep through and modify the
protections of all of the pages currently in memory in the current range.
All in all, it should not be that hard.
-Eric
--
"When Gregor Samsa woke up one morning from unsettling dreams, he
found himself changed in his bed into a lawyer."