From patchwork Tue Oct 3 15:30:07 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 820920 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="uB4xQJAY"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3y62zT5Pn4z9t2x for ; Wed, 4 Oct 2017 02:30:29 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 19EF0C21F03; Tue, 3 Oct 2017 15:30:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 1CD7DC21D09; Tue, 3 Oct 2017 15:30:22 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 733E7C21D09; Tue, 3 Oct 2017 15:30:21 +0000 (UTC) Received: from mail-qt0-f195.google.com (mail-qt0-f195.google.com [209.85.216.195]) by lists.denx.de (Postfix) with ESMTPS id ED3F8C21C93 for ; Tue, 3 Oct 2017 15:30:20 +0000 (UTC) Received: by mail-qt0-f195.google.com with SMTP id q4so13637489qtq.8 for ; Tue, 03 Oct 2017 08:30:20 -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; bh=GbQJ9e1rDv2YmahtA/kkjlUQU/1lVu+79ob+qKEivGc=; b=uB4xQJAYhaIxx3kMw1tqtOn5GQjB7h+TtVfVMZP4gXJUMf9nrSD9WU72V3Dpl/GR95 LFb/hgdjPtGNMLMSpaza5DuvTZOO8jpmzfAI9CfzwzD7NbL8lUON4PDaLT3SRxvaarnl vvdr78+FC3IHWQI3AKBV6+3JRbMzxW2TmNLKqiIMQB4nynd73JH1PP1aWofzDN3hjGRl IYwonZUU/R0yocuPpYrlaJ7bW/8BKGJ7MzD688PF8/A1LlT7zsi4OX4zoGDit2dtR+Dq TRAVl4lVOk5DHK72S4mdJRdAdFPJbkdMw+P0p1SLn73M1AGZm4Uek2gLY2z5d1aNurVr SdpA== 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; bh=GbQJ9e1rDv2YmahtA/kkjlUQU/1lVu+79ob+qKEivGc=; b=fWL8Gs5yuR9mlFEoIXRvhMdcs3Pq96+yD82vmK9mpXvfMKgEMw6X53XwN6B6zO0awd +VC86DPXfEtFJyvIvQB9ZZZg11PKD9trED5rTDetl6WFH8I4HXT8+hHg2nU8hqm4lsHC fhu5EZc/uryLYbEgk+7k/JrUPPMuIoLv1IVJPCtn/VHDayuFgyRyIcs71wF7uGC1fTWz xGY6XmIF6RqtYcAM181WJtG+oGJT/w50FDVost99Drw0SmyM2K+K8FHmzfCrY/g46szd sTJlYvzzBxatMNo3uqG+Rl8zuuQ522P9J6wcufRk/tnDC/Q4ioBAieoktso4vTUIN8ly c7Rg== X-Gm-Message-State: AMCzsaU3dYIqfLrFq/Ymjwb7kCVT1LqbP/47EclO/gQU0rI5mbZkhAhn y8hOrYGp8STzeRadGugI/uhRS5H3 X-Google-Smtp-Source: AOwi7QDTlUnDvUMBBMgZTLXwP75XLUhRzHc0IthNMfvw7Ouv8TRO7TW1kI/IyCR+fjkV9F0B64Zq5A== X-Received: by 10.237.41.193 with SMTP id o59mr1770556qtd.281.1507044619319; Tue, 03 Oct 2017 08:30:19 -0700 (PDT) Received: from localhost ([144.121.20.162]) by smtp.gmail.com with ESMTPSA id c188sm7955848qkg.55.2017.10.03.08.30.17 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 03 Oct 2017 08:30:18 -0700 (PDT) From: Rob Clark To: U-Boot Mailing List Date: Tue, 3 Oct 2017 11:30:07 -0400 Message-Id: <20171003153015.13458-1-robdclark@gmail.com> X-Mailer: git-send-email 2.13.5 Cc: Andre Przywara , Alison Chaiken , Peter Jones , Vincent Tinelli , Maxime Ripard Subject: [U-Boot] [PATCH] disk: Don't assume blksz > legacy_mbr X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" On some devices, this does not appear to be a valid assumption. So figure out the number of blocks we actually need to read. Signed-off-by: Rob Clark --- Sorry, took a bit longer to get to a point of testing this.. somehow himport_r() of the default_environment is clobbering my usb keyboard's usb_device, which I'm still tracking down. Good thing that pointers overwritten with ascii are fairly obvious. disk/part_dos.c | 6 ++++-- disk/part_efi.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/disk/part_dos.c b/disk/part_dos.c index 1a36be0446..a9d23e121c 100644 --- a/disk/part_dos.c +++ b/disk/part_dos.c @@ -89,9 +89,11 @@ static int test_block_type(unsigned char *buffer) static int part_test_dos(struct blk_desc *dev_desc) { - ALLOC_CACHE_ALIGN_BUFFER(legacy_mbr, mbr, dev_desc->blksz); + /* blksz *should* be a PoT, but to be safe use DIV_ROUND_UP: */ + lbaint_t blkcnt = DIV_ROUND_UP(sizeof(legacy_mbr), dev_desc->blksz); + ALLOC_CACHE_ALIGN_BUFFER(legacy_mbr, mbr, blkcnt * dev_desc->blksz); - if (blk_dread(dev_desc, 0, 1, (ulong *)mbr) != 1) + if (blk_dread(dev_desc, 0, blkcnt, (ulong *)mbr) != 1) return -1; if (test_block_type((unsigned char *)mbr) != DOS_MBR) diff --git a/disk/part_efi.c b/disk/part_efi.c index 208bb14ee8..e00f6c9d24 100644 --- a/disk/part_efi.c +++ b/disk/part_efi.c @@ -923,7 +923,9 @@ static int is_pmbr_valid(legacy_mbr * mbr) static int is_gpt_valid(struct blk_desc *dev_desc, u64 lba, gpt_header *pgpt_head, gpt_entry **pgpt_pte) { - ALLOC_CACHE_ALIGN_BUFFER(legacy_mbr, mbr, dev_desc->blksz); + /* blksz *should* be a PoT, but to be safe use DIV_ROUND_UP: */ + lbaint_t blkcnt = DIV_ROUND_UP(sizeof(legacy_mbr), dev_desc->blksz); + ALLOC_CACHE_ALIGN_BUFFER(legacy_mbr, mbr, blkcnt * dev_desc->blksz); if (!dev_desc || !pgpt_head) { printf("%s: Invalid Argument(s)\n", __func__); @@ -931,7 +933,7 @@ static int is_gpt_valid(struct blk_desc *dev_desc, u64 lba, } /* Read MBR Header from device */ - if (blk_dread(dev_desc, 0, 1, (ulong *)mbr) != 1) { + if (blk_dread(dev_desc, 0, blkcnt, (ulong *)mbr) != 1) { printf("*** ERROR: Can't read MBR header ***\n"); return 0; }