• Linus Torvalds's avatar
    autofs: use __kernel_write() for the autofs pipe writing · 90fb7027
    Linus Torvalds authored
    autofs got broken in some configurations by commit 13c164b1
    ("autofs: switch to kernel_write") because there is now an extra LSM
    permission check done by security_file_permission() in rw_verify_area().
    
    autofs is one if the few places that really does want the much more
    limited __kernel_write(), because the write is an internal kernel one
    that shouldn't do any user permission checks (it also doesn't need the
    file_start_write/file_end_write logic, since it's just a pipe).
    
    There are a couple of other cases like that - accounting, core dumping,
    and splice - but autofs stands out because it can be built as a module.
    
    As a result, we need to export this internal __kernel_write() function
    again.
    
    We really don't want any other module to use this, but we don't have a
    "EXPORT_SYMBOL_FOR_AUTOFS_ONLY()".  But we can mark it GPL-only to at
    least approximate that "internal use only" for licensing.
    
    While in this area, make autofs pass in NULL for the file position
    pointer, since it's always a pipe, and we now use a NULL file pointer
    for streaming file descriptors (see file_ppos() and commit 438ab720:
    "vfs: pass ppos=NULL to .read()/.write() of FMODE_STREAM files")
    
    This effectively reverts commits 9db97752 ("fs: unexport
    __kernel_write") and 13c164b1 ("autofs: switch to kernel_write").
    
    Fixes: 13c164b1 ("autofs: switch to kernel_write")
    Reported-by: default avatarOndrej Mosnacek <omosnace@redhat.com>
    Acked-by: default avatarChristoph Hellwig <hch@lst.de>
    Acked-by: default avatarAcked-by: Ian Kent <raven@themaw.net>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    90fb7027
read_write.c 53.5 KB