Merge branch 'readdir' (readdir speedup and sanity checking)
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 5 Oct 2019 19:03:27 +0000 (12:03 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 5 Oct 2019 19:03:27 +0000 (12:03 -0700)
commit4f11918ab93bc113ec0831ed2ab7b88847d44dd7
tree22797fff6fee92d376f06de6462533a117a1d68b
parent9819a30c11ea439e5e3c81f5539c4d42d6c76314
parent8a23eb804ca4f2be909e372cf5a9e7b30ae476cd
Merge branch 'readdir' (readdir speedup and sanity checking)

This makes getdents() and getdents64() do sanity checking on the
pathname that it gives to user space.  And to mitigate the performance
impact of that, it first cleans up the way it does the user copying, so
that the code avoids doing the SMAP/PAN updates between each part of the
dirent structure write.

I really wanted to do this during the merge window, but didn't have
time.  The conversion of filldir to unsafe_put_user() is something I've
had around for years now in a private branch, but the extra pathname
checking finally made me clean it up to the point where it is mergable.

It's worth noting that the filename validity checking really should be a
bit smarter: it would be much better to delay the error reporting until
the end of the readdir, so that non-corrupted filenames are still
returned.  But that involves bigger changes, so let's see if anybody
actually hits the corrupt directory entry case before worrying about it
further.

* branch 'readdir':
  Make filldir[64]() verify the directory entry filename is valid
  Convert filldir[64]() from __put_user() to unsafe_put_user()