Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp4468455ybz; Tue, 28 Apr 2020 11:48:42 -0700 (PDT) X-Google-Smtp-Source: APiQypIyxeFIZWzp7fBO6vmwvXAm9qKq1bD3Mt+aS5varE3W6qw16Csw7ri0CgVh/AKTCdO5do6G X-Received: by 2002:a05:6402:333:: with SMTP id q19mr24806256edw.186.1588099722525; Tue, 28 Apr 2020 11:48:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588099722; cv=none; d=google.com; s=arc-20160816; b=SjPBMuieST7NnySIZ5wpqmzaihOSvPPA8m2a9rJ4YISOtH1m8/FiWN0/UN+7cAqdgV 9HkWOX/rbupUejKXYgjnH5lD+pfDLdXYDYUuvcjRT3PGO1NSzd9paInaU9NpUOFuveLx 2W2mdooYC3SQKvZNIT7JgBoN/mFhzNKNvjx0bqa+P+ss189jAAx2LiyRuntMavVRk9e0 dICT9k+j19x7bTA8tm0vX9mNMcI/DAyJbiOLs/YLNdyHxjMcShnzlqhUVVmsgK+SxkEj gP9LmYBIfkISYWhXEWq9gbd3YEZON2SXfcA5JnRb+jw/yxyPZKCve/tDHPUKV+8v1gEH 8Zuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=q9y5lvxguREhgDUTl7omZNvYdTsztvQpqmtopcBmCXU=; b=DtAnnlXl6U9jd00zgIlvKBOZlPLnpYCVF645yTrfXaGrEDnHIwmowhS6/9znyLQQm/ 0yI0UJxuHBqD7gVR8HvwbR75ooY9P8DvcJmb4t+ExZA3dDqjk/YmUO9oxWhQ4UxzPK1M EJxGsaXzjY+RWNI5MxHAdT6Z6eu8JK2yG5TSqWIqKi9STJG7GVorTir8w4Wr8ahHQilG LsIUeoqqyxghuxTNBh2k9euDTtoglncSlPRU24rGXfd7s28iJ3SDvRhIDU8a2kNCED6o CD9fsgwxdrGiNLbpJgoF4WLYSmj/RKpNjWG4Cu+XC+lGXjtpbYizK2UkFkLoZPmnNqYG +lnA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=aN8qEc8e; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q17si2004589edr.550.2020.04.28.11.48.19; Tue, 28 Apr 2020 11:48:42 -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=@kernel.org header.s=default header.b=aN8qEc8e; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731239AbgD1Sqa (ORCPT + 99 others); Tue, 28 Apr 2020 14:46:30 -0400 Received: from mail.kernel.org ([198.145.29.99]:35470 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731194AbgD1SnL (ORCPT ); Tue, 28 Apr 2020 14:43:11 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 810D720730; Tue, 28 Apr 2020 18:43:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588099391; bh=fO5FI66FHgg+VlGZoyzKaqaj94B5cozUzaWJZwEdd3M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aN8qEc8eN3D2bIlzI+TfBauBsPzDg28LvVffApfda6OpXCuRwaUJsEJymyG3GJ4mQ rclRT//hXmU9CDo1tSHc33SLjJdOfq3ytEibPtRsN2lQGRHQrH1dro6MmwiN+4jY2J jo7ypb1BoagKuvf/Q3kdWYskVAEorUUN8XTBk++0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Johannes Berg , Luca Coelho , Kalle Valo Subject: [PATCH 5.4 130/168] iwlwifi: mvm: limit maximum queue appropriately Date: Tue, 28 Apr 2020 20:25:04 +0200 Message-Id: <20200428182248.533282460@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200428182231.704304409@linuxfoundation.org> References: <20200428182231.704304409@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Johannes Berg commit e5b72e3bc4763152e24bf4b8333bae21cc526c56 upstream. Due to some hardware issues, queue 31 isn't usable on devices that have 32 queues (7000, 8000, 9000 families), which is correctly reflected in the configuration and TX queue initialization. However, the firmware API and queue allocation code assumes that there are 32 queues, and if something actually attempts to use #31 this leads to a NULL-pointer dereference since it's not allocated. Fix this by limiting to 31 in the IWL_MVM_DQA_MAX_DATA_QUEUE, and also add some code to catch this earlier in the future, if the configuration changes perhaps. Cc: stable@vger.kernel.org # v4.9+ Signed-off-by: Johannes Berg Signed-off-by: Luca Coelho Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/iwlwifi.20200417100405.98a79be2db6a.I3a4af6b03b87a6bc18db9b1ff9a812f397bee1fc@changeid Signed-off-by: Greg Kroah-Hartman --- drivers/net/wireless/intel/iwlwifi/fw/api/txq.h | 6 +++--- drivers/net/wireless/intel/iwlwifi/mvm/sta.c | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) --- a/drivers/net/wireless/intel/iwlwifi/fw/api/txq.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/txq.h @@ -8,7 +8,7 @@ * Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH * Copyright(c) 2016 - 2017 Intel Deutschland GmbH - * Copyright(c) 2019 Intel Corporation + * Copyright(c) 2019 - 2020 Intel Corporation * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as @@ -31,7 +31,7 @@ * Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH * Copyright(c) 2016 - 2017 Intel Deutschland GmbH - * Copyright(c) 2019 Intel Corporation + * Copyright(c) 2019 - 2020 Intel Corporation * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -99,7 +99,7 @@ enum iwl_mvm_dqa_txq { IWL_MVM_DQA_MAX_MGMT_QUEUE = 8, IWL_MVM_DQA_AP_PROBE_RESP_QUEUE = 9, IWL_MVM_DQA_MIN_DATA_QUEUE = 10, - IWL_MVM_DQA_MAX_DATA_QUEUE = 31, + IWL_MVM_DQA_MAX_DATA_QUEUE = 30, }; enum iwl_mvm_tx_fifo { --- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c @@ -722,6 +722,11 @@ static int iwl_mvm_find_free_queue(struc lockdep_assert_held(&mvm->mutex); + if (WARN(maxq >= mvm->trans->trans_cfg->base_params->num_of_queues, + "max queue %d >= num_of_queues (%d)", maxq, + mvm->trans->trans_cfg->base_params->num_of_queues)) + maxq = mvm->trans->trans_cfg->base_params->num_of_queues - 1; + /* This should not be hit with new TX path */ if (WARN_ON(iwl_mvm_has_new_tx_api(mvm))) return -ENOSPC;