From patchwork Sun Jul 22 11:34:13 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 947466 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 41YMwr1CFdz9rvt for ; Sun, 22 Jul 2018 21:34:50 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 7F6A4C21EC3; Sun, 22 Jul 2018 11:34:44 +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 E746CC21C29; Sun, 22 Jul 2018 11:34:41 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 025D2C21C29; Sun, 22 Jul 2018 11:34:40 +0000 (UTC) Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) by lists.denx.de (Postfix) with ESMTPS id 9B4F4C21BE5 for ; Sun, 22 Jul 2018 11:34:40 +0000 (UTC) Received: from workstation4.fritz.box ([88.152.14.153]) by mail.gmx.com (mrgmx103 [212.227.17.174]) with ESMTPSA (Nemesis) id 0LcSWg-1gOkrQ3OI2-00jtiQ; Sun, 22 Jul 2018 13:34:38 +0200 From: Heinrich Schuchardt To: "AKASHI, Takahiro" Date: Sun, 22 Jul 2018 13:34:13 +0200 Message-Id: <20180722113413.25359-1-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.18.0 X-Provags-ID: V03:K1:8R0Y9O2fk4uSugKNFaavQIu+gh6AD6Hq0wkD02Z1VhADE0/UjaG SgrcqXSSmMkMHr0VQqWpJg9wvNLu8UILilKtTaQ5wsd3bS+q3l+p20oQwzEES4VQd83wjo/ hRjiojKwMR6jR4Z13SKm8cp7uW7C2cIQtuxJ8NqNXceZtvIte/A0LusACbI1mO/7y02f9vU D6ZMBzCAhxIP3XFR1VzEg== X-UI-Out-Filterresults: notjunk:1; V01:K0:T9bmH1/kilU=:Bwv0FAYYDjCnky3wiJvoDj qPq2rmRobWoEyxKE6NY4gvmsclzCqT/6xjCFDgFDSTrlnQCagdKsNgdsz+AnPCFuAKtx10wEZ 13IM9YKIuYKtkxCvCfaQlH+DOP3G41Ie/w8NwhePro5CMQgnWwzpSF+4hrSdsBzMn1NQJ5gNH Cu86MtB70tx6hN/x4d4i7ZQT/bG5oqQ/texrMdlrRojjg48BZxLBS8jsXRLVi16s5+G8Z6EKz pDXJ4UCETwdT+Lg83Q1RHipnBwaCYRfrAwKwQZSPcTEDRKjMcgr573z3bcKZsCcc+FHnkV5r5 eboOuv290Kj4PsSFb9F3ugAelcxYMxUFnzn3snOjBnlC/txRRPyOXyFeWW4d4WmLgdzj9Zu28 K7qk4NiuJ7x/skM0LCQweVHyQ8ZApb/4BZjA4I0raG1I7IGB59TinPJK5qgmjb0SlCsKaqbWT QHElNL77GO5bscNHBNdJYtzk2KalSaxa5VHQDmgL77bla7wsMyifFv1OqyXGvO6zs6P8lK9Mh FkEB24vvSif3n0BGrSMCzK6EeRsIO5l7/KoMCBOEbMOmfDOJOMWDaZMO0XY3zY5+nPzmqREB3 zrQtqK2aA234yflJPYaQS/WumGHANN+8togQQkRV3huFIlmgbGY65+4Ta9mS5l/6M5fk3p6mC BPftTUKJHJjOmhstrGjtQWwRvKKIJZ3uyAWxlBVCJ3TEVguelVljSXgWnCzATSccviTf9xgJV +28H779uR5vN7V5xToBFs3JOiLn5aW8+E3/rI32VKvfcCPGaxZMxMdON4dw= Cc: u-boot@lists.denx.de, Alexander Graf , Heinrich Schuchardt Subject: [U-Boot] [RFC 1/1] efi_loader: check parameters of efi_file_open() 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 the parameters of efi_file_open(). Signed-off-by: Heinrich Schuchardt --- Hello Takahiro, this patch is necessary to become more UEFI compliant. But it interferes with your FAT patch series. You might integrate the changes into the next version of you patch series. Otherwise I keep the patch until your series is merged. Best regards Heinrich --- lib/efi_loader/efi_file.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/lib/efi_loader/efi_file.c b/lib/efi_loader/efi_file.c index 07696a8f56..8f04943670 100644 --- a/lib/efi_loader/efi_file.c +++ b/lib/efi_loader/efi_file.c @@ -202,15 +202,37 @@ static efi_status_t EFIAPI efi_file_open(struct efi_file_handle *file, s16 *file_name, u64 open_mode, u64 attributes) { struct file_handle *fh = to_fh(file); + efi_status_t ret; EFI_ENTRY("%p, %p, \"%ls\", %llx, %llu", file, new_handle, file_name, open_mode, attributes); - *new_handle = file_open(fh->fs, fh, file_name, open_mode); - if (!*new_handle) - return EFI_EXIT(EFI_NOT_FOUND); + /* Check parameters */ + if (!file || !file || !file_name) { + ret = EFI_INVALID_PARAMETER; + goto out; + } + if (open_mode != EFI_FILE_MODE_READ && + open_mode != (EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE) && + open_mode != (EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE | + EFI_FILE_MODE_CREATE)) { + ret = EFI_INVALID_PARAMETER; + goto out; + } + if ((!(open_mode & EFI_FILE_MODE_CREATE) && attributes) || + (attributes & (EFI_FILE_READ_ONLY | ~EFI_FILE_VALID_ATTR))) { + ret = EFI_INVALID_PARAMETER; + goto out; + } - return EFI_EXIT(EFI_SUCCESS); + /* Open file */ + *new_handle = file_open(fh->fs, fh, file_name, open_mode); + if (*new_handle) + ret = EFI_SUCCESS; + else + ret = EFI_NOT_FOUND; +out: + return EFI_EXIT(ret); } static efi_status_t file_close(struct file_handle *fh)