From patchwork Fri Apr 29 17:48:31 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 100871 Delivered-To: patch@linaro.org Received: by 10.140.93.198 with SMTP id d64csp921594qge; Fri, 29 Apr 2016 10:49:27 -0700 (PDT) X-Received: by 10.66.232.226 with SMTP id tr2mr31013003pac.44.1461952167324; Fri, 29 Apr 2016 10:49:27 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v8si17469705pfi.16.2016.04.29.10.49.27; Fri, 29 Apr 2016 10:49:27 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751980AbcD2RtL (ORCPT + 29 others); Fri, 29 Apr 2016 13:49:11 -0400 Received: from mout.kundenserver.de ([212.227.126.134]:58095 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751979AbcD2RtH (ORCPT ); Fri, 29 Apr 2016 13:49:07 -0400 Received: from wuerfel.lan. ([78.42.132.4]) by mrelayeu.kundenserver.de (mreue003) with ESMTPA (Nemesis) id 0LwmRY-1bkjnU2moi-016RiO; Fri, 29 Apr 2016 19:48:56 +0200 From: Arnd Bergmann To: Matt Fleming Cc: Arnd Bergmann , "Compostella, Jeremy" , Ingo Molnar , linux-efi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] efibc: avoid stack overflow warning Date: Fri, 29 Apr 2016 19:48:31 +0200 Message-Id: <1461952128-2135409-1-git-send-email-arnd@arndb.de> X-Mailer: git-send-email 2.7.0 X-Provags-ID: V03:K0:aNwbsSMpBHR1Eyv/EkuefjyngkQIaCubsqSLOtDuDuid6vQPnzm vDoeKgymLvuVWP8cTbNuvY494GK97HkzKNUWrx+DLEHcxI9ZYwUDh9uok8mmsThILVslqpf 8CymY1+YGbgC9Z5CNVgWG7R4saS0ji3j+y6mbO8ln5a9WZb7TfXrSTzAuY2CWU2Uw8qIlqS oteF4KL0WGfODgpLlyz4A== X-UI-Out-Filterresults: notjunk:1; V01:K0:rlSExSbvIH0=:4kzdjOrBhhv18BzeSpfcT9 dU3abhbp6lc0fW2Gte7Qgu2ZQxnIXLUV72gpRJP8CEQ/i8Xh8oliVEep2+8cH4FMa+35QBJvU xBP52/LUAt6WN/Skw88W5y1DwrxvT39VqIHM6LZwTLR0dGaDOz5o2UKvi+xILMpxLT2oYKX6C OinCViTP/h76NvEltAmm0958OsXCITiutbht8L18HJEHTzQB4o2PDxKUN4Jykk2aAksoYeeNK bvxEMUVjK/dahjNJfkpc0fB5/w7cBhwSLZZQtVPkLyXkFrMC2roR3HFJs1nbXGy5yaHEytzm+ vJ14ExN0R21gClzUMFLglTzmAWpTgrTKfmx6SmYFYIalSlWHJOUrmOZVi6TGh0R6lP6RWPak1 Flba+5cc7GlcEHqpBLPo1GueLhBUDvxvdfFxsYk4/mm2iLp2pKOXCFCqORPEG5aAhAYa+r3Kf KWc5lu4tb3ZXIaWAjlzkOoN5hMZoOZn+fln3dsegACxW6Sjuj3c9AjHaVlLHH8D5/plusLQG0 bcedU8/K2EIs/J2sJJiaiMf1DhiURhDMvty3jOD0oqoVCHZfSUyLZrgmfrzkr9yatRJgZEljH 5hStDOcDFDAUKcf+uABU5wkv8trcLMf/VwSpBS0A7Me8GR42QdkcNRH+uTNGBF+83Icor9Ce8 z0xPo4szOp05C/TArjUP8FQI5Bmcv1E5LT24yS1K9U6iqA0XtZUSXC2WeO3aox+ZT0lw= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org gcc complains about a newly added file for the EFI Bootloader Control: drivers/firmware/efi/efibc.c: In function 'efibc_set_variable': drivers/firmware/efi/efibc.c:53:1: error: the frame size of 2272 bytes is larger than 1024 bytes [-Werror=frame-larger-than=] The problem is the declaration of a local variable of type struct efivar_entry, which is by itself larger than the warning limit of 1024 bytes. We know that the reboot notifiers are not called from a deep stack, so this is not an actual bug, but we should still try to rework the code to avoid the warning. We also know that reboot notifiers are never run concurrently on multiple CPUs, so there is no problem in just making the variable 'static'. Signed-off-by: Arnd Bergmann Fixes: 06f7d4a1618d ("efibc: Add EFI Bootloader Control module") --- drivers/firmware/efi/efibc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) -- 2.7.0 diff --git a/drivers/firmware/efi/efibc.c b/drivers/firmware/efi/efibc.c index 2e0c7ccd9d9e..83ac90efa03f 100644 --- a/drivers/firmware/efi/efibc.c +++ b/drivers/firmware/efi/efibc.c @@ -31,8 +31,9 @@ static void efibc_str_to_str16(const char *str, efi_char16_t *str16) static void efibc_set_variable(const char *name, const char *value) { int ret; - efi_guid_t guid = LINUX_EFI_LOADER_ENTRY_GUID; - struct efivar_entry entry; + static struct efivar_entry entry = { + .var.VendorGuid = LINUX_EFI_LOADER_ENTRY_GUID, + }; size_t size = (strlen(value) + 1) * sizeof(efi_char16_t); if (size > sizeof(entry.var.Data)) @@ -40,7 +41,6 @@ static void efibc_set_variable(const char *name, const char *value) efibc_str_to_str16(name, entry.var.VariableName); efibc_str_to_str16(value, (efi_char16_t *)entry.var.Data); - memcpy(&entry.var.VendorGuid, &guid, sizeof(guid)); ret = efivar_entry_set(&entry, EFI_VARIABLE_NON_VOLATILE