| .. SPDX-License-Identifier: GPL-2.0 | 
 |  | 
 | Verity files | 
 | ------------ | 
 |  | 
 | ext4 supports fs-verity, which is a filesystem feature that provides | 
 | Merkle tree based hashing for individual readonly files.  Most of | 
 | fs-verity is common to all filesystems that support it; see | 
 | :ref:`Documentation/filesystems/fsverity.rst <fsverity>` for the | 
 | fs-verity documentation.  However, the on-disk layout of the verity | 
 | metadata is filesystem-specific.  On ext4, the verity metadata is | 
 | stored after the end of the file data itself, in the following format: | 
 |  | 
 | - Zero-padding to the next 65536-byte boundary.  This padding need not | 
 |   actually be allocated on-disk, i.e. it may be a hole. | 
 |  | 
 | - The Merkle tree, as documented in | 
 |   :ref:`Documentation/filesystems/fsverity.rst | 
 |   <fsverity_merkle_tree>`, with the tree levels stored in order from | 
 |   root to leaf, and the tree blocks within each level stored in their | 
 |   natural order. | 
 |  | 
 | - Zero-padding to the next filesystem block boundary. | 
 |  | 
 | - The verity descriptor, as documented in | 
 |   :ref:`Documentation/filesystems/fsverity.rst <fsverity_descriptor>`, | 
 |   with optionally appended signature blob. | 
 |  | 
 | - Zero-padding to the next offset that is 4 bytes before a filesystem | 
 |   block boundary. | 
 |  | 
 | - The size of the verity descriptor in bytes, as a 4-byte little | 
 |   endian integer. | 
 |  | 
 | Verity inodes have EXT4_VERITY_FL set, and they must use extents, i.e. | 
 | EXT4_EXTENTS_FL must be set and EXT4_INLINE_DATA_FL must be clear. | 
 | They can have EXT4_ENCRYPT_FL set, in which case the verity metadata | 
 | is encrypted as well as the data itself. | 
 |  | 
 | Verity files cannot have blocks allocated past the end of the verity | 
 | metadata. | 
 |  | 
 | Verity and DAX are not compatible and attempts to set both of these flags | 
 | on a file will fail. |