linux/fs/xfs/libxfs
Darrick J. Wong 5f204051d9 xfs: pin inodes that would otherwise overflow link count
The VFS inc_nlink function does not explicitly check for integer
overflows in the i_nlink field.  Instead, it checks the link count
against s_max_links in the vfs_{link,create,rename} functions.  XFS
sets the maximum link count to 2.1 billion, so integer overflows should
not be a problem.

However.  It's possible that online repair could find that a file has
more than four billion links, particularly if the link count got
corrupted while creating hardlinks to the file.  The di_nlinkv2 field is
not large enough to store a value larger than 2^32, so we ought to
define a magic pin value of ~0U which means that the inode never gets
deleted.  This will prevent a UAF error if the repair finds this
situation and users begin deleting links to the file.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
2024-04-15 14:58:59 -07:00
..
xfs_ag_resv.c xfs: repair free space btrees 2023-12-15 10:03:32 -08:00
xfs_ag_resv.h xfs: move perag structure and setup to libxfs/xfs_ag.[ch] 2021-06-02 10:48:24 +10:00
xfs_ag.c xfs: pass xfs_buf lookup flags to xfs_*read_agi 2024-04-15 14:54:03 -07:00
xfs_ag.h xfs: hook live rmap operations during a repair operation 2024-02-22 12:43:40 -08:00
xfs_alloc_btree.c xfs: rename btree helpers that depends on the block number representation 2024-02-22 12:40:58 -08:00
xfs_alloc_btree.h xfs: split xfs_allocbt_init_cursor 2024-02-22 12:40:12 -08:00
xfs_alloc.c xfs: remove xfs_btnum_t 2024-02-22 12:40:51 -08:00
xfs_alloc.h xfs: repair free space btrees 2023-12-15 10:03:32 -08:00
xfs_attr_leaf.c xfs: validate attr leaf buffer owners 2024-04-15 14:58:51 -07:00
xfs_attr_leaf.h xfs: validate attr leaf buffer owners 2024-04-15 14:58:51 -07:00
xfs_attr_remote.c xfs: validate attr remote value buffer owners 2024-04-15 14:58:51 -07:00
xfs_attr_remote.h xfs: rename struct xfs_attr_item to xfs_attr_intent 2022-05-22 16:00:26 +10:00
xfs_attr_sf.h xfs: remove xfs_attr_sf_hdr_t 2023-12-29 13:37:05 +05:30
xfs_attr.c xfs: repair extended attributes 2024-04-15 14:58:53 -07:00
xfs_attr.h xfs: repair extended attributes 2024-04-15 14:58:53 -07:00
xfs_bit.c
xfs_bit.h xfs: Use the correct style for SPDX License Identifier 2020-05-13 15:32:45 -07:00
xfs_bmap_btree.c xfs: rename btree helpers that depends on the block number representation 2024-02-22 12:40:58 -08:00
xfs_bmap_btree.h xfs: remove xfs_bmbt_stage_cursor 2024-02-22 12:39:45 -08:00
xfs_bmap.c xfs: expose xfs_bmap_local_to_extents for online repair 2024-04-15 14:58:57 -07:00
xfs_bmap.h xfs: expose xfs_bmap_local_to_extents for online repair 2024-04-15 14:58:57 -07:00
xfs_btree_mem.c xfs: launder in-memory btree buffers before transaction commit 2024-02-22 12:43:36 -08:00
xfs_btree_mem.h xfs: launder in-memory btree buffers before transaction commit 2024-02-22 12:43:36 -08:00
xfs_btree_staging.c xfs: xfs_btree_bload_prep_block() should use __GFP_NOFAIL 2024-02-28 14:04:30 +05:30
xfs_btree_staging.h xfs: don't override bc_ops for staging btrees 2024-02-22 12:37:35 -08:00
xfs_btree.c xfs: support in-memory btrees 2024-02-22 12:43:35 -08:00
xfs_btree.h xfs: support in-memory btrees 2024-02-22 12:43:35 -08:00
xfs_cksum.h
xfs_da_btree.c xfs: validate directory leaf buffer owners 2024-04-15 14:58:51 -07:00
xfs_da_btree.h xfs: validate dabtree node buffer owners 2024-04-15 14:58:51 -07:00
xfs_da_format.h xfs: repair extended attributes 2024-04-15 14:58:53 -07:00
xfs_defer.c xfs: create deferred log items for file mapping exchanges 2024-04-15 14:54:17 -07:00
xfs_defer.h xfs: create deferred log items for file mapping exchanges 2024-04-15 14:54:17 -07:00
xfs_dir2_block.c xfs: validate explicit directory block buffer owners 2024-04-15 14:58:52 -07:00
xfs_dir2_data.c xfs: validate explicit directory data buffer owners 2024-04-15 14:58:52 -07:00
xfs_dir2_leaf.c xfs: validate explicit directory free block owners 2024-04-15 14:58:52 -07:00
xfs_dir2_node.c xfs: validate explicit directory free block owners 2024-04-15 14:58:52 -07:00
xfs_dir2_priv.h xfs: validate explicit directory free block owners 2024-04-15 14:58:52 -07:00
xfs_dir2_sf.c xfs: convert remaining kmem_free() to kfree() 2024-02-13 18:07:34 +05:30
xfs_dir2.c xfs: add an explicit owner field to xfs_da_args 2024-04-15 14:58:50 -07:00
xfs_dir2.h xfs: validate explicit directory block buffer owners 2024-04-15 14:58:52 -07:00
xfs_dquot_buf.c xfs: remove the xfs_dqblk_t typedef 2021-10-14 09:19:33 -07:00
xfs_errortag.h xfs: add error injection to test file mapping exchange recovery 2024-04-15 14:54:19 -07:00
xfs_exchmaps.c xfs: use atomic extent swapping to fix user file fork data 2024-04-15 14:58:53 -07:00
xfs_exchmaps.h xfs: use atomic extent swapping to fix user file fork data 2024-04-15 14:58:53 -07:00
xfs_format.h xfs: pin inodes that would otherwise overflow link count 2024-04-15 14:58:59 -07:00
xfs_fs.h xfs: create a incompat flag for atomic file mapping exchanges 2024-04-15 14:54:15 -07:00
xfs_health.h xfs: remember sick inodes that get inactivated 2024-02-22 12:33:03 -08:00
xfs_ialloc_btree.c xfs: pass xfs_buf lookup flags to xfs_*read_agi 2024-04-15 14:54:03 -07:00
xfs_ialloc_btree.h xfs: split xfs_inobt_init_cursor 2024-02-22 12:40:49 -08:00
xfs_ialloc.c xfs: try to avoid allocating from sick inode clusters 2024-04-15 14:58:59 -07:00
xfs_ialloc.h xfs: pass xfs_buf lookup flags to xfs_*read_agi 2024-04-15 14:54:03 -07:00
xfs_iext_tree.c xfs: use __GFP_NOLOCKDEP instead of GFP_NOFS 2024-02-13 18:07:34 +05:30
xfs_inode_buf.c xfs: check unused nlink fields in the ondisk inode 2024-04-15 14:58:59 -07:00
xfs_inode_buf.h xfs: kill xfs_sb_version_has_v3inode() 2021-08-19 10:07:14 -07:00
xfs_inode_fork.c xfs: move xfs_symlink_remote.c declarations to xfs_symlink_remote.h 2024-02-22 12:45:01 -08:00
xfs_inode_fork.h xfs: create a helper to decide if a file mapping targets the rt volume 2024-02-22 12:43:36 -08:00
xfs_log_format.h xfs: capture inode generation numbers in the ondisk exchmaps log item 2024-04-15 14:54:24 -07:00
xfs_log_recover.h xfs: capture inode generation numbers in the ondisk exchmaps log item 2024-04-15 14:54:24 -07:00
xfs_log_rlimit.c xfs: reduce transaction reservations with reflink 2022-04-28 10:25:42 -07:00
xfs_ondisk.h xfs: remove struct xfs_attr_shortform 2023-12-29 13:37:05 +05:30
xfs_quota_defs.h xfs: remove warning counters from struct xfs_dquot_res 2022-05-11 17:12:09 +10:00
xfs_refcount_btree.c xfs: rename btree helpers that depends on the block number representation 2024-02-22 12:40:58 -08:00
xfs_refcount_btree.h xfs: remove xfs_refcountbt_stage_cursor 2024-02-22 12:39:40 -08:00
xfs_refcount.c xfs: split the per-btree union in struct xfs_btree_cur 2024-02-22 12:37:03 -08:00
xfs_refcount.h xfs: create a ranged query function for refcount btrees 2023-12-15 10:03:40 -08:00
xfs_rmap_btree.c xfs: create a shadow rmap btree during rmap repair 2024-02-22 12:43:39 -08:00
xfs_rmap_btree.h xfs: create a shadow rmap btree during rmap repair 2024-02-22 12:43:39 -08:00
xfs_rmap.c xfs: hook live rmap operations during a repair operation 2024-02-22 12:43:40 -08:00
xfs_rmap.h xfs: hook live rmap operations during a repair operation 2024-02-22 12:43:40 -08:00
xfs_rtbitmap.c xfs: report realtime metadata corruption errors to the health system 2024-02-22 12:32:44 -08:00
xfs_rtbitmap.h xfs: remove conditional building of rt geometry validator functions 2024-01-30 14:04:43 +05:30
xfs_sb.c xfs: create a incompat flag for atomic file mapping exchanges 2024-04-15 14:54:15 -07:00
xfs_sb.h xfs: allow sunit mount option to repair bad primary sb stripe values 2024-03-25 10:17:18 +05:30
xfs_shared.h xfs: move xfs_symlink_remote.c declarations to xfs_symlink_remote.h 2024-02-22 12:45:01 -08:00
xfs_symlink_remote.c xfs: pass the owner to xfs_symlink_write_target 2024-04-15 14:58:57 -07:00
xfs_symlink_remote.h xfs: pass the owner to xfs_symlink_write_target 2024-04-15 14:58:57 -07:00
xfs_trans_inode.c xfs: Replace xfs_isilocked with xfs_assert_ilocked 2024-02-19 21:19:33 +05:30
xfs_trans_resv.c xfs: create helpers for rtbitmap block/wordcount computations 2023-10-18 10:58:58 -07:00
xfs_trans_resv.h xfs: rename xfs_*alloc*_log_count to _block_count 2022-04-28 10:25:59 -07:00
xfs_trans_space.h xfs: create deferred log items for file mapping exchanges 2024-04-15 14:54:17 -07:00
xfs_types.c xfs: rename xfs_verify_rtext to xfs_verify_rtbext 2023-10-17 16:24:22 -07:00
xfs_types.h xfs: remove xfs_btnum_t 2024-02-22 12:40:51 -08:00