https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=236379

            Bug ID: 236379
           Summary: [FUSE] fuse(4) writes from aio(4) don't set the
                    fuse_out_header.pid field correctly
           Product: Base System
           Version: CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Many People
          Priority: ---
         Component: kern
          Assignee: b...@freebsd.org
          Reporter: asom...@freebsd.org

Every FUSE operation includes the pid of the process that issued the request. 
However, when an aiod kernel process writes to a fuse-backed file on behalf of
a regular user process, fuse(4) only sees aiod's pid_t, not the user process's.
 This can cause a fuse filesystem daemon to incorrectly authenticate write
commands

There are three possible solutions:
1) Set the pid field correctly.  The aio daemon already keeps track of it,
   but doesn't send that information to fuse(4).  It's not obvious how.
   a) Perhaps stuff it into a spare field in struct ucred?
   b) Define custom fileops for fuse and store the pid that opened a file in
      struct file.f_data?  But this would cause problems when sending a file
      descriptor from one process to another with sendmsg.
2) Set FUSE_WRITE_CACHE, just like writes from the pager.  Currently, however,
   fuse(4) isn't aware of which operations come from aiod.
3) Alternatively, since FUSE_WRITE is an asynchronous operation, aio(4)
   could learn to bypass VOP_WRITE and use a threadless direct dispatch like
   it currently does for disks.  That would improve performance, too.

This bug probably applies to aio reads as well, but I haven't checked yet.

-- 
You are receiving this mail because:
You are the assignee for the bug.
_______________________________________________
freebsd-bugs@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to