From patchwork Mon Nov 12 21:25:29 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Goldschmidt X-Patchwork-Id: 996658 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; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="QLkguZPi"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 42v3hx6L8Jz9rxp for ; Tue, 13 Nov 2018 08:26:09 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 8FDABC221CA; Mon, 12 Nov 2018 21:26:00 +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_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, 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 F083AC22490; Mon, 12 Nov 2018 21:25:57 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id B13A7C2248C; Mon, 12 Nov 2018 21:25:50 +0000 (UTC) Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by lists.denx.de (Postfix) with ESMTPS id 74BB8C2241A for ; Mon, 12 Nov 2018 21:25:47 +0000 (UTC) Received: by mail-wr1-f65.google.com with SMTP id p4so1791634wrt.7 for ; Mon, 12 Nov 2018 13:25:47 -0800 (PST) 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=uK6noz2oB0agtPHsZ70FytfcTMAfa1+n14sB/+Of2DM=; b=QLkguZPitOGveUaOf56eI0JrD3NbPo6L9pvANUExpjmt3WxKUq7Mjx+IuBvrSnlYQ/ uMhbJaIFq4bUdUEPawIjoNbGZaQPeh6vj3zpcLOzHDPxQ/w6siKPF5sk/Cbf0s5/Jg/v Uvfj++YRiEeEFOunwEPTaVYvVc/VSguFDwmheVz0fHE/EI14plAqPi9UY/kcSSdM+kfE id6UB23MClhYwg+nD7LpOBHPPdwgKHz8pJROO8FwpRZKlv75T9bc50fpxK1CgkP1W7Wj +GeP6ybPoS/KkG3HZgypgw/RQzQjqqs4adbSRMSlcjFlUBX76Sc56hoKlN/InFHfVFFY D4Fg== 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=uK6noz2oB0agtPHsZ70FytfcTMAfa1+n14sB/+Of2DM=; b=hilxj59BwBSGeA6s8eI2adaT9QdxQJJ7STxrTXAkFhp9tvakDuRSC2lQfOWqj6jnPv LsPcbc1HZhpcr6rdAeQfuIhaFWJzV5+22n4hMqGQ9KVJoCXHI4gw1q1S9HtiJMD6PzGL FWgFf7nFYX/kPGP1i8R8l8BAYWBYqZZuKDaxlpxDPW3iUKRT0LltzL+Hpp9gYID4qgtm TAnAw/ZYNPfYX+nWx/7oexYiMVe5xhbtvNI4uZB+OOpbExg46V3k0gn6cZAXfezMTgCx 8l1rtXuRkvzs7vweJWuQHdUaz8xaZZo7Y1137PPWr3f2JEF6IKLrvVbIkwDH7RPHlgVQ cNrw== X-Gm-Message-State: AGRZ1gLpcFUqRDH8stLvnOKq3LiZliCZdAZThSNgc4EmzKVLbPmoNiFU PVCj2BvLQdOxmAhRWF5NEf8= X-Google-Smtp-Source: AJdET5cKuiboVvbHdfEwhVEkUVT/t8h4Z+uLi6wxluNcrBbk/UD+ATj0IxBilpUISFAPXjMEgcgCYw== X-Received: by 2002:adf:80c8:: with SMTP id 66-v6mr2461949wrl.57.1542057947070; Mon, 12 Nov 2018 13:25:47 -0800 (PST) Received: from ubuntu.home ([2a02:8071:6a3:700:456c:50ae:6b7:768d]) by smtp.gmail.com with ESMTPSA id x14sm742690wrm.65.2018.11.12.13.25.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Nov 2018 13:25:46 -0800 (PST) From: Simon Goldschmidt To: Tom Rini , u-boot@lists.denx.de Date: Mon, 12 Nov 2018 22:25:29 +0100 Message-Id: <20181112212532.13126-2-simon.k.r.goldschmidt@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181112212532.13126-1-simon.k.r.goldschmidt@gmail.com> References: <20181112212532.13126-1-simon.k.r.goldschmidt@gmail.com> Cc: Heinrich Schuchardt , Andrea Barisani Subject: [U-Boot] [PATCH 1/4] lib: lmb: reserving overlapping regions should fail 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" lmb_add_region handles overlapping regions wrong: instead of merging or rejecting to add a new reserved region that overlaps an existing one, it just adds the new region. Since internally the same function is used for lmb_alloc, change lmb_add_region to reject overlapping regions. Signed-off-by: Simon Goldschmidt --- lib/lmb.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/lmb.c b/lib/lmb.c index 1705417348..8dc703d996 100644 --- a/lib/lmb.c +++ b/lib/lmb.c @@ -136,6 +136,9 @@ static long lmb_add_region(struct lmb_region *rgn, phys_addr_t base, phys_size_t rgn->region[i].size += size; coalesced++; break; + } else if (lmb_addrs_overlap(base, size, rgnbase, rgnsize)) { + /* regions overlap */ + return -1; } } From patchwork Mon Nov 12 21:25:30 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Goldschmidt X-Patchwork-Id: 996659 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; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="vCqYxjMX"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 42v3kk6J3Sz9rxp for ; Tue, 13 Nov 2018 08:27:42 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 9C794C2249B; Mon, 12 Nov 2018 21:26:17 +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_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, 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 ECD9FC22259; Mon, 12 Nov 2018 21:26:03 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id BCF02C221CA; Mon, 12 Nov 2018 21:25:55 +0000 (UTC) Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by lists.denx.de (Postfix) with ESMTPS id B3588C22497 for ; Mon, 12 Nov 2018 21:25:51 +0000 (UTC) Received: by mail-wr1-f65.google.com with SMTP id u9-v6so10980304wrr.0 for ; Mon, 12 Nov 2018 13:25:51 -0800 (PST) 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=KlGzMXowNq2XgjPn1Q7OhLVihkcOQ/gF7QY/+THIdyE=; b=vCqYxjMXLb2pnVdHntD9fMgw0DaEWXSIH3FMHr/1KqakjkkLUhFs1VmiH/cg/c0C/c HTwosK7mAGWdbaV7oyBHB9cQCnRKDcnS0FzPGZ/qewEmwJ4GIjiKvsQE86ph43fKYjPu iz9zDbtWZgawXyveqW3ZR/oIpspbqP+ZTL9k7d1z8XmaX+d5BNjfRiGx57e+0sdPJ4Dp oo3bfcMUTtlWlX5VqTcY/mblwrqfuZ3W8S9wO5Z3xOt6L5pu9KGPSK3AXk030BnXLkRZ SrftOtN2X7u9ZHqlRyww9u5gDezf9ziUlnrJdhALUap8cRByJ+RLS5x8w0brj0oukWmd spXw== 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=KlGzMXowNq2XgjPn1Q7OhLVihkcOQ/gF7QY/+THIdyE=; b=sr+i4XWZI4FKqu9ATAyoOA9Guy/64c40eJLSikLfqjQC572xkOyLqQy8eYRjpQdMKS TkPXvktEPyj9YzH3tCu3O8Si7/aVMK21EYcn1lM9tUTJiEv/AGs+0RIWmz7pvhkMMDmQ 90r3Oo5UCgYJx4eU9PXhZ3WIyOPSDOdFtLWNpF8x0MvVQwJDGKgspFIpg+qECDXp9VV2 +jp//YyDBQpyenaoGn9XqR3z+z0irZjAT6kDtwYdCuN+FN7yr9AgVQGggAbrI+GUZVSI yayVS9usZjH9xCztMtpagOM4+QOtcFV6ttoc8LqBDJWBc27ZvpfmE/gl/IMQARCipZmX 3hKw== X-Gm-Message-State: AGRZ1gLl1xHHgGI+ttqaVP9mVN2doke9FyOo4ZN/5kJQtwMeAdhceNaZ 03JJ9W7IzWIkFsMHqS6giT0= X-Google-Smtp-Source: AJdET5e1T0iRoFdKyiig5TOvCRGsHHTnuaU11hvynWky1b14yF//K3xY8900kjnmjp3bg+AnNdWD3A== X-Received: by 2002:adf:fc0c:: with SMTP id i12-v6mr2533227wrr.145.1542057951458; Mon, 12 Nov 2018 13:25:51 -0800 (PST) Received: from ubuntu.home ([2a02:8071:6a3:700:456c:50ae:6b7:768d]) by smtp.gmail.com with ESMTPSA id x14sm742690wrm.65.2018.11.12.13.25.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Nov 2018 13:25:50 -0800 (PST) From: Simon Goldschmidt To: Tom Rini , u-boot@lists.denx.de Date: Mon, 12 Nov 2018 22:25:30 +0100 Message-Id: <20181112212532.13126-3-simon.k.r.goldschmidt@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181112212532.13126-1-simon.k.r.goldschmidt@gmail.com> References: <20181112212532.13126-1-simon.k.r.goldschmidt@gmail.com> Cc: Heinrich Schuchardt , Andrea Barisani Subject: [U-Boot] [PATCH 2/4] lib: lmb: add function lmb_alloc_addr 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" This new function behaves like lmb_alloc, but it tries to allocate a pre-specified address range. Unlike lmb_reserve, this address range must be inside one of the memory ranges that has been set up with lmb_add. Signed-off-by: Simon Goldschmidt --- include/lmb.h | 1 + lib/lmb.c | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/include/lmb.h b/include/lmb.h index f04d058093..bc06f175e1 100644 --- a/include/lmb.h +++ b/include/lmb.h @@ -38,6 +38,7 @@ extern phys_addr_t lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align phys_addr_t max_addr); extern phys_addr_t __lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align, phys_addr_t max_addr); +extern phys_addr_t lmb_alloc_addr(struct lmb *lmb, phys_addr_t base, phys_size_t size); extern int lmb_is_reserved(struct lmb *lmb, phys_addr_t addr); extern long lmb_free(struct lmb *lmb, phys_addr_t base, phys_size_t size); diff --git a/lib/lmb.c b/lib/lmb.c index 8dc703d996..c3af2fd5fc 100644 --- a/lib/lmb.c +++ b/lib/lmb.c @@ -324,6 +324,32 @@ phys_addr_t __lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align, phy return 0; } +/* + * Try to allocate a specific address range: must be in defined memory but not + * reserved + */ +phys_addr_t lmb_alloc_addr(struct lmb *lmb, phys_addr_t base, phys_size_t size) +{ + long j; + + /* Check if the requested address is in one of the memory regions */ + j = lmb_overlaps_region(&lmb->memory, base, size); + if (j >= 0) { + /* + * Check if the requested end address is in the same memory + * region we found. + */ + if (lmb_addrs_overlap(lmb->memory.region[j].base, + lmb->memory.region[j].size, base + size - + 1, 1)) { + /* ok, reserve the memory */ + if (!lmb_reserve(lmb, base, size)) + return base; + } + } + return 0; +} + int lmb_is_reserved(struct lmb *lmb, phys_addr_t addr) { int i; From patchwork Mon Nov 12 21:25:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Goldschmidt X-Patchwork-Id: 996660 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; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="PJ36Qcu+"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 42v3km4jcgz9rxp for ; Tue, 13 Nov 2018 08:27:44 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 58584C21E9F; Mon, 12 Nov 2018 21:26:33 +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_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, 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 E7536C22499; Mon, 12 Nov 2018 21:26:09 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id A6200C2248E; Mon, 12 Nov 2018 21:25:57 +0000 (UTC) Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by lists.denx.de (Postfix) with ESMTPS id 72EE0C222D9 for ; Mon, 12 Nov 2018 21:25:56 +0000 (UTC) Received: by mail-wm1-f68.google.com with SMTP id f10-v6so9876920wme.3 for ; Mon, 12 Nov 2018 13:25:56 -0800 (PST) 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=oFwmLXsZ14ZifR69TMtq82xkNpFriL/IG1MWVklLQ4E=; b=PJ36Qcu+4iRWSGe+NVBcnRIzDojF2MDzwPOFRdgcW6tjlB8bhH89gybtZhfXqcNRhR r7RBduScEgTKlIMjUE0K+YfWyYmn8lJGz6khQRTVxPoh4Bt3R91D+cQPwOnn60i2aSP0 /VWwgcpIWfvV0ucZa/Sy0XQJimBS9G7318xU/f80IR/yvuusRLCBazpQaYjZXmBv1MTy KudwVqbOARwtzVQrIXReu3KB9bzzA/3drK7CDcK6FAe7QsRHdUFurdqSMfySwiUbmoay wFgYhs8WuiCvsH1tLEkphgG1xULAav1bpQdFoVLao87vdnV09hOSEAgiOlqfFs1SCPho 3iMg== 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=oFwmLXsZ14ZifR69TMtq82xkNpFriL/IG1MWVklLQ4E=; b=At5RpKrc93osC/MO3imYWEkpk5G/uPcipxEeB338yH+JhpkzdFLnd/9wPVfrJCb3Dr 65b1iNeuDmvSfrMZHNT4yqIlXAfcby4iVKFhqPINNhyKI7QdnJ65ziHDyMR0xT60NF3C RAzqf3oG55V/4+3TQtp1OmQHcm5Isw3g/frG5wCNRp4A2a8qoTwLLoI4OEvOrsmh/rEN cGRFnhZ31lgxbhTNg6R+fYCPVU5gahVxz/4WfQeOGf/9MNGBNv8iwq+TVp7es7x+YIcO klaue06TtApGoJ7YKj6lEL0tnSfviEUir2O5GQB8sWtbi/5RVdFpapZvLruo7ShizRL1 waIw== X-Gm-Message-State: AGRZ1gKFZJ2hko6RQoT2RmqzhmJg/Cm3xWBHLgoSxXbVvk2nCSH9Bpd3 ugAUbqdkcsD4qpBVoONxOpY= X-Google-Smtp-Source: AJdET5d4xm0d1QdGyaZ3xz1qgrlEseq3V4XSsaMioUrkqAs/Y+GE+5JLttX45thKYrfkkq2z25nrqw== X-Received: by 2002:a1c:f514:: with SMTP id t20-v6mr1047580wmh.129.1542057956020; Mon, 12 Nov 2018 13:25:56 -0800 (PST) Received: from ubuntu.home ([2a02:8071:6a3:700:456c:50ae:6b7:768d]) by smtp.gmail.com with ESMTPSA id x14sm742690wrm.65.2018.11.12.13.25.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Nov 2018 13:25:55 -0800 (PST) From: Simon Goldschmidt To: Tom Rini , u-boot@lists.denx.de Date: Mon, 12 Nov 2018 22:25:31 +0100 Message-Id: <20181112212532.13126-4-simon.k.r.goldschmidt@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181112212532.13126-1-simon.k.r.goldschmidt@gmail.com> References: <20181112212532.13126-1-simon.k.r.goldschmidt@gmail.com> Cc: Joe Hershberger , Heinrich Schuchardt , Alexander Graf , Andrea Barisani Subject: [U-Boot] [PATCH 3/4] fs: prevent overwriting reserved memory 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" This fixes CVE-2018-18440 ("insufficient boundary checks in filesystem image load") by using lmb to check the load size of a file against reserved memory addresses. Signed-off-by: Simon Goldschmidt --- fs/fs.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++--- include/lmb.h | 2 ++ lib/lmb.c | 13 ++++++++++++ 3 files changed, 68 insertions(+), 3 deletions(-) diff --git a/fs/fs.c b/fs/fs.c index adae98d021..4baf6b1c39 100644 --- a/fs/fs.c +++ b/fs/fs.c @@ -428,13 +428,57 @@ int fs_size(const char *filename, loff_t *size) return ret; } -int fs_read(const char *filename, ulong addr, loff_t offset, loff_t len, - loff_t *actread) +#ifdef CONFIG_LMB +/* Check if a file may be read to the given address */ +static int fs_read_lmb_check(const char *filename, ulong addr, loff_t offset, + loff_t len, struct fstype_info *info) +{ + struct lmb lmb; + int ret; + loff_t size; + loff_t read_len; + + /* get the actual size of the file */ + ret = info->size(filename, &size); + if (ret) + return ret; + if (offset >= size) { + /* offset >= EOF, no bytes will be written */ + return 0; + } + read_len = size - offset; + + /* limit to 'len' if it is smaller */ + if (len && len < read_len) + read_len = len; + + lmb_init_and_reserve(&lmb, gd->bd->bi_dram[0].start, + gd->bd->bi_dram[0].size, (void *)gd->fdt_blob); + lmb_dump_all(&lmb); + + if (lmb_alloc_addr(&lmb, addr, read_len) == addr) + return 0; + + printf("** Reading file would overwrite reserved memory **\n"); + return -1; +} +#endif + +static int _fs_read(const char *filename, ulong addr, loff_t offset, loff_t len, + int do_lmb_check, loff_t *actread) { struct fstype_info *info = fs_get_info(fs_type); void *buf; int ret; +#ifdef CONFIG_LMB + if (do_lmb_check) { + ret = fs_read_lmb_check(filename, addr, offset, len, info); + if (ret) + return ret; + } +#endif + /* * We don't actually know how many bytes are being read, since len==0 * means read the whole file. @@ -451,6 +495,12 @@ int fs_read(const char *filename, ulong addr, loff_t offset, loff_t len, return ret; } +int fs_read(const char *filename, ulong addr, loff_t offset, loff_t len, + loff_t *actread) +{ + return _fs_read(filename, addr, offset, len, 0, actread); +} + int fs_write(const char *filename, ulong addr, loff_t offset, loff_t len, loff_t *actwrite) { @@ -621,7 +671,7 @@ int do_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[], pos = 0; time = get_timer(0); - ret = fs_read(filename, addr, pos, bytes, &len_read); + ret = _fs_read(filename, addr, pos, bytes, 1, &len_read); time = get_timer(time); if (ret < 0) return 1; diff --git a/include/lmb.h b/include/lmb.h index bc06f175e1..810a37d5a5 100644 --- a/include/lmb.h +++ b/include/lmb.h @@ -31,6 +31,8 @@ struct lmb { extern struct lmb lmb; extern void lmb_init(struct lmb *lmb); +extern void lmb_init_and_reserve(struct lmb *lmb, phys_addr_t base, + phys_size_t size, void *fdt_blob); extern long lmb_add(struct lmb *lmb, phys_addr_t base, phys_size_t size); extern long lmb_reserve(struct lmb *lmb, phys_addr_t base, phys_size_t size); extern phys_addr_t lmb_alloc(struct lmb *lmb, phys_size_t size, ulong align); diff --git a/lib/lmb.c b/lib/lmb.c index c3af2fd5fc..99a4aaa09e 100644 --- a/lib/lmb.c +++ b/lib/lmb.c @@ -104,6 +104,19 @@ void lmb_init(struct lmb *lmb) lmb->reserved.size = 0; } +/* Initialize the struct, add memory and call arch/board reserve functions */ +void lmb_init_and_reserve(struct lmb *lmb, phys_addr_t base, phys_size_t size, + void *fdt_blob) +{ + lmb_init(lmb); + lmb_add(lmb, base, size); + arch_lmb_reserve(lmb); + board_lmb_reserve(lmb); + + if (IMAGE_ENABLE_OF_LIBFDT) + boot_fdt_add_mem_rsv_regions(lmb, fdt_blob); +} + /* This routine called with relocation disabled. */ static long lmb_add_region(struct lmb_region *rgn, phys_addr_t base, phys_size_t size) { From patchwork Mon Nov 12 21:25:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Goldschmidt X-Patchwork-Id: 996661 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; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="hvfSYFB3"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 42v3lh3Sn7z9rxp for ; Tue, 13 Nov 2018 08:28:32 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 34075C224AA; Mon, 12 Nov 2018 21:26:49 +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_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, 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 05618C223FA; Mon, 12 Nov 2018 21:26:38 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 97DDDC2248D; Mon, 12 Nov 2018 21:26:04 +0000 (UTC) Received: from mail-wm1-f65.google.com (mail-wm1-f65.google.com [209.85.128.65]) by lists.denx.de (Postfix) with ESMTPS id E7F59C224A7 for ; Mon, 12 Nov 2018 21:26:00 +0000 (UTC) Received: by mail-wm1-f65.google.com with SMTP id s11so138696wmh.1 for ; Mon, 12 Nov 2018 13:26:00 -0800 (PST) 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=yb2e5yfhj3HJ6/BGBQKlbYoet/oYjJKuy5pX1MnaSOw=; b=hvfSYFB3Mlf42H382xQlnmUM3/P7C2ITCrDkBXO5KCjLPhlVVY0kT0mvE1RiQeMquN GI6vKx7xtKyZNddYszWQ5ExF2XCtmPy8ARRtl6VvPRd5KvVu4h6So7JvNqZuWeGnJ1Tm SRP53cMnSrqkZ5M5sqz4kLsmeRHCoUTIhBV5g1XqdfjUdFMzLokTOdZ4wrxpUX5znhqb ZmCoN5egMDPRwIK02v4P1suZ4qePm6VZ4YP8PrRN1aNF7Tz0gZ4zq8hyXHjxsAz8yrDP 2sYOWuPx/YMhFaCsnWNGhyy+HYMd9LUWWyXynrkrL2ZRn3T/IbjbnpwvkWMPmWxzNU/n fy0A== 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=yb2e5yfhj3HJ6/BGBQKlbYoet/oYjJKuy5pX1MnaSOw=; b=iXFsvJU7y/i65/FeyW8vrgWGOESeBhjIM+L+CgBYjJxtt/pSr0ZN+o9Gjk1Kc+fb0u DuTTjEvNh4JIMIiCmyLMdqzpgBewcBNtuDrcLNQuk+i+icATOQJ9j8Miz9ihrdjM9W3U eh96A14EQE0q/WleX4X52AB4UsDiEOtoRHTMaldEQGWwrJnJRpvAhuFBqV6waXmCHr27 F06VX0aAQKlNDNIxYTa5DUoI7dw/WKE2EqmxBmb3UJG2yaIV89get1dOa9Y/d3VD1L7s StBpvW29Mww/3BIbhEwVOwkGGXUR8lr3uw3vgT/WnWipwgCXOyRET14gLCz+sX7hQI8A Rcaw== X-Gm-Message-State: AGRZ1gJVFqkFhzrqs8iPkn09UC0SPdcK/DAavw2VZgTrFBBiw0qR0Onu W/p0YrxVApW/JANAkcflsyg= X-Google-Smtp-Source: AJdET5cU+iWu2tVB3ENwDiJpC1uqtrk+WSExJszf6ZARTBUObZzKm2BDzqDOHsjP9gEipLoM+NQU1Q== X-Received: by 2002:a1c:7a03:: with SMTP id v3-v6mr1051862wmc.108.1542057960585; Mon, 12 Nov 2018 13:26:00 -0800 (PST) Received: from ubuntu.home ([2a02:8071:6a3:700:456c:50ae:6b7:768d]) by smtp.gmail.com with ESMTPSA id x14sm742690wrm.65.2018.11.12.13.25.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 12 Nov 2018 13:26:00 -0800 (PST) From: Simon Goldschmidt To: Tom Rini , u-boot@lists.denx.de Date: Mon, 12 Nov 2018 22:25:32 +0100 Message-Id: <20181112212532.13126-5-simon.k.r.goldschmidt@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181112212532.13126-1-simon.k.r.goldschmidt@gmail.com> References: <20181112212532.13126-1-simon.k.r.goldschmidt@gmail.com> Cc: Heinrich Schuchardt , Alexander Graf , Michal Simek , Andrea Barisani Subject: [U-Boot] [PATCH 4/4] bootm: use new common function lmb_init_and_reserve 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" This reduces duplicate code only. Signed-off-by: Simon Goldschmidt --- common/bootm.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/common/bootm.c b/common/bootm.c index 8bf84ebcb7..31e4f0f794 100644 --- a/common/bootm.c +++ b/common/bootm.c @@ -56,15 +56,11 @@ static void boot_start_lmb(bootm_headers_t *images) ulong mem_start; phys_size_t mem_size; - lmb_init(&images->lmb); - mem_start = env_get_bootm_low(); mem_size = env_get_bootm_size(); - lmb_add(&images->lmb, (phys_addr_t)mem_start, mem_size); - - arch_lmb_reserve(&images->lmb); - board_lmb_reserve(&images->lmb); + lmb_init_and_reserve(&images->lmb, (phys_addr_t)mem_start, mem_size, + NULL); } #else #define lmb_reserve(lmb, base, size)