From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1kh88t-00004u-8e for mharc-grub-devel@gnu.org; Mon, 23 Nov 2020 04:28:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:53646) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kh88s-0008Ux-2c for grub-devel@gnu.org; Mon, 23 Nov 2020 04:28:14 -0500 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:42470) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kh88q-0002Uq-7t for grub-devel@gnu.org; Mon, 23 Nov 2020 04:28:13 -0500 Received: by mail-wr1-x444.google.com with SMTP id l1so17831303wrb.9 for ; Mon, 23 Nov 2020 01:28:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=efficientek-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=qRq76TrQfy4O4ee3c6ErtO1p6XX5QLxk/8V64kJE5lo=; b=d+UPJ9u/QIdYGujtMiZkntoUje4IeV05RY1FiW13cEHMxpIip+AagG5jM6uFRLHbjk +4dEUBDKXLtMtezQZQm8+qkKCMnSzxPhR5thXQN5QNuUAVyuOuSYl+1hBBrmk7uRSzZt rUHbj+mnMXuqC6e/osbrT25kNLwg5YJI52v0bqGnbqq6AAHMng9BOfk+cyrM7bqgurj0 dIcit7gXmoCIBlGxqpyv5EOm3XVP5THOScGIStm96VAzMkxi/xXa4E0nt9UgZMPoPYT1 mLfcwCSDENLcKdo3rhzBBZcLR01ciz8s2WhYYqLgr6gsLZuqkjQ9kVwInxlABM0FTLqa PZ2Q== 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:mime-version :content-transfer-encoding; bh=qRq76TrQfy4O4ee3c6ErtO1p6XX5QLxk/8V64kJE5lo=; b=S9cf+8fPIkbsbBdG68m+SggYsTjCDljSyQFLZWAzeN4ETBbqnXcCLuXZg5TT73zbBI YQcrC8kf2dE24FsoGNaBsGt+IEd72M5iM5G4VIXhLeJGjsgbmqpIS1MUqRywN9kH3E0u 0lUM08M+19bHI7I867Z89lsWwJKwFlnmh5/FYt2aOhw2aYppe4S5snWJ0EXBpygWW4mt RjszDG6CrUaoUFAOC6B0fU9IBtsc08Y7QID1pON260SHXX0GCg/Siik5aL3Hhkxdqh3P 3QkKzTOnUOvArNdU7S0RxvZRVKVtPip4djUd5Do6nTfvRJQcr8iaJE4q8q3i2GEhKW5D QzpA== X-Gm-Message-State: AOAM530b6MpJXqLWQ1bzchL8q2Rk0yI5dm8Otb6lCf873J/tVDpGhcxN FHLNhimomD65ac09VLDtyUAMW0oMCqAJrg== X-Google-Smtp-Source: ABdhPJyn+PeNZP5OH/iRtxjxFVu9GJsDUuKJCqQiZW+C+O3URYox/fXsAjvv6RCpq8DU2pKPG9Wcew== X-Received: by 2002:a05:6000:151:: with SMTP id r17mr6246154wrx.157.1606123690235; Mon, 23 Nov 2020 01:28:10 -0800 (PST) Received: from localhost.localdomain ([136.49.211.192]) by smtp.gmail.com with ESMTPSA id b73sm46674420wmb.0.2020.11.23.01.28.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Nov 2020 01:28:09 -0800 (PST) From: Glenn Washburn To: grub-devel@gnu.org Cc: Daniel Kiper , Glenn Washburn Subject: [PATCH] fs: Fix block lists not being able to address to end of disk sometimes Date: Mon, 23 Nov 2020 03:27:42 -0600 Message-Id: <20201123092742.2599149-1-development@efficientek.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2a00:1450:4864:20::444; envelope-from=development@efficientek.com; helo=mail-wr1-x444.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Nov 2020 09:28:14 -0000 When checking if a block list goes past the end of the disk, make sure the total size of the disk is in grub native sector sizes, otherwise there will be blocks at the end of the disk unaccessible by block lists. Signed-off-by: Glenn Washburn --- grub-core/kern/fs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/grub-core/kern/fs.c b/grub-core/kern/fs.c index fb30da9f4..c698295bc 100644 --- a/grub-core/kern/fs.c +++ b/grub-core/kern/fs.c @@ -139,6 +139,7 @@ grub_fs_blocklist_open (grub_file_t file, const char *name) unsigned i; grub_disk_t disk = file->device->disk; struct grub_fs_block *blocks; + grub_size_t max_sectors; /* First, count the number of blocks. */ do @@ -156,6 +157,7 @@ grub_fs_blocklist_open (grub_file_t file, const char *name) return 0; file->size = 0; + max_sectors = grub_disk_from_native_sector (disk, disk->total_sectors); p = (char *) name; for (i = 0; i < num; i++) { @@ -181,7 +183,7 @@ grub_fs_blocklist_open (grub_file_t file, const char *name) goto fail; } - if (disk->total_sectors < blocks[i].offset + blocks[i].length) + if (max_sectors < blocks[i].offset + blocks[i].length) { grub_error (GRUB_ERR_BAD_FILENAME, "beyond the total sectors"); goto fail; -- 2.27.0