The ->start_stack check in do_shmat() looks ugly and simply wrong.Acked-by: Manfred Spraul <manfred@xxxxxxxxxxxxxxxx>
1. ->start_stack is only valid right after exec(), the application
can switch to another stack and even unmap this area.
2. The reason for this check is not clear at all. The application
should know what it does. And why 4 pages? And why in fact it
requires 5 pages?
3. This wrongly assumes that the stack can only grown down.
Personally I think we should simply kill this check, but I did not
dare to do this. So the patch only fixes the 1st problem (mostly to
avoid the usage of mm->start_stack) and ignores VM_GROWSUP.
Signed-off-by: Oleg Nesterov <oleg@xxxxxxxxxx>
[snip]
+ if (vma) {Why is an overflow impossible?
+ if (vma->vm_flags & VM_GROWSDOWN)
+ end += PAGE_SIZE * 4; /* can't overflow */
+ if (end > vma->vm_start)--
+ goto invalid;
+ }
}
addr = do_mmap_pgoff(file, addr, size, prot, flags, 0, &populate);