On Fri, Feb 12, 2010 at 10:48:00AM +0300, Vadim Zhukov wrote:
> On 12 February 2010 P3. 03:31:22 Jordi Beltran Creix wrote:
> > Wouldn't that return EINVAL unless the address is aligned to the page
> > boundary?
>
> >From the man page:
> "The OpenBSD implementation of mprotect() does not require addr to be
> page-aligned". And code is agree, too.
>
> But the problem is not with the address itself, it's all about how to
> treat 0 passed as "len" parameter. I didn't checked behavior of other
> *BSD, but their mprotect(2) pages do not say anything about treating 0
> in "len" parameter at all. Linux manual is most clear: "The function
> mprotect specifies the desired protection for the memory page(s)
> containing part or all of the interval [addr,addr+len-1]".
I'm confused about the "[addr,addr+len-1]", cause based on
above wording (from Linux manual per you), len = 0 produces
a strange range.
As you specified in your original post, SUS says:
| The function mprotect() changes the access protections
| to be that specified by prot for those whole pages
| containing any part of the address space of the
| process starting at address addr and continuing for
| len bytes.
So if len = 0, then no pages are protected based on that
wording. Which, is what the OpenBSD man page says assuming
there was a typo and the word "no" is missing in the sentence:
| If len is 0, then action will be taken on the page
| that contains addr.
(should read)
| If len is 0, then no action will be taken on the page
| that contains addr.
--patrick