From patchwork Wed Sep 20 04:12:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Mendoza-Jonas X-Patchwork-Id: 816001 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=mendozajonas.com header.i=@mendozajonas.com header.b="YUXkeVn7"; dkim=pass (2048-bit key; unprotected) header.d=messagingengine.com header.i=@messagingengine.com header.b="YP9oEASy"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xxmYw6TnHz9s3T for ; Wed, 20 Sep 2017 14:13:08 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751468AbdITEM7 (ORCPT ); Wed, 20 Sep 2017 00:12:59 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:47239 "EHLO out1-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751033AbdITEM5 (ORCPT ); Wed, 20 Sep 2017 00:12:57 -0400 Received: from compute2.internal (compute2.nyi.internal [10.202.2.42]) by mailout.nyi.internal (Postfix) with ESMTP id DDCC920C95; Wed, 20 Sep 2017 00:12:56 -0400 (EDT) Received: from frontend2 ([10.202.2.161]) by compute2.internal (MEProxy); Wed, 20 Sep 2017 00:12:56 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= mendozajonas.com; h=cc:date:from:message-id:subject:to :x-me-sender:x-me-sender:x-sasl-enc:x-sasl-enc; s=fm1; bh=MDDEMO QZokbSf6ONPsVsaB1DaYuxMrgFnsiUcIu7OI4=; b=YUXkeVn7uJ97tk06LqV217 GWQi1SftPXPwVGqAX+jmzwTAbK6ZKECclgBgkPvISbr1N0fJ3X+Ds1e8jCZNkKhw F4nvsvXXl2ei0LxQxYzySfPHp9Ifklagdpjc2HtRThYn2PWdioo+KGIHe1t4AHs0 cYkY8n2lZOEaUgp8GEfheVXJGSYSqPXNGxv/Gv+DiebeOBIFoxgKFVRC8lRaiX/w Wu2SdK9iCGT4ODH8RlL/mvvduA6fngr8T5P/lRL6YP21EcMax3BNlmEmTVuMgNfk 25U6FlHdxrT0Tp/NUWSiK4WNOEx1v7CPoSQyRlhfrrmKHL6sm823VVFjxS7kQYlA == DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:message-id:subject:to :x-me-sender:x-me-sender:x-sasl-enc:x-sasl-enc; s=fm1; bh=MDDEMO QZokbSf6ONPsVsaB1DaYuxMrgFnsiUcIu7OI4=; b=YP9oEASyvMm26P03q7f8PW 5tnzcLywHKQSkM3oXjg7PslLvbrEMxLzX8EhMZVssn3OkipXkW62gddlTg0KUFR8 PCn6G0UJUD1ry46WiSWOGaOIYcii4SyQCJ1SH4jr7A3hj7gTres18MkH9y77oHV6 FKkcXkqJ4z5thEADHuzdNgu9v4CV6Tu6a1XpPWMGD0Z6j5nQckw5QuqWFE0L/GUm 3xN9JpgsnUNRUh+jOOjoyu4IQVBLX+wAo1eWUlWh8EuQoSWZoITorjxR40qxX9lh l5yxsbnQyD1knpocGW5527SPpPtOb/IoxdP6wLH/rMIf4a8W810w6T0s/hidBS8Q == X-ME-Sender: X-Sasl-enc: Hdhb5OK9ZoFUsuSYYvqLrGb0F/OtJigqxHSLpGqRB4Fi 1505880776 Received: from v4.ozlabs.ibm.com (unknown [122.99.82.10]) by mail.messagingengine.com (Postfix) with ESMTPA id 44204244B3; Wed, 20 Sep 2017 00:12:55 -0400 (EDT) From: Samuel Mendoza-Jonas To: netdev@vger.kernel.org Cc: Samuel Mendoza-Jonas , "David S . Miller" , linux-kernel@vger.kernel.org Subject: [PATCH net] net/ncsi: Don't assume last available channel exists Date: Wed, 20 Sep 2017 14:12:51 +1000 Message-Id: <20170920041251.14635-1-sam@mendozajonas.com> X-Mailer: git-send-email 2.14.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When handling new VLAN tags in NCSI we check the maximum allowed number of filters on the last active ("hot") channel. However if the 'add' callback is called before NCSI has configured a channel, this causes a NULL dereference. Check that we actually have a hot channel, and warn if it is missing. Signed-off-by: Samuel Mendoza-Jonas --- net/ncsi/ncsi-manage.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/net/ncsi/ncsi-manage.c b/net/ncsi/ncsi-manage.c index 3fd3c39e6278..fc800f934beb 100644 --- a/net/ncsi/ncsi-manage.c +++ b/net/ncsi/ncsi-manage.c @@ -1420,7 +1420,10 @@ int ncsi_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid) } ndp = TO_NCSI_DEV_PRIV(nd); - ncf = ndp->hot_channel->filters[NCSI_FILTER_VLAN]; + if (!ndp) { + netdev_warn(dev, "ncsi: No ncsi_dev_priv?\n"); + return 0; + } /* Add the VLAN id to our internal list */ list_for_each_entry_rcu(vlan, &ndp->vlan_vids, list) { @@ -1432,11 +1435,17 @@ int ncsi_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid) } } - if (n_vids >= ncf->total) { - netdev_info(dev, - "NCSI Channel supports up to %u VLAN tags but %u are already set\n", - ncf->total, n_vids); - return -EINVAL; + if (!ndp->hot_channel) { + netdev_warn(dev, + "ncsi: no available filter to check maximum\n"); + } else { + ncf = ndp->hot_channel->filters[NCSI_FILTER_VLAN]; + if (n_vids >= ncf->total) { + netdev_info(dev, + "NCSI Channel supports up to %u VLAN tags but %u are already set\n", + ncf->total, n_vids); + return -EINVAL; + } } vlan = kzalloc(sizeof(*vlan), GFP_KERNEL);