• C
    hfsplus: fix link corruption · f6089ff8
    Christoph Hellwig 提交于
    HFS implements hardlink by using indirect catalog entries that refer to a hidden
    directly.  The link target is cached in the dev field in the HFS+ specific
    inode, which is also used for the device number for device files, and inside
    for passing the nlink value of the indirect node from hfsplus_cat_write_inode
    to a helper function.  Now if we happen to write out the indirect node while
    hfsplus_link is creating the catalog entry we'll get a link pointing to the
    linkid of the current nlink value.  This can easily be reproduced by a large
    enough loop of local git-clone operations.
    
    Stop abusing the dev field in the HFS+ inode for short term storage by
    refactoring the way the permission structure in the catalog entry is
    set up, and rename the dev field to linkid to avoid any confusion.
    
    While we're at it also prevent creating hard links to special files, as
    the HFS+ dev and linkid share the same space in the on-disk structure.
    Signed-off-by: NChristoph Hellwig <hch@tuxera.com>
    f6089ff8
catalog.c 10.5 KB