• Steve Magnani's avatar
    udf: Fix 64-bit sign extension issues affecting blocks > 0x7FFFFFFF · b490bdd6
    Steve Magnani authored
    Large (> 1 TiB) UDF filesystems appear subject to several problems when
    mounted on 64-bit systems:
    
    * readdir() can fail on a directory containing File Identifiers residing
      above 0x7FFFFFFF. This manifests as a 'ls' command failing with EIO.
    
    * FIBMAP on a file block located above 0x7FFFFFFF can return a negative
      value. The low 32 bits are correct, but applications that don't mask the
      high 32 bits of the result can perform incorrectly.
    
    Per suggestion by Jan Kara, introduce a udf_pblk_t type for representation
    of UDF block addresses. Ultimately, all driver functions that manipulate
    UDF block addresses should use this type; for now, deployment is limited
    to functions with actual or potential sign extension issues.
    
    Changes to udf_readdir() and udf_block_map() address the issues noted
    above; other changes address potential similar issues uncovered during
    audit of the driver code.
    Signed-off-by: default avatarSteven J. Magnani <steve@digidescorp.com>
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    b490bdd6
dir.c 5.17 KB