From patchwork Sun May 27 15:49:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 921167 X-Patchwork-Delegate: agraf@suse.de 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=none (p=none dis=none) header.from=gmx.de Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40v4GW2zzHz9s1b for ; Mon, 28 May 2018 01:51:15 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 0B5B4C21DF9; Sun, 27 May 2018 15:50:09 +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 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 10273C21DB6; Sun, 27 May 2018 15:49:35 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 032EAC21BE5; Sun, 27 May 2018 15:49:32 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) by lists.denx.de (Postfix) with ESMTPS id A6130C21C2F for ; Sun, 27 May 2018 15:49:32 +0000 (UTC) Received: from LPT2.fritz.box ([95.223.128.184]) by mail.gmx.com (mrgmx101 [212.227.17.174]) with ESMTPSA (Nemesis) id 0LbR3e-1g27Ez2XDG-00ktBq; Sun, 27 May 2018 17:49:27 +0200 From: Heinrich Schuchardt To: Alexander Graf Date: Sun, 27 May 2018 17:49:18 +0200 Message-Id: <20180527154920.10959-2-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180527154920.10959-1-xypron.glpk@gmx.de> References: <20180527154920.10959-1-xypron.glpk@gmx.de> X-Provags-ID: V03:K1:Y2P9lJ6mM/lr51IUkFRddf3qzCna6KiG5ExGdaixeiCFOk2AvyD tVZLdc1LJHqD+xMu14KjHERj0IVky9OfqOzqEJfw8nl0AsCp1YkybBHh4S0TIx79q2YZ936 Ay7imu48UX2n9QqY+vVmK+py78cmLhkexbKoStSCjBg48sx0umd3wQ+tk7zslMwuvvuH7in UAnyN9A1X3CQMFv3xjEiQ== X-UI-Out-Filterresults: notjunk:1; V01:K0:BnbIrTBhFyE=:Hw3POOvqcKzH7UwzEVylx6 rT5NxQa0qNUFo82PIymNqbCDy1TfXRHGPBUI/t4HApRl9999gki86gFEiknfDchZflKI/L9uB Ya6C4lBc2XKz1X3/pNYtPQDHMxyJglxbTmw6Aq0hUxyT6//yyLyn8hAAL0DO8xM6Q8dPY/js/ PPgQ3BZImSImXnZ99PB3VY+DZ6uRVxeIi57LaBEspWvRLkd9+lA5raiLCCAPC7+xJKCXzWX+D kSmEa5yE8+df/P5t2TqwELJgD4tNE2pHob7Uerq3jxWvuRWRy230NZFL/aRY2Fz37BKj0bCrA kmi9OxpKC97UdM6EYwH113nnDWyD6SbrG7neKxmoJ+HuRoiquujfJAupyBD0hJqCligUbZH3l RXtgi6i0t4zD5p4C3FLZUdwpIda1vPXgGIHeinjg0jjpchueITLVHznt3zvb9Lzx77gbT7XJP 7JYanF3CYBb7kgwtUWW/7qvTRGx6pTTSwSweuTKhFVQ9K7rQADLOheo9pq3LaTF+KDrCg4Zp1 e611zfuDboB2Q2FZMpAC/mUgE/27nMgCDPxsJWRNDPlzDHSNKQ6optu5Cb7gdcremqSIZwTbX 79Fxs6cLxWh2Cds8gFPeg417AbVorrm1eKryF5J6J8UHjp73Oj4U/AkgXzakgRo5Bd2B6S9Qf eggY4dwh8pwpE9Z8WA7YeeJak79uq+dneu8T9VuUn7whHCx/vxGYByx8RkDt7W22l9vb2JqLS ZBrSJnMhRlmP9WMCAWxTkIBli+ZlU2vM3wggMPsm3V8UtBetn0VGXW9UBKI= Cc: Heinrich Schuchardt , u-boot@lists.denx.de Subject: [U-Boot] [PATCH v2 1/3] fs: fat: cannot write to subdirectories 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" fs_fat_write() is not able to write to subdirectories. Currently if a filepath with a leading slash is passed, the slash is treated as part of the filename to be created in the root directory. Strip leading (back-)slashes. Check that the remaining filename does not contain any illegal characters (<>:"/\|?*). This way we will throw an error when trying to write to a subdirectory. Signed-off-by: Heinrich Schuchardt --- v2: use ISDIRDELIM() to identify (back-)slashes --- fs/fat/fat_write.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c index 5ca8fcda73c..c5aee519b79 100644 --- a/fs/fat/fat_write.c +++ b/fs/fat/fat_write.c @@ -908,9 +908,11 @@ static int do_fat_write(const char *filename, void *buffer, loff_t size, volume_info volinfo; fsdata datablock; fsdata *mydata = &datablock; - int cursect; + int cursect, i; int ret = -1, name_len; char l_filename[VFAT_MAXLEN_BYTES]; + char bad[2] = " "; + const char illegal[] = "<>:\"/\\|?*"; *actwrite = size; dir_curclust = 0; @@ -970,6 +972,18 @@ static int do_fat_write(const char *filename, void *buffer, loff_t size, } dentptr = (dir_entry *) do_fat_read_at_block; + /* Strip leading (back-)slashes */ + while ISDIRDELIM(*filename) + ++filename; + /* Check that the filename is valid */ + for (i = 0; i < strlen(illegal); ++i) { + *bad = illegal[i]; + if (strstr(filename, bad)) { + printf("FAT: illegal filename (%s)\n", filename); + return -1; + } + } + name_len = strlen(filename); if (name_len >= VFAT_MAXLEN_BYTES) name_len = VFAT_MAXLEN_BYTES - 1;