Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp1615022pxb; Mon, 11 Oct 2021 09:31:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzJA7umuVV7rB0yqteh8ykcOncX2+a/KvnxNG6kKxaayG8RxGC2cOUg/E3kSE2omnOdxOB+ X-Received: by 2002:a17:90a:a08d:: with SMTP id r13mr15880939pjp.191.1633969909776; Mon, 11 Oct 2021 09:31:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633969909; cv=none; d=google.com; s=arc-20160816; b=atS9o8RpYQRFWlSZjUJHPBUSpwiTqQeLIt4qFZnyfKLAnk16qhBySGkmJR2RkIjdjp kZlPzx4HFUHSNfgtMVTo9GT2/u5wrfTCW9sy+pmPGcNOOuHR0sGlAxGln1oTKJnh/BrK bQMqXF31S1x0gUBVwalKWb3X7yQLsD+uTV/k34VPfawuYpMBJjxOSCe/zgM8/NhdHy2E AwDMiSiGPd97M6B2M8IbRnGkXpshsYdUl5LbZM/vNDcIa2A0xTjPUWvxOe1ZuFVYoNzz H4xhks/vTJEDNPADsgBGNrlFm6J1QQltPc7YofeGEHZ06FjKBprVCZhwMUNcJi6xQt0J n2PQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=8tm3ZXHCYuIDRD1mAjoE4BFHI1AtWYvTd+ZHgYalYEg=; b=zP0ap3idrafZLnrtWPnsNLz32PCewZxpvtZ1NvBWdxQF6sc4rz8SqhaXKGr5oQlIvn IrkWl2lW35UA+Nii19vTRcUFc1BrNHz2ZWcJZXaLHScYcFh85pL5Hjh4MS8gZO3Ix9HV SV2MKrSA2jvySdHaQ8sLEZQiqjIK+Q8jCyDru2sH9VQ3kB5oQcpU2YBp4sW9Sf/Znike byNlkS7qbXVHsFecnekNX8kKC8wnSsdkYdmTdxPAiaek+s/f6pL6Kt15CLolz+rb2j40 2+/MCsredk+AOo4W48HGTmBu3dy/QXe/1NTrhk/SEwlAoaPSVOJfrNrBNAGvQkJwqPN9 sJBg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=ePSX9E+5; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i14si11622135pgk.326.2021.10.11.09.31.37; Mon, 11 Oct 2021 09:31:49 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=ePSX9E+5; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238223AbhJKOAY (ORCPT + 99 others); Mon, 11 Oct 2021 10:00:24 -0400 Received: from mail.kernel.org ([198.145.29.99]:49584 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237300AbhJKN5s (ORCPT ); Mon, 11 Oct 2021 09:57:48 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id F0CE361164; Mon, 11 Oct 2021 13:54:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1633960464; bh=QbMR3sUc9zdTCVfFasbTeaKdU0gHHMXBsZM9tdEX+rA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ePSX9E+5vnaF6OJZSVe9cqPWMVebB5CXiocMGzdXq45ghm7E6CjqGUHh1DfQWhNgh lfe2mZEuSzG9Drw7xnaKYsbhkCq72RpA9sP9dyijTFZUIv7hQsdxxWL40n48idwlEm kAwUfeDs/pqdMbxkKmoll820+OglvrUVy3giQwnU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, PJ Waskiewicz , Sylwester Dziedziuch , Mateusz Palczewski , Dave Switzer , Tony Nguyen , Sasha Levin Subject: [PATCH 5.10 65/83] i40e: Fix freeing of uninitialized misc IRQ vector Date: Mon, 11 Oct 2021 15:46:25 +0200 Message-Id: <20211011134510.624165923@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211011134508.362906295@linuxfoundation.org> References: <20211011134508.362906295@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Sylwester Dziedziuch [ Upstream commit 2e5a20573a926302b233b0c2e1077f5debc7ab2e ] When VSI set up failed in i40e_probe() as part of PF switch set up driver was trying to free misc IRQ vectors in i40e_clear_interrupt_scheme and produced a kernel Oops: Trying to free already-free IRQ 266 WARNING: CPU: 0 PID: 5 at kernel/irq/manage.c:1731 __free_irq+0x9a/0x300 Workqueue: events work_for_cpu_fn RIP: 0010:__free_irq+0x9a/0x300 Call Trace: ? synchronize_irq+0x3a/0xa0 free_irq+0x2e/0x60 i40e_clear_interrupt_scheme+0x53/0x190 [i40e] i40e_probe.part.108+0x134b/0x1a40 [i40e] ? kmem_cache_alloc+0x158/0x1c0 ? acpi_ut_update_ref_count.part.1+0x8e/0x345 ? acpi_ut_update_object_reference+0x15e/0x1e2 ? strstr+0x21/0x70 ? irq_get_irq_data+0xa/0x20 ? mp_check_pin_attr+0x13/0xc0 ? irq_get_irq_data+0xa/0x20 ? mp_map_pin_to_irq+0xd3/0x2f0 ? acpi_register_gsi_ioapic+0x93/0x170 ? pci_conf1_read+0xa4/0x100 ? pci_bus_read_config_word+0x49/0x70 ? do_pci_enable_device+0xcc/0x100 local_pci_probe+0x41/0x90 work_for_cpu_fn+0x16/0x20 process_one_work+0x1a7/0x360 worker_thread+0x1cf/0x390 ? create_worker+0x1a0/0x1a0 kthread+0x112/0x130 ? kthread_flush_work_fn+0x10/0x10 ret_from_fork+0x1f/0x40 The problem is that at that point misc IRQ vectors were not allocated yet and we get a call trace that driver is trying to free already free IRQ vectors. Add a check in i40e_clear_interrupt_scheme for __I40E_MISC_IRQ_REQUESTED PF state before calling i40e_free_misc_vector. This state is set only if misc IRQ vectors were properly initialized. Fixes: c17401a1dd21 ("i40e: use separate state bit for miscellaneous IRQ setup") Reported-by: PJ Waskiewicz Signed-off-by: Sylwester Dziedziuch Signed-off-by: Mateusz Palczewski Tested-by: Dave Switzer Signed-off-by: Tony Nguyen Signed-off-by: Sasha Levin --- drivers/net/ethernet/intel/i40e/i40e_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c index 0a1eea0846e6..52c2d6fdeb7a 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c @@ -4839,7 +4839,8 @@ static void i40e_clear_interrupt_scheme(struct i40e_pf *pf) { int i; - i40e_free_misc_vector(pf); + if (test_bit(__I40E_MISC_IRQ_REQUESTED, pf->state)) + i40e_free_misc_vector(pf); i40e_put_lump(pf->irq_pile, pf->iwarp_base_vector, I40E_IWARP_IRQ_PILE_ID); -- 2.33.0