Message ID | 20201017231418.twQriq6_i%akpm@linux-foundation.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [01/40] ia64: fix build error with !COREDUMP | expand |
On Sun, Oct 18, 2020 at 1:14 AM Andrew Morton <akpm@linux-foundation.org> wrote: > From: Jann Horn <jannh@google.com> > Subject: mm/gup: assert that the mmap lock is held in __get_user_pages() > > After having cleaned up all GUP callers (except for the atomisp staging > driver, which currently gets mmap locking completely wrong [1]) to always > ensure that they hold the mmap lock when calling into GUP (unless the mm > is not yet globally visible), add an assertion to make sure it stays that > way going forward. Please hold this patch until the replacement for the previous patch in the series (original patch mmap-locking-api-dont-check-locking-if-the-mm-isnt-live-yet, which you are already holding back, and which is replaced by the series https://lore.kernel.org/linux-mm/20201016225713.1971256-1-jannh@google.com/ "Broad write-locking of nascent mm in execve") has gone into the mm tree. Otherwise I believe that this mmap_assert_lock() will cause new lockdep warnings in places like copy_strings(). (Going forward, is there something I should do differently if a similar issue happens again with a series of patches that has already landed in the mm tree but where, after further discussion, parts should be replaced?) > [1] https://lore.kernel.org/lkml/CAG48ez3tZAb9JVhw4T5e-i=h2_DUZxfNRTDsagSRCVazNXx5qA@mail.gmail.com/ > > Link: https://lkml.kernel.org/r/CAG48ez1GM==OnHpS=ghqZNJPn02FCDUEHc7GQmGRMXUD_aKudg@mail.gmail.com > Signed-off-by: Jann Horn <jannh@google.com> > Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> > Acked-by: Michel Lespinasse <walken@google.com> > Cc: "Eric W . Biederman" <ebiederm@xmission.com> > Cc: John Hubbard <jhubbard@nvidia.com> > Cc: Mauro Carvalho Chehab <mchehab@kernel.org> > Cc: Sakari Ailus <sakari.ailus@linux.intel.com> > Signed-off-by: Andrew Morton <akpm@linux-foundation.org> > --- > > mm/gup.c | 2 ++ > 1 file changed, 2 insertions(+) > > --- a/mm/gup.c~mm-gup-assert-that-the-mmap-lock-is-held-in-__get_user_pages > +++ a/mm/gup.c > @@ -1027,6 +1027,8 @@ static long __get_user_pages(struct mm_s > struct vm_area_struct *vma = NULL; > struct follow_page_context ctx = { NULL }; > > + mmap_assert_locked(mm); > + > if (!nr_pages) > return 0; > > _
--- a/mm/gup.c~mm-gup-assert-that-the-mmap-lock-is-held-in-__get_user_pages +++ a/mm/gup.c @@ -1027,6 +1027,8 @@ static long __get_user_pages(struct mm_s struct vm_area_struct *vma = NULL; struct follow_page_context ctx = { NULL }; + mmap_assert_locked(mm); + if (!nr_pages) return 0;