minor mmap bug ?

From: John Levon (moz@compsoc.man.ac.uk)
Date: Wed Oct 03 2001 - 22:00:35 EST


2.4.10

In do_mmap_pgoff() :

    422 addr = get_unmapped_area(file, addr, len, pgoff, flags);
    423 if (addr & ~PAGE_MASK)
    424 return addr;

in get_unmapped_area() :

    621 if (flags & MAP_FIXED) {
    622 if (addr > TASK_SIZE - len)
    623 return -EINVAL;
    624 if (addr & ~PAGE_MASK)
    625 return -EINVAL;
    626 return addr;
    627 }

So it seems that if we hit the first case (addr > TASK_SIZE - len),
we don't return with EINVAL immediately. This code is a little weird anyway.

Is this a bug ?

Also, what's the reason for :

    405 if ((len = PAGE_ALIGN(len)) == 0)
    406 return addr;

Also, shouldn't calc_vm_flags() mention MAP_LOCKED and the others specifically ?
The current "oh, it happens to be the same value" is distinctly non-obvious to me.

Also, why do several (all ?) of the do_mmap2()s do this :

     51 flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);

Is it something to do with mm->def_flags ?

thanks
john

-- 
" It is quite humbling to realize that the storage occupied by the longest line
from a typical Usenet posting is sufficient to provide a state space so vast
that all the computation power in the world can not conquer it."
	- Dave Wallace
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Oct 07 2001 - 21:00:30 EST