• Miklos Szeredi's avatar
    vfs: fix permission checking in sys_utimensat · 02c6be61
    Miklos Szeredi authored
    If utimensat() is called with both times set to UTIME_NOW or one of them to
    UTIME_NOW and the other to UTIME_OMIT, then it will update the file time
    without any permission checking.
    
    I don't think this can be used for anything other than a local DoS, but could
    be quite bewildering at that (e.g.  "Why was that large source tree rebuilt
    when I didn't modify anything???")
    
    This affects all kernels from 2.6.22, when the utimensat() syscall was
    introduced.
    
    Fix by doing the same permission checking as for the "times == NULL" case.
    
    Thanks to Michael Kerrisk, whose utimensat-non-conformances-and-fixes.patch in
    -mm also fixes this (and breaks other stuff), only he didn't realize the
    security implications of this bug.
    Signed-off-by: default avatarMiklos Szeredi <mszeredi@suse.cz>
    Cc: Ulrich Drepper <drepper@redhat.com>
    Cc: Michael Kerrisk <mtk-manpages@gmx.net>
    Cc: <stable@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    02c6be61
utimes.c 5.57 KB