Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp4971715imu; Mon, 12 Nov 2018 22:03:18 -0800 (PST) X-Google-Smtp-Source: AJdET5fdWqkiVc/EtVHbBo3wIghs7h1rLJuxG91PawrLFSo0ZnYZvZ8GIqgS0H6bKB5rOQAjuGvb X-Received: by 2002:a63:fc22:: with SMTP id j34-v6mr3608777pgi.434.1542088998460; Mon, 12 Nov 2018 22:03:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542088998; cv=none; d=google.com; s=arc-20160816; b=J4VTeBKkAPRYcKp+KucF/oaZsiITgHEcuc6kOo+iL44YU9CrkhLynV2AhVZFyypHe+ f9dABAjrodiIlv9ToVwXskx4xL6EVFeC3xYc6KM6vEiMgtMgu4+d96WcER1tyUWHaY5i LLMwIFNuHBrZEHxdzCK0ZCazqvLPtaQzqcbCZpcIpUkfnGWnFI3mbbq3k29393arnNGN g2nCsjfZPkljiqm/oiQOAzuJZULAqstd4ubMsGc9EBFj0L3TwHl87fT3Ag+MFUpVVyQ0 7BTM6toJmCZNKmbJDjIrto0Q9ndeeXUbg17XHXEXIvLaAZc/eTtqB3H1/Ug13QtoZiZC k9sQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=TXeAka29M2OB6PXzx86B53JuRP0eM9yTIISThvduxBU=; b=ybnKupYBCg4HkO4DXCiHZbe1az9JvXgD+6KMAyMYbrvJ4XGbIVO6+Scfw1qeE4xtvI LfYK5tkHrn/aFELtjO4TcudO+9L4NQhlmfNvQ2JwHG69i6J3BTQ8gBEkCHdkdUCndL+W q5dS1ikem1yrEZR+Rsa0LMJ0Wo1z0ZDBRMWJVFuUlBfhEdISAIMRfSikxpOuQNkfmKi3 m5Y9WSZjJXiw+29B6PGJYDn5pO1nrLRHr9Ldbjs3NOVT60bu/+3hhbq5EuMisAi+qn0b Fklfz6ZoXMHDvmL+AS6Dr3ujzSDyz0VoFbsM6Dr9soJ8NZSwho20Y5f0AqvayFui0zDs /PSw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=gs5wYNjI; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b65si18915997pgc.259.2018.11.12.22.03.03; Mon, 12 Nov 2018 22:03:18 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=gs5wYNjI; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732162AbeKMPrr (ORCPT + 99 others); Tue, 13 Nov 2018 10:47:47 -0500 Received: from mail.kernel.org ([198.145.29.99]:33608 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732103AbeKMPrp (ORCPT ); Tue, 13 Nov 2018 10:47:45 -0500 Received: from sasha-vm.mshome.net (unknown [64.114.255.114]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 37A6522510; Tue, 13 Nov 2018 05:51:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1542088278; bh=aZ44YYUIpSqiy+YcR9z+AlOWsiug84F1Zyu+IX9GZCs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gs5wYNjIEdv/HHQm8udimKguQKk/T2ridFP8BzJm7GbLJxDQ8ngy92BHerqR1rKz6 cClCPTak+Ah3SjgWiTNRSo+7xAeZw8YNYMvEcqcZNXfvRzeWEjKghILOP8xeF8+7Ii RbZgY+X7/5HOCzOqCxMwpfharZHnyGY+8h20uevQ= From: Sasha Levin To: stable@vger.kernel.org, linux-kernel@vger.kernel.org Cc: =?UTF-8?q?Ernesto=20A=2E=20Fern=C3=A1ndez?= , Christoph Hellwig , Andrew Morton , Linus Torvalds , Sasha Levin , linux-fsdevel@vger.kernel.org Subject: [PATCH AUTOSEL 4.18 14/39] hfs: prevent btree data loss on root split Date: Tue, 13 Nov 2018 00:50:28 -0500 Message-Id: <20181113055053.78352-14-sashal@kernel.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181113055053.78352-1-sashal@kernel.org> References: <20181113055053.78352-1-sashal@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ernesto A. Fernández [ Upstream commit d057c036672f33d43a5f7344acbb08cf3a8a0c09 ] 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.com Signed-off-by: Ernesto A. Fernández Cc: Christoph Hellwig Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin --- fs/hfs/brec.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/hfs/brec.c b/fs/hfs/brec.c index 9a8772465a90..da25c49203cc 100644 --- a/fs/hfs/brec.c +++ b/fs/hfs/brec.c @@ -425,6 +425,10 @@ static int hfs_brec_update_parent(struct hfs_find_data *fd) if (new_node) { __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); /* create index key and entry */ hfs_bnode_read_key(new_node, fd->search_key, 14); -- 2.17.1