All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Kees Cook <keescook@chromium.org>,
	Aaron Brown <aaron.f.brown@intel.com>,
	Jeff Kirsher <jeffrey.t.kirsher@intel.com>,
	Sasha Levin <sashal@kernel.org>,
	intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
	clang-built-linux@googlegroups.com
Subject: [PATCH AUTOSEL 4.9 18/50] e1000: Distribute switch variables for initialization
Date: Mon,  8 Jun 2020 19:26:08 -0400	[thread overview]
Message-ID: <20200608232640.3370262-18-sashal@kernel.org> (raw)
In-Reply-To: <20200608232640.3370262-1-sashal@kernel.org>

From: Kees Cook <keescook@chromium.org>

[ Upstream commit a34c7f5156654ebaf7eaace102938be7ff7036cb ]

Variables declared in a switch statement before any case statements
cannot be automatically initialized with compiler instrumentation (as
they are not part of any execution flow). With GCC's proposed automatic
stack variable initialization feature, this triggers a warning (and they
don't get initialized). Clang's automatic stack variable initialization
(via CONFIG_INIT_STACK_ALL=y) doesn't throw a warning, but it also
doesn't initialize such variables[1]. Note that these warnings (or silent
skipping) happen before the dead-store elimination optimization phase,
so even when the automatic initializations are later elided in favor of
direct initializations, the warnings remain.

To avoid these problems, move such variables into the "case" where
they're used or lift them up into the main function body.

drivers/net/ethernet/intel/e1000/e1000_main.c: In function ‘e1000_xmit_frame’:
drivers/net/ethernet/intel/e1000/e1000_main.c:3143:18: warning: statement will never be executed [-Wswitch-unreachable]
 3143 |     unsigned int pull_size;
      |                  ^~~~~~~~~

[1] https://bugs.llvm.org/show_bug.cgi?id=44916

Signed-off-by: Kees Cook <keescook@chromium.org>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/net/ethernet/intel/e1000/e1000_main.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
index 39a09e18c1b7..3b16ee0de246 100644
--- a/drivers/net/ethernet/intel/e1000/e1000_main.c
+++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
@@ -3167,8 +3167,9 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
 		hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
 		if (skb->data_len && hdr_len == len) {
 			switch (hw->mac_type) {
+			case e1000_82544: {
 				unsigned int pull_size;
-			case e1000_82544:
+
 				/* Make sure we have room to chop off 4 bytes,
 				 * and that the end alignment will work out to
 				 * this hardware's requirements
@@ -3189,6 +3190,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
 				}
 				len = skb_headlen(skb);
 				break;
+			}
 			default:
 				/* do nothing */
 				break;
-- 
2.25.1


WARNING: multiple messages have this Message-ID (diff)
From: Sasha Levin <sashal@kernel.org>
To: intel-wired-lan@osuosl.org
Subject: [Intel-wired-lan] [PATCH AUTOSEL 4.9 18/50] e1000: Distribute switch variables for initialization
Date: Mon,  8 Jun 2020 19:26:08 -0400	[thread overview]
Message-ID: <20200608232640.3370262-18-sashal@kernel.org> (raw)
In-Reply-To: <20200608232640.3370262-1-sashal@kernel.org>

From: Kees Cook <keescook@chromium.org>

[ Upstream commit a34c7f5156654ebaf7eaace102938be7ff7036cb ]

Variables declared in a switch statement before any case statements
cannot be automatically initialized with compiler instrumentation (as
they are not part of any execution flow). With GCC's proposed automatic
stack variable initialization feature, this triggers a warning (and they
don't get initialized). Clang's automatic stack variable initialization
(via CONFIG_INIT_STACK_ALL=y) doesn't throw a warning, but it also
doesn't initialize such variables[1]. Note that these warnings (or silent
skipping) happen before the dead-store elimination optimization phase,
so even when the automatic initializations are later elided in favor of
direct initializations, the warnings remain.

To avoid these problems, move such variables into the "case" where
they're used or lift them up into the main function body.

drivers/net/ethernet/intel/e1000/e1000_main.c: In function ?e1000_xmit_frame?:
drivers/net/ethernet/intel/e1000/e1000_main.c:3143:18: warning: statement will never be executed [-Wswitch-unreachable]
 3143 |     unsigned int pull_size;
      |                  ^~~~~~~~~

[1] https://bugs.llvm.org/show_bug.cgi?id=44916

Signed-off-by: Kees Cook <keescook@chromium.org>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/net/ethernet/intel/e1000/e1000_main.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
index 39a09e18c1b7..3b16ee0de246 100644
--- a/drivers/net/ethernet/intel/e1000/e1000_main.c
+++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
@@ -3167,8 +3167,9 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
 		hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
 		if (skb->data_len && hdr_len == len) {
 			switch (hw->mac_type) {
+			case e1000_82544: {
 				unsigned int pull_size;
-			case e1000_82544:
+
 				/* Make sure we have room to chop off 4 bytes,
 				 * and that the end alignment will work out to
 				 * this hardware's requirements
@@ -3189,6 +3190,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
 				}
 				len = skb_headlen(skb);
 				break;
+			}
 			default:
 				/* do nothing */
 				break;
-- 
2.25.1


  parent reply	other threads:[~2020-06-08 23:43 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-08 23:25 [PATCH AUTOSEL 4.9 01/50] ath9x: Fix stack-out-of-bounds Write in ath9k_hif_usb_rx_cb Sasha Levin
2020-06-08 23:25 ` [PATCH AUTOSEL 4.9 02/50] ath9k: Fix use-after-free Write in ath9k_htc_rx_msg Sasha Levin
2020-06-08 23:25 ` [PATCH AUTOSEL 4.9 03/50] media: si2157: Better check for running tuner in init Sasha Levin
2020-06-08 23:25 ` [PATCH AUTOSEL 4.9 04/50] objtool: Ignore empty alternatives Sasha Levin
2020-06-08 23:25 ` [PATCH AUTOSEL 4.9 05/50] net: ena: fix error returning in ena_com_get_hash_function() Sasha Levin
2020-06-08 23:25 ` [PATCH AUTOSEL 4.9 06/50] spi: dw: Zero DMA Tx and Rx configurations on stack Sasha Levin
2020-06-08 23:25 ` [PATCH AUTOSEL 4.9 07/50] Bluetooth: Add SCO fallback for invalid LMP parameters error Sasha Levin
2020-06-08 23:25 ` [PATCH AUTOSEL 4.9 08/50] kgdb: Prevent infinite recursive entries to the debugger Sasha Levin
2020-06-08 23:25 ` [PATCH AUTOSEL 4.9 09/50] spi: dw: Enable interrupts in accordance with DMA xfer mode Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 10/50] clocksource: dw_apb_timer_of: Fix missing clockevent timers Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 11/50] btrfs: do not ignore error from btrfs_next_leaf() when inserting checksums Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 12/50] ARM: 8978/1: mm: make act_mm() respect THREAD_SIZE Sasha Levin
2020-06-08 23:26   ` Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 13/50] x86/kvm/hyper-v: Explicitly align hcall param for kvm_hyperv_exit Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 14/50] net: vmxnet3: fix possible buffer overflow caused by bad DMA value in vmxnet3_get_rss() Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 15/50] staging: android: ion: use vmap instead of vm_map_ram Sasha Levin
2020-06-08 23:26   ` Sasha Levin
2020-06-08 23:26   ` Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 16/50] ath9k: Fix use-after-free Read in ath9k_wmi_ctrl_rx Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 17/50] ath9k: Fix general protection fault in ath9k_hif_usb_rx_cb Sasha Levin
2020-06-08 23:26 ` Sasha Levin [this message]
2020-06-08 23:26   ` [Intel-wired-lan] [PATCH AUTOSEL 4.9 18/50] e1000: Distribute switch variables for initialization Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 19/50] dt-bindings: display: mediatek: control dpi pins mode to avoid leakage Sasha Levin
2020-06-08 23:26   ` Sasha Levin
2020-06-08 23:26   ` Sasha Levin
2020-06-08 23:26   ` Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 20/50] media: dvb: return -EREMOTEIO on i2c transfer failure Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 21/50] media: platform: fcp: Set appropriate DMA parameters Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 22/50] MIPS: Make sparse_init() using top-down allocation Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 23/50] netfilter: nft_nat: return EOPNOTSUPP if type or flags are not supported Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 24/50] lib/mpi: Fix 64-bit MIPS build with Clang Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 25/50] perf: Add cond_resched() to task_function_call() Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 26/50] exit: Move preemption fixup up, move blocking operations down Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 27/50] net: lpc-enet: fix error return code in lpc_mii_init() Sasha Levin
2020-06-08 23:26   ` Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 28/50] net: allwinner: Fix use correct return type for ndo_start_xmit() Sasha Levin
2020-06-08 23:26   ` Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 29/50] powerpc/spufs: fix copy_to_user while atomic Sasha Levin
2020-06-08 23:26   ` Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 30/50] ath9k_htc: Silence undersized packet warnings Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 31/50] MIPS: Truncate link address into 32bit for 32bit kernel Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 32/50] mips: cm: Fix an invalid error code of INTVN_*_ERR Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 33/50] kgdb: Fix spurious true from in_dbg_master() Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 34/50] md: don't flush workqueue unconditionally in md_open Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 35/50] rtlwifi: Fix a double free in _rtl_usb_tx_urb_setup() Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 36/50] mwifiex: Fix memory corruption in dump_station Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 37/50] x86/boot: Correct relocation destination on old linkers Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 38/50] mips: Add udelay lpj numbers adjustment Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 39/50] x86/mm: Stop printing BRK addresses Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 40/50] m68k: mac: Don't call via_flush_cache() on Mac IIfx Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 41/50] macvlan: Skip loopback packets in RX handler Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 42/50] PCI: Don't disable decoding when mmio_always_on is set Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 43/50] MIPS: Fix IRQ tracing when call handle_fpe() and handle_msa_fpe() Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 44/50] xfs: gut error handling in xfs_trans_unreserve_and_mod_sb() Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 45/50] staging: greybus: sdio: Respect the cmd->busy_timeout from the mmc core Sasha Levin
2020-06-08 23:26   ` Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 46/50] ixgbe: fix signed-integer-overflow warning Sasha Levin
2020-06-08 23:26   ` [Intel-wired-lan] " Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 47/50] mmc: sdhci-esdhc-imx: fix the mask for tuning start point Sasha Levin
2020-06-08 23:26   ` Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 48/50] spi: dw: Return any value retrieved from the dma_transfer callback Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 49/50] cpuidle: Fix three reference count leaks Sasha Levin
2020-06-08 23:26 ` [PATCH AUTOSEL 4.9 50/50] vxlan: Avoid infinite loop when suppressing NS messages with invalid options Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200608232640.3370262-18-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=aaron.f.brown@intel.com \
    --cc=clang-built-linux@googlegroups.com \
    --cc=intel-wired-lan@lists.osuosl.org \
    --cc=jeffrey.t.kirsher@intel.com \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.