From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1fB3Na-0001sl-Kg for mharc-grub-devel@gnu.org; Tue, 24 Apr 2018 15:13:30 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54059) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB3NY-0001r1-Gz for grub-devel@gnu.org; Tue, 24 Apr 2018 15:13:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fB3NX-0005qV-IH for grub-devel@gnu.org; Tue, 24 Apr 2018 15:13:28 -0400 Received: from mail-wr0-x243.google.com ([2a00:1450:400c:c0c::243]:39746) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fB3NX-0005q8-Bc for grub-devel@gnu.org; Tue, 24 Apr 2018 15:13:27 -0400 Received: by mail-wr0-x243.google.com with SMTP id q3-v6so41023085wrj.6 for ; Tue, 24 Apr 2018 12:13:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=G2C09F6zPMSWzXAVi/fniU+etvaI6fRvNFSxMqvlFdU=; b=eLWytZ/euV4gyCv2UN1chVoi16PdaZFsulbwzFCrqxgPugosuAUyV/N4s3XYcZ+Rlh bQiMLIvD1KL8wS0bSQ1einIos5jwqkE5AIXPLTnwH/wp2cBCjv/iFowpwgruNdtvteCi m4lSLMwCwaRSdyhZugj9hCB5mG3AOagZzMv/PF3Xt1s9qsWSwZNMhXvYqL6VDX8ypTQO fvDKxE70KopWJW0oo9SGjXAj9//lRMuOwBKzpKUJ5OaA9pc7dpqHTnGESG90sPVLc66Z eHl6zHsKSdGhu2tqCZvIwaOkIeg9gSJCmAidBWkmPBJCl1AZSxbBH2OVInpROqKwGTuG dlDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=G2C09F6zPMSWzXAVi/fniU+etvaI6fRvNFSxMqvlFdU=; b=ATk2RtR7UcfvgrGBlhy3OKi0Ot31Tx6QrW3JN5ndkfrC2s68q5y6BznccXnmZYGdkJ 10ZLXFTmQfT4lRA6X2AtAu5VNXO0n2KKaGxrKerqNzQ16vwSwLM+uREKj8jT6Wm4dN6F k0RpbwZXP5QDjkeLjD/+0IyoK67IoP4umcV4x4KABBKVYB1wQVy48732KDiiJcKNW5Sw Gw3bFMWHdDVDgAAPeXuSMHfradPWJa7TKVjNpvCZwGwZZAmqFTsVeR3T6qr/dPUao7bL kTbTz4m6KTS5U0O2AyV1kkemIz7qHGKV4b5CdIqlfLFWmspB1pNl+uZJAsquQN9iDvft 43nw== X-Gm-Message-State: ALQs6tDw0VTfrDpLjx6ijrhaIC0pStG0hyGP96dF8ExVcCp47+O5f4fH irFiqdqRMUJWwjYwMrUE24r42w== X-Google-Smtp-Source: AIpwx48n4OLFJmfBt7OyD1ZleAPfiKQ72oF2qTn+UHCapM4DVe+ZrBgZ8I2/SrTbpy9UY5/YPw3UYQ== X-Received: by 2002:adf:9142:: with SMTP id j60-v6mr21393920wrj.222.1524597206083; Tue, 24 Apr 2018 12:13:26 -0700 (PDT) Received: from venice.bhome (94-38-18-113.adsl-ull.clienti.tiscali.it. [94.38.18.113]) by smtp.gmail.com with ESMTPSA id w186sm11049733wmw.27.2018.04.24.12.13.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Apr 2018 12:13:25 -0700 (PDT) From: Goffredo Baroncelli X-Google-Original-From: Goffredo Baroncelli To: grub-devel@gnu.org Cc: Goffredo Baroncelli Subject: [PATCH 2/7] Add helper to check the btrfs header. Date: Tue, 24 Apr 2018 21:13:11 +0200 Message-Id: <20180424191316.11031-3-kreijack@inwind.it> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180424191316.11031-1-kreijack@inwind.it> References: <20180424191316.11031-1-kreijack@inwind.it> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::243 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Apr 2018 19:13:29 -0000 This helper was used in few places to help the debugging. As conservative approach, in case of error it is only logged. Signed-off-by: Goffredo Baroncelli --- grub-core/fs/btrfs.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c index b0032ea46..01a1fc7a1 100644 --- a/grub-core/fs/btrfs.c +++ b/grub-core/fs/btrfs.c @@ -77,7 +77,8 @@ struct btrfs_header { grub_btrfs_checksum_t checksum; grub_btrfs_uuid_t uuid; - grub_uint8_t dummy[0x30]; + grub_uint64_t bytenr; + grub_uint8_t dummy[0x28]; grub_uint32_t nitems; grub_uint8_t level; } GRUB_PACKED; @@ -286,6 +287,23 @@ free_iterator (struct grub_btrfs_leaf_descriptor *desc) grub_free (desc->data); } +static grub_err_t +check_btrfs_header (struct grub_btrfs_data *data, struct btrfs_header *header, + grub_disk_addr_t addr) +{ + if (grub_le_to_cpu64 (header->bytenr) != addr) + { + grub_dprintf ("btrfs", "btrfs_header.bytenr is not addr\n"); + return grub_error (GRUB_ERR_BAD_FS, "header bytenr is not addr"); + } + if (grub_memcmp (data->sblock.uuid, header->uuid, sizeof(grub_btrfs_uuid_t))) + { + grub_dprintf ("btrfs", "btrfs_header.uuid doesn't match\n"); + return grub_error (GRUB_ERR_BAD_FS, "header uuid doesn't match"); + } + return GRUB_ERR_NONE; +} + static grub_err_t save_ref (struct grub_btrfs_leaf_descriptor *desc, grub_disk_addr_t addr, unsigned i, unsigned m, int l) @@ -341,6 +359,7 @@ next (struct grub_btrfs_data *data, err = grub_btrfs_read_logical (data, grub_le_to_cpu64 (node.addr), &head, sizeof (head), 0); + check_btrfs_header (data, &head, grub_le_to_cpu64 (node.addr)); if (err) return -err; @@ -402,6 +421,7 @@ lower_bound (struct grub_btrfs_data *data, /* FIXME: preread few nodes into buffer. */ err = grub_btrfs_read_logical (data, addr, &head, sizeof (head), recursion_depth + 1); + check_btrfs_header (data, &head, addr); if (err) return err; addr += sizeof (head); -- 2.17.0