• David Howells's avatar
    cachefiles: Fix volume coherency attribute · 413a4a6b
    David Howells authored
    A network filesystem may set coherency data on a volume cookie, and if
    given, cachefiles will store this in an xattr on the directory in the
    cache corresponding to the volume.
    
    The function that sets the xattr just stores the contents of the volume
    coherency buffer directly into the xattr, with nothing added; the
    checking function, on the other hand, has a cut'n'paste error whereby it
    tries to interpret the xattr contents as would be the xattr on an
    ordinary file (using the cachefiles_xattr struct).  This results in a
    failure to match the coherency data because the buffer ends up being
    shifted by 18 bytes.
    
    Fix this by defining a structure specifically for the volume xattr and
    making both the setting and checking functions use it.
    
    Since the volume coherency doesn't work if used, take the opportunity to
    insert a reserved field for future use, set it to 0 and check that it is
    0.  Log mismatch through the appropriate tracepoint.
    
    Note that this only affects cifs; 9p, afs, ceph and nfs don't use the
    volume coherency data at the moment.
    
    Fixes: 32e15003 ("fscache, cachefiles: Store the volume coherency data")
    Reported-by: default avatarRohith Surabattula <rohiths.msft@gmail.com>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
    cc: Steve French <smfrench@gmail.com>
    cc: linux-cifs@vger.kernel.org
    cc: linux-cachefs@redhat.com
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    413a4a6b
cachefiles.h 18.6 KB