Re: [PATCH 00/15] Tidy up file permission hooks

Amir Goldstein
2023-11-14T15:36:03Z

On Tue, Nov 14, 2023 at 5:32 PM Amir Goldstein <amir73il@gmail.com> wrote:
>
> Hi Christian,
>

OOPS, posted to the wrong list.
Re-posting to fsdevel.

Sorry for the noise.

Amir.

> I realize you won't have time to review this week, but wanted to get
> this series out for review for a wider audience soon.
>
> During my work on fanotify "pre content" events [1], Jan and I noticed
> some inconsistencies in the call sites of security_file_permission()
> hooks inside rw_verify_area() and remap_verify_area().
>
> The majority of call sites are before file_start_write(), which is how
> we want them to be for fanotify "pre content" events.
>
> For splice code, there are many duplicate calls to rw_verify_area()
> for the entire range as well as for partial ranges inside iterator.
>
> This cleanup series, mostly following Jan's suggestions, moves all
> the security_file_permission() hooks before file_start_write() and
> eliminates duplicate permission hook calls in the same call chain.
>
> The last 3 patches are helpers that I used in fanotify patches to
> assert that permission hooks are called with expected locking scope.
>
> My hope is to get this work reviewed and staged in the vfs tree
> for the 6.8 cycle, so that I can send Jan fanotify patches for
> "pre content" events based on a stable branch in the vfs tree.
>
> Thanks,
> Amir.
>
> [1] https://github.com/amir73il/linux/commits/fan_pre_content
>
> Amir Goldstein (15):
> ovl: add permission hooks outside of do_splice_direct()
> splice: remove permission hook from do_splice_direct()
> splice: move permission hook out of splice_direct_to_actor()
> splice: move permission hook out of splice_file_to_pipe()
> splice: remove permission hook from iter_file_splice_write()
> remap_range: move permission hooks out of do_clone_file_range()
> remap_range: move file_start_write() to after permission hook
> btrfs: move file_start_write() to after permission hook
> fs: move file_start_write() into vfs_iter_write()
> fs: move permission hook out of do_iter_write()
> fs: move permission hook out of do_iter_read()
> fs: move kiocb_start_write() into vfs_iocb_iter_write()
> fs: create __sb_write_started() helper
> fs: create file_write_started() helper
> fs: create {sb,file}_write_not_started() helpers
>
> drivers/block/loop.c | 2 -
> fs/btrfs/ioctl.c | 12 +--
> fs/cachefiles/io.c | 2 -
> fs/coda/file.c | 4 +-
> fs/internal.h | 8 +-
> fs/nfsd/vfs.c | 7 +-
> fs/overlayfs/copy_up.c | 26 ++++++-
> fs/overlayfs/file.c | 3 -
> fs/read_write.c | 164 +++++++++++++++++++++++++++--------------
> fs/remap_range.c | 48 ++++++------
> fs/splice.c | 78 ++++++++++++--------
> include/linux/fs.h | 62 +++++++++++++++-
> 12 files changed, 279 insertions(+), 137 deletions(-)
>
> --
> 2.34.1
>