On 08/11/2017 08:23 AM, Rik van Riel wrote: > On Thu, 2017-08-10 at 17:23 +0200, Michal Hocko wrote: >> On Sun 06-08-17 10:04:25, Rik van Riel wrote: >> [...] >>> diff --git a/kernel/fork.c b/kernel/fork.c >>> index 17921b0390b4..db1fb2802ecc 100644 >>> --- a/kernel/fork.c >>> +++ b/kernel/fork.c >>> @@ -659,6 +659,13 @@ static __latent_entropy int dup_mmap(struct >>> mm_struct *mm, >>> tmp->vm_flags &= ~(VM_LOCKED | VM_LOCKONFAULT); >>> tmp->vm_next = tmp->vm_prev = NULL; >>> file = tmp->vm_file; >>> + >>> + /* With VM_WIPEONFORK, the child gets an empty >>> VMA. */ >>> + if (tmp->vm_flags & VM_WIPEONFORK) { >>> + tmp->vm_file = file = NULL; >>> + tmp->vm_ops = NULL; >>> + } >> >> What about VM_SHARED/|VM)MAYSHARE flags. Is it OK to keep the around? >> At >> least do_anonymous_page SIGBUS on !vm_ops && VM_SHARED. Or do I miss >> where those flags are cleared? > > Huh, good spotting. That makes me wonder why the test case that > Mike and I ran worked just fine on a MAP_SHARED|MAP_ANONYMOUS VMA, > and returned zero-filled memory when read by the child process. Well, I think I still got a BUG with a MAP_SHARED|MAP_ANONYMOUS vma on your v2 patch. Did not really want to start a discussion on the implementation until the issue of exactly what VM_WIPEONFORK was supposed to do was settled. > > OK, I'll do a minimal implementation for now, which will return > -EINVAL if MADV_WIPEONFORK is called on a VMA with MAP_SHARED > and/or an mmapped file. > > It will work the way it is supposed to with anonymous MAP_PRIVATE > memory, which is likely the only memory it will be used on, anyway. > Seems reasonable. You should also add VM_HUGETLB to those returning -EINVAL. IIRC, a VM_HUGETLB vma even without VM_SHARED expects vm_file != NULL. -- Mike Kravetz -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>