From patchwork Sat Sep 30 23:25:21 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tuomas Tynkkynen X-Patchwork-Id: 820224 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="NZO+dgK1"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3y4PhP1hnnz9t2f for ; Sun, 1 Oct 2017 10:26:45 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id F18C4C21E57; Sat, 30 Sep 2017 23:26:39 +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=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 28855C21E0C; Sat, 30 Sep 2017 23:26:15 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 5DC00C21C4C; Sat, 30 Sep 2017 23:26:12 +0000 (UTC) Received: from mail-lf0-f68.google.com (mail-lf0-f68.google.com [209.85.215.68]) by lists.denx.de (Postfix) with ESMTPS id 24A2BC21C4C for ; Sat, 30 Sep 2017 23:26:10 +0000 (UTC) Received: by mail-lf0-f68.google.com with SMTP id q132so2679999lfe.5 for ; Sat, 30 Sep 2017 16:26:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=/AKhYbwcrPxSouYesASMdKMJGoVJqwmEPwzww43Cpp8=; b=NZO+dgK1SliYifPPmzeDO4/x7qQM0gio3zZuKnbS+tnXwOn+GGpvUuunEM7BU7JLdR ovVnZ6BqDxDaD0jl6uY/U2wHWb2xWtzOFk27G8kEsqNZrwpg+ylO7g4uCrSbq5QoeaDd oEfKdKpOaNNM4AKkYBjbLIS8WGp4J1znEMe+7/CryTTYuwpOeNraHj5t4Pr9YPQR0y1l mJpLZquInbhOyynpK5vErTz35nqZ61KhaK4pCVD+zBmZ7+BrCcGsA+h/kZi4KAmeUo2T 9LmDvvWs0qPSIQzw3MznSkU1MRUSOYggvC6VItMTb3/+5QeqQt89s3zxImZ9KjtoOwT5 7/SQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=/AKhYbwcrPxSouYesASMdKMJGoVJqwmEPwzww43Cpp8=; b=Ql8T21ekbRLU7o/yJT11B1DB7PVAdXGtNIqGapBmEzpy63fwbQNCencparP+t3YH9W lY2GbhIC14Biz//aRpYAhvpLfp3fIgyrkNplC5t48L2BGzwcJCky6LnKyAIvcMojtj0Q vtxvgjw8K8akX10vNMC1nkkovggwxEtp1dRK+5s5k33ayKTeJ7WrptKLIr4PhR4OOiXh 1EX7WxQgbDsEJfO/oWNCpN1LgCwunRR4s314AxZzwZ1AkTCaQufPxRtpZtopn3DfPbUs obuipGeiIHJozXD7LNfcoIBEAS9FvkrUH7mP1u9iQKrHe1YOomIqY67rY7Kbi+kDpazh RM6w== X-Gm-Message-State: AHPjjUh6zqtlJxY1zM1GR4rf7Js/4nY5/H0k2R1NuLSSKoF9yrvLa3En txUPLovMy+n1VtzPwXIXbnofoQ== X-Google-Smtp-Source: AOwi7QD1gFe09DhAhwaYRXOCFMAtsNU/jG8tX9yQgcoPualt52hVuRyD6uhWGG4Ow967ajPJtIE5bg== X-Received: by 10.25.162.193 with SMTP id l184mr2536503lfe.120.1506813969186; Sat, 30 Sep 2017 16:26:09 -0700 (PDT) Received: from duuni.pp.htv.fi (dytyyyyyyyyyyyyycm94t-3.rev.dnainternet.fi. [2001:14ba:400::2:5771]) by smtp.gmail.com with ESMTPSA id v64sm1527239lje.39.2017.09.30.16.26.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 30 Sep 2017 16:26:08 -0700 (PDT) From: Tuomas Tynkkynen To: u-boot@lists.denx.de Date: Sun, 1 Oct 2017 02:25:21 +0300 Message-Id: <20170930232522.8152-1-tuomas.tynkkynen@iki.fi> X-Mailer: git-send-email 2.13.0 Cc: Tom Rini Subject: [U-Boot] [PATCH v2 1/2] fs/fat: Fix 'CACHE: Misaligned operation at range' warnings 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" The 'block' field of fat_itr needs to be properly aligned for DMA and while it does have '__aligned(ARCH_DMA_MINALIGN)', the fat_itr structure itself needs to be properly aligned as well. While at it use malloc_cache_aligned() for the other aligned allocations in the file as well. Fixes: 2460098cffacd1 ("fs/fat: Reduce stack usage") Signed-off-by: Tuomas Tynkkynen Reviewed-by: Tom Rini --- v2: No change --- fs/fat/fat.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fs/fat/fat.c b/fs/fat/fat.c index 3d3e17e8fa..35941c1498 100644 --- a/fs/fat/fat.c +++ b/fs/fat/fat.c @@ -495,7 +495,7 @@ read_bootsectandvi(boot_sector *bs, volume_info *volinfo, int *fatsize) return -1; } - block = memalign(ARCH_DMA_MINALIGN, cur_dev->blksz); + block = malloc_cache_aligned(cur_dev->blksz); if (block == NULL) { debug("Error: allocating block\n"); return -1; @@ -599,7 +599,7 @@ static int get_fs_info(fsdata *mydata) mydata->fatbufnum = -1; mydata->fat_dirty = 0; - mydata->fatbuf = memalign(ARCH_DMA_MINALIGN, FATBUFSIZE); + mydata->fatbuf = malloc_cache_aligned(FATBUFSIZE); if (mydata->fatbuf == NULL) { debug("Error: allocating memory\n"); return -1; @@ -1038,7 +1038,7 @@ int fat_exists(const char *filename) fat_itr *itr; int ret; - itr = malloc(sizeof(fat_itr)); + itr = malloc_cache_aligned(sizeof(fat_itr)); ret = fat_itr_root(itr, &fsdata); if (ret) return 0; @@ -1055,7 +1055,7 @@ int fat_size(const char *filename, loff_t *size) fat_itr *itr; int ret; - itr = malloc(sizeof(fat_itr)); + itr = malloc_cache_aligned(sizeof(fat_itr)); ret = fat_itr_root(itr, &fsdata); if (ret) return ret; @@ -1089,7 +1089,7 @@ int file_fat_read_at(const char *filename, loff_t pos, void *buffer, fat_itr *itr; int ret; - itr = malloc(sizeof(fat_itr)); + itr = malloc_cache_aligned(sizeof(fat_itr)); ret = fat_itr_root(itr, &fsdata); if (ret) return ret; From patchwork Sat Sep 30 23:25:22 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tuomas Tynkkynen X-Patchwork-Id: 820223 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="pdwSrEYE"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3y4Pgy6DH5z9t2f for ; Sun, 1 Oct 2017 10:26:22 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 7D6D6C21E50; Sat, 30 Sep 2017 23:26:18 +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=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 264F9C21D6A; Sat, 30 Sep 2017 23:26:14 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 529C6C21D7E; Sat, 30 Sep 2017 23:26:12 +0000 (UTC) Received: from mail-lf0-f67.google.com (mail-lf0-f67.google.com [209.85.215.67]) by lists.denx.de (Postfix) with ESMTPS id A3C72C21D6A for ; Sat, 30 Sep 2017 23:26:11 +0000 (UTC) Received: by mail-lf0-f67.google.com with SMTP id p184so2427920lfe.12 for ; Sat, 30 Sep 2017 16:26:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=yuuqH6sSJsXROTVxw3JeR7mQJm9upbX/MYirKNYc4Cw=; b=pdwSrEYE27NuNgDmrrjz8G34VWLOp09Z869py8h23vXnhMFEq/msZ6DzQAF2GLcZcU RXlgTCDzWqmMaHVAO1Uq7uHpcRgavFvEENJzqC1wdqXdWSmtcPswHGNEK49SYw7pZaQo YpwSCqzYIKrYKycflXqenMjE0WtHxej/DxsaxZsc/nQXyHdCjrMg7cmGYNTwlRiI7Uqt LNAsKSZCXyLFkbeV+o0Pdc3UMenkyX51RIZdM3Xh1nPC6qONcLxTGS8e9789yeQz3bk4 D2+twWScTV98KcWUDHhB8nqbqCyAjk9LEGriJs3e+uSAb8A7KNag17RJPwr7C3pPR9q3 Fteg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=yuuqH6sSJsXROTVxw3JeR7mQJm9upbX/MYirKNYc4Cw=; b=WguwMAVUdUjmQu6jbwo9XqhCBfFxRMjpJQWHCr1NdDSgGbMYBLCP/RVdTzNQTzChix eMW2HYPyqpV5y3ydLdOMvzh1wjm+kqi6xVeWBI1bkApnXDJNKOKdZI/Tc4XWdSvbG/ip nfF6lHyKA8+B+YtmJr5Qf4pEq1bGvIgMs+9ey7XliiniGV66s5xWX4pXTgENgdkLtLdv Cs316dZ/Ripe8tsbiI3uJMtjfcUq+9HupiqJ4BzlN47kXfzDbYRosjPORVr3oCMgFw/W bq9QGCfZViHwHICRTDZuU2vE7twcxTg9Ag82RegZbKfDaQUdAReU47pMDxAbE6KLWTb/ 9tDQ== X-Gm-Message-State: AMCzsaVIUAOhp9hSNty5n/AnyZCQ954aSj40eqWsZCDFWZ8LkKTwTlpC aEaqXOOiCLFTI9uvKYVxyCskKg== X-Google-Smtp-Source: AOwi7QBMekEVKEE40oEmqa6A0Xo17GQA3VOs+8cUA0eg2annqShVUODUhXxxhQg2kxYJRnlZbU7qrQ== X-Received: by 10.25.42.25 with SMTP id f25mr2547944lfl.173.1506813970884; Sat, 30 Sep 2017 16:26:10 -0700 (PDT) Received: from duuni.pp.htv.fi (dytyyyyyyyyyyyyycm94t-3.rev.dnainternet.fi. [2001:14ba:400::2:5771]) by smtp.gmail.com with ESMTPSA id v64sm1527239lje.39.2017.09.30.16.26.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 30 Sep 2017 16:26:10 -0700 (PDT) From: Tuomas Tynkkynen To: u-boot@lists.denx.de Date: Sun, 1 Oct 2017 02:25:22 +0300 Message-Id: <20170930232522.8152-2-tuomas.tynkkynen@iki.fi> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170930232522.8152-1-tuomas.tynkkynen@iki.fi> References: <20170930232522.8152-1-tuomas.tynkkynen@iki.fi> Cc: Tom Rini Subject: [U-Boot] [PATCH v2 2/2] fs/fat: Check malloc return values and fix memory leaks 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" Check malloc() return values and properly unwind on errors so memory allocated for fat_itr structures get freed properly. Also fixes a leak of fsdata.fatbuf in fat_size(). Fixes: 2460098cffacd1 ("fs/fat: Reduce stack usage") Reported-by: Coverity (CID: 167225, 167233, 167234) Signed-off-by: Tuomas Tynkkynen Reviewed-by: Tom Rini --- v2: New patch --- fs/fat/fat.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/fs/fat/fat.c b/fs/fat/fat.c index 35941c1498..7fe78439cf 100644 --- a/fs/fat/fat.c +++ b/fs/fat/fat.c @@ -1039,12 +1039,15 @@ int fat_exists(const char *filename) int ret; itr = malloc_cache_aligned(sizeof(fat_itr)); + if (!itr) + return 0; ret = fat_itr_root(itr, &fsdata); if (ret) - return 0; + goto out; ret = fat_itr_resolve(itr, filename, TYPE_ANY); free(fsdata.fatbuf); +out: free(itr); return ret == 0; } @@ -1056,9 +1059,11 @@ int fat_size(const char *filename, loff_t *size) int ret; itr = malloc_cache_aligned(sizeof(fat_itr)); + if (!itr) + return -ENOMEM; ret = fat_itr_root(itr, &fsdata); if (ret) - return ret; + goto out_free_itr; ret = fat_itr_resolve(itr, filename, TYPE_FILE); if (ret) { @@ -1072,12 +1077,13 @@ int fat_size(const char *filename, loff_t *size) *size = 0; ret = 0; } - goto out; + goto out_free_both; } *size = FAT2CPU32(itr->dent->size); +out_free_both: free(fsdata.fatbuf); -out: +out_free_itr: free(itr); return ret; } @@ -1090,19 +1096,22 @@ int file_fat_read_at(const char *filename, loff_t pos, void *buffer, int ret; itr = malloc_cache_aligned(sizeof(fat_itr)); + if (!itr) + return -ENOMEM; ret = fat_itr_root(itr, &fsdata); if (ret) - return ret; + goto out_free_itr; ret = fat_itr_resolve(itr, filename, TYPE_FILE); if (ret) - goto out; + goto out_free_both; printf("reading %s\n", filename); ret = get_contents(&fsdata, itr->dent, pos, buffer, maxsize, actread); -out: +out_free_both: free(fsdata.fatbuf); +out_free_itr: free(itr); return ret; } @@ -1148,17 +1157,18 @@ int fat_opendir(const char *filename, struct fs_dir_stream **dirsp) ret = fat_itr_root(&dir->itr, &dir->fsdata); if (ret) - goto fail; + goto fail_free_dir; ret = fat_itr_resolve(&dir->itr, filename, TYPE_DIR); if (ret) - goto fail; + goto fail_free_both; *dirsp = (struct fs_dir_stream *)dir; return 0; -fail: +fail_free_both: free(dir->fsdata.fatbuf); +fail_free_dir: free(dir); return ret; }