Commit 6858d8ec authored by Ernesto A. Fernández's avatar Ernesto A. Fernández Committed by Kleber Sacilotto de Souza

hfs: prevent btree data loss on root split

BugLink: https://bugs.launchpad.net/bugs/1810958

[ Upstream commit d057c036 ]

This bug is triggered whenever hfs_brec_update_parent() needs to split
the root node.  The height of the btree is not increased, which leaves
the new node orphaned and its records lost.  It is not possible for this
to happen on a valid hfs filesystem because the index nodes have fixed
length keys.

For reasons I ignore, the hfs module does have support for a number of
hfsplus features.  A corrupt btree header may report variable length
keys and trigger this bug, so it's better to fix it.

Link: http://lkml.kernel.org/r/9750b1415685c4adca10766895f6d5ef12babdb0.1535682463.git.ernesto.mnd.fernandez@gmail.comSigned-off-by: default avatarErnesto A. Fernández <ernesto.mnd.fernandez@gmail.com>
Cc: Christoph Hellwig <hch@infradead.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarJuerg Haefliger <juergh@canonical.com>
Signed-off-by: default avatarKleber Sacilotto de Souza <kleber.souza@canonical.com>
parent e857270f
...@@ -424,6 +424,10 @@ static int hfs_brec_update_parent(struct hfs_find_data *fd) ...@@ -424,6 +424,10 @@ static int hfs_brec_update_parent(struct hfs_find_data *fd)
if (new_node) { if (new_node) {
__be32 cnid; __be32 cnid;
if (!new_node->parent) {
hfs_btree_inc_height(tree);
new_node->parent = tree->root;
}
fd->bnode = hfs_bnode_find(tree, new_node->parent); fd->bnode = hfs_bnode_find(tree, new_node->parent);
/* create index key and entry */ /* create index key and entry */
hfs_bnode_read_key(new_node, fd->search_key, 14); hfs_bnode_read_key(new_node, fd->search_key, 14);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment