From patchwork Thu Mar 31 22:10:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Koschel X-Patchwork-Id: 555721 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4E9F1C433FE for ; Thu, 31 Mar 2022 22:11:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242298AbiCaWN3 (ORCPT ); Thu, 31 Mar 2022 18:13:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45040 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242292AbiCaWN2 (ORCPT ); Thu, 31 Mar 2022 18:13:28 -0400 Received: from mail-ej1-x635.google.com (mail-ej1-x635.google.com [IPv6:2a00:1450:4864:20::635]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E6BCF2467D4; Thu, 31 Mar 2022 15:11:39 -0700 (PDT) Received: by mail-ej1-x635.google.com with SMTP id c10so2036289ejs.13; Thu, 31 Mar 2022 15:11:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=DvaX5NXvnnhCONDjD2TggHPkVfcRk9lluokmAGVTnZM=; b=ZMW4W/JXgOmdAE/uk7oLtCBZGANvEkTZm27+6vll59icGjEh1fmGtj9aHhF+N8VwWe cFImyl/m3yOuxHZf2mR+o6SqxnFrCk7PmuiTKnwhWSS4mMhMp8MhqK3+dxnFksGHc1f9 E7ao7/8B5qUyV+7zEKkTwcnPhXmeYwEAsKTo9hEfom5PMgh98phNWgamRIoeGTGvbr8u A6iICD5lPCAwiqMRDgxcI0OXWaB5gQA61TQwpxYCn1ox2tZdGYgklyfRXAcsjYxOPqE2 v4vKCcK8OAuzr11Q6MUj4xDVz9Llhn8evvyKM5jYcZKJAFLK7zmTkhphCPrKnhU1EnCd K8sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=DvaX5NXvnnhCONDjD2TggHPkVfcRk9lluokmAGVTnZM=; b=DRIA3f0P4GeCLEEOjcrCSVXX/tDIgTrWRkVGQvUmLGvYYWQBsOoC5eOEUwkdCP96GX +ff46RcCUqYfHxogHoYcu/gj4ao/UofGhHfDkSYUgnb+todJiIDs/df+jmKGQraKsbQA CawSU2DUPU9rqHqaO4Td6QSmVnEgDa/2tSXm03NwvYdULr/OpN3aQdEjBlt31x5xJude TkxktPkaVyknVRDP+/z28J6DzoFoJwu8pFSjpc0v31sX4A2Gqx/YDBkWh7mQ7JuwOalM 4+fTmJOZzlVqLZ1vAf1iWmmwTOW+CDPVcx4uoJB0R62qRkcCbMFtF3xXlRqFBvw7ilnv AXLA== X-Gm-Message-State: AOAM531ZhvpmAATvbHX1Py7PXJ6jqeB1y1oR4J9DTDlr/I8AUvUXoVBX niMwGaWD3N81Z2FzcQ/FAMo= X-Google-Smtp-Source: ABdhPJxCUKRSlGZtTUbpQVH7NVvnrmeHu9U5lXqC5ZbW3RbN0yM+3Cb5dTyZj+0ARepqIki5fTdfzg== X-Received: by 2002:a17:907:c16:b0:6da:7d72:1357 with SMTP id ga22-20020a1709070c1600b006da7d721357mr6718359ejc.251.1648764698305; Thu, 31 Mar 2022 15:11:38 -0700 (PDT) Received: from localhost.localdomain (i130160.upc-i.chello.nl. [62.195.130.160]) by smtp.googlemail.com with ESMTPSA id z6-20020a056402274600b004194fc1b7casm321322edd.48.2022.03.31.15.11.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 31 Mar 2022 15:11:37 -0700 (PDT) From: Jakob Koschel To: Ard Biesheuvel Cc: linux-efi@vger.kernel.org, linux-kernel@vger.kernel.org, Mike Rapoport , "Brian Johannesmeyer" , Cristiano Giuffrida , "Bos, H.J." , Jakob Koschel Subject: [PATCH 1/2] efi: remove use of list iterator variable after loop Date: Fri, 1 Apr 2022 00:10:29 +0200 Message-Id: <20220331221030.889718-1-jakobkoschel@gmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-efi@vger.kernel.org In preparation to limiting the scope of a list iterator to the list traversal loop, use a dedicated pointer to iterate through the list [1]. In the current state the list_for_each_entry() is guaranteed to hit a break or goto in order to work properly. If the list iterator executes completely or the list is empty the iterator variable contains a type confused bogus value infered from the head of the list. With this patch the variable used past the list iterator is only set if the list exists early and is NULL otherwise. It should therefore be safe to just set *prev = NULL (as it was before). Link: https://lore.kernel.org/all/CAHk-=wgRr_D8CB-D9Kg-c=EHreAsk5SqXPwr9Y7k9sA6cWXJ6w@mail.gmail.com/ Signed-off-by: Jakob Koschel --- drivers/firmware/efi/vars.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) base-commit: d888c83fcec75194a8a48ccd283953bdba7b2550 diff --git a/drivers/firmware/efi/vars.c b/drivers/firmware/efi/vars.c index cae590bd08f2..3994aad38661 100644 --- a/drivers/firmware/efi/vars.c +++ b/drivers/firmware/efi/vars.c @@ -1081,14 +1081,16 @@ int __efivar_entry_iter(int (*func)(struct efivar_entry *, void *), struct list_head *head, void *data, struct efivar_entry **prev) { - struct efivar_entry *entry, *n; + struct efivar_entry *entry = NULL, *iter, *n; int err = 0; if (!prev || !*prev) { - list_for_each_entry_safe(entry, n, head, list) { - err = func(entry, data); - if (err) + list_for_each_entry_safe(iter, n, head, list) { + err = func(iter, data); + if (err) { + entry = iter; break; + } } if (prev) From patchwork Thu Mar 31 22:10:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Koschel X-Patchwork-Id: 555387 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 17B0DC433EF for ; Thu, 31 Mar 2022 22:11:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241816AbiCaWN3 (ORCPT ); Thu, 31 Mar 2022 18:13:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45042 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242294AbiCaWN2 (ORCPT ); Thu, 31 Mar 2022 18:13:28 -0400 Received: from mail-ej1-x62e.google.com (mail-ej1-x62e.google.com [IPv6:2a00:1450:4864:20::62e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 611A32467D5; Thu, 31 Mar 2022 15:11:40 -0700 (PDT) Received: by mail-ej1-x62e.google.com with SMTP id dr20so2108365ejc.6; Thu, 31 Mar 2022 15:11:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=rSHqaeCwi2QD3QGRa2HT7kH4AFnUyMZ52I3NV95q5GM=; b=Pan4DsKz/3eGh99T01l3+pjIWjhQWcMXgqhP6g3wWts1Nc3tuD/v8nE9cIUShX+1+6 N/uT3WyhLdhLZgH7p1Pmpp7rn/jgGyhrMzyPT7FomwdA68v5BrmFhiFhngsP0zuxLk19 EblbpXz3Mb5bfjrFqtCdvFNawCYr5KizCrMMS3hgv0WApHIRzMTyao8DS6ByGRnz7adF Ijlmoivly5IS86Mrg9+YuixMXgwVSq9t8x76CtIBcf5iH8bMmuXRN/Igzua63es8gYG0 F3J+KX0GoAKD5VFYOCaX6YYnjj63XR5AsJemXHpmRPaozh18Sr+D232fxWKoQx2ofHni tKKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=rSHqaeCwi2QD3QGRa2HT7kH4AFnUyMZ52I3NV95q5GM=; b=XwssCdNT02qwbQJr0A46qrddAbJ5hJPs8tVhkBsJFfx31+PQwGLxJvHymrmLRCAeZK K81Pi/9/+xvx3qPqSkZKJpApSktq+6UaYm2SvwyTdKrzLaF1/1BqoC6cSx57LoqBDEoj bVLeJaQq7STa4c/5pybztgOVrlUuDYR+cve23ZpIoN/S19GYVsFZzP7My9FXKqtaTM+0 WE1JFDe2TZK3oimDFzI0QCoTo4svLb040sdc3V34EKNr6ZQPXPaHp4s2lGDzn5zq2MGH Mnrnunsg80rYpufiCM3f35Lk4uSd1/1QwVh0es4HDgtqw0q8W9dLUO0bzlv/pq0ZAmp0 fXFw== X-Gm-Message-State: AOAM531/UekHJAYii0el7Ebqd9ll+54xiHTlMbESeuzFzIXxZRRvZf8H bDtZYMbrv1MIdY3YfYA195M8tVe7TfS8Cg== X-Google-Smtp-Source: ABdhPJyqWITxbnsFHIxvaXumnsP+t28c0RZ1VaYZy5bhDwV+SEVUTXvlHQUE7rUmWP+CXDa5mLgmrw== X-Received: by 2002:a17:906:3ec7:b0:6d6:e52b:b with SMTP id d7-20020a1709063ec700b006d6e52b000bmr6931528ejj.521.1648764698980; Thu, 31 Mar 2022 15:11:38 -0700 (PDT) Received: from localhost.localdomain (i130160.upc-i.chello.nl. [62.195.130.160]) by smtp.googlemail.com with ESMTPSA id z6-20020a056402274600b004194fc1b7casm321322edd.48.2022.03.31.15.11.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 31 Mar 2022 15:11:38 -0700 (PDT) From: Jakob Koschel To: Ard Biesheuvel Cc: linux-efi@vger.kernel.org, linux-kernel@vger.kernel.org, Mike Rapoport , "Brian Johannesmeyer" , Cristiano Giuffrida , "Bos, H.J." , Jakob Koschel Subject: [PATCH 2/2] efi: replace usage of found with dedicated list iterator variable Date: Fri, 1 Apr 2022 00:10:30 +0200 Message-Id: <20220331221030.889718-2-jakobkoschel@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220331221030.889718-1-jakobkoschel@gmail.com> References: <20220331221030.889718-1-jakobkoschel@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-efi@vger.kernel.org To move the list iterator variable into the list_for_each_entry_*() macro in the future it should be avoided to use the list iterator variable after the loop body. To *never* use the list iterator variable after the loop it was concluded to use a separate iterator variable instead of a found boolean [1]. This removes the need to use a found variable and simply checking if the variable was set, can determine if the break/goto was hit. Link: https://lore.kernel.org/all/CAHk-=wgRr_D8CB-D9Kg-c=EHreAsk5SqXPwr9Y7k9sA6cWXJ6w@mail.gmail.com/ Signed-off-by: Jakob Koschel Acked-by: Ard Biesheuvel --- drivers/firmware/efi/vars.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/drivers/firmware/efi/vars.c b/drivers/firmware/efi/vars.c index 3994aad38661..e4e1cc593441 100644 --- a/drivers/firmware/efi/vars.c +++ b/drivers/firmware/efi/vars.c @@ -809,22 +809,21 @@ EXPORT_SYMBOL_GPL(efivar_entry_set_safe); struct efivar_entry *efivar_entry_find(efi_char16_t *name, efi_guid_t guid, struct list_head *head, bool remove) { - struct efivar_entry *entry, *n; + struct efivar_entry *entry = NULL, *iter, *n; int strsize1, strsize2; - bool found = false; - list_for_each_entry_safe(entry, n, head, list) { + list_for_each_entry_safe(iter, n, head, list) { strsize1 = ucs2_strsize(name, 1024); - strsize2 = ucs2_strsize(entry->var.VariableName, 1024); + strsize2 = ucs2_strsize(iter->var.VariableName, 1024); if (strsize1 == strsize2 && - !memcmp(name, &(entry->var.VariableName), strsize1) && - !efi_guidcmp(guid, entry->var.VendorGuid)) { - found = true; + !memcmp(name, &(iter->var.VariableName), strsize1) && + !efi_guidcmp(guid, iter->var.VendorGuid)) { + entry = iter; break; } } - if (!found) + if (!entry) return NULL; if (remove) {