• Eric Biggers's avatar
    fsverity: use EFBIG for file too large to enable verity · 55eed69c
    Eric Biggers authored
    
    
    Currently, there is an implementation limit where files can't have more
    than 8 Merkle tree levels.  With SHA-256 and 4K blocks, this limit is
    never reached, since a file would need to be larger than 2**64 bytes to
    need 9 levels.  However, with SHA-512, 9 levels are needed for files
    larger than about 1.15 EB, which is possible on btrfs.  Therefore, this
    limit technically became reachable when btrfs added fsverity support.
    
    Meanwhile, support for merkle_tree_block_size < PAGE_SIZE will introduce
    another implementation limit on file size, resulting from the use of an
    in-memory bitmap to track which Merkle tree blocks have been verified.
    
    In any case, currently FS_IOC_ENABLE_VERITY fails with EINVAL when the
    file is too large.  This is undocumented, and also ambiguous since
    EINVAL can mean other things too.  Let's change the error code to EFBIG,
    which is much clearer, and document it.
    Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
    Reviewed-by: default avatarAndrey Albershteyn <aalbersh@redhat.com>
    Tested-by: default avatarOjaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://lore.kernel.org/r/20221223203638.41293-5-ebiggers@kernel.org
    55eed69c
open.c 9.49 KB