]> git.ipfire.org Git - people/ms/linux.git/blobdiff - mm/madvise.c
mm: madvise: skip unmapped vma holes passed to process_madvise
[people/ms/linux.git] / mm / madvise.c
index df59937c75e3e8812eca2939ea1a0572e81aeb6f..89490c859c3ffa1d887476008cedf3b7814ad7fb 100644 (file)
@@ -1428,9 +1428,16 @@ SYSCALL_DEFINE5(process_madvise, int, pidfd, const struct iovec __user *, vec,
 
        while (iov_iter_count(&iter)) {
                iovec = iov_iter_iovec(&iter);
+               /*
+                * do_madvise returns ENOMEM if unmapped holes are present
+                * in the passed VMA. process_madvise() is expected to skip
+                * unmapped holes passed to it in the 'struct iovec' list
+                * and not fail because of them. Thus treat -ENOMEM return
+                * from do_madvise as valid and continue processing.
+                */
                ret = do_madvise(mm, (unsigned long)iovec.iov_base,
                                        iovec.iov_len, behavior);
-               if (ret < 0)
+               if (ret < 0 && ret != -ENOMEM)
                        break;
                iov_iter_advance(&iter, iovec.iov_len);
        }