FAILED: patch "[PATCH] btrfs: do not delete mismatched root refs" failed to apply to 4.14-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.14-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 423a716cd7be16fb08690760691befe3be97d3fc Mon Sep 17 00:00:00 2001
From: Josef Bacik <[email protected]>
Date: Wed, 18 Dec 2019 17:20:29 -0500
Subject: [PATCH] btrfs: do not delete mismatched root refs
btrfs_del_root_ref() will simply WARN_ON() if the ref doesn't match in any way, and then continue to delete the reference. This shouldn't happen, we have these values because there's more to the reference than the original root and the sub root. If any of these checks fail, return -ENOENT.
fs/btrfs/root-tree.c +6 -4
@@ -376,11 +376,13 @@ int btrfs_del_root_ref(struct btrfs_trans_handle *trans, u64 root_id, leaf = path->nodes[0 ]; ref =btrfs_item_ptr (leaf, path->slots[0 ], struct btrfs_root_ref); - -WARN_ON (btrfs_root_ref_dirid (leaf, ref) != dirid); -WARN_ON (btrfs_root_ref_name_len (leaf, ref) != name_len); ptr = (unsigned long )(ref +1 ); -WARN_ON (memcmp_extent_buffer (leaf, name, ptr, name_len)); +if ((btrfs_root_ref_dirid (leaf, ref) != dirid) || + (btrfs_root_ref_name_len (leaf, ref) != name_len) || +memcmp_extent_buffer (leaf, name, ptr, name_len)) { + err = -ENOENT ; + goto out; + } *sequence =btrfs_root_ref_sequence (leaf, ref); ret =btrfs_del_item (trans, tree_root, path);