From patchwork Wed Sep 28 15:35:15 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aaron Conole X-Patchwork-Id: 676290 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3skhcf176jz9t0X for ; Thu, 29 Sep 2016 01:36:02 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=bytheb-org.20150623.gappssmtp.com header.i=@bytheb-org.20150623.gappssmtp.com header.b=Ymhrd9Rq; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933077AbcI1Pfp (ORCPT ); Wed, 28 Sep 2016 11:35:45 -0400 Received: from mail-yb0-f195.google.com ([209.85.213.195]:34956 "EHLO mail-yb0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933001AbcI1Pfk (ORCPT ); Wed, 28 Sep 2016 11:35:40 -0400 Received: by mail-yb0-f195.google.com with SMTP id p81so327523ybb.2 for ; Wed, 28 Sep 2016 08:35:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytheb-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ZROJLpZuC7aF2AGtgk2hcFmrBdYLIUIe0uy6UAQ2PlM=; b=Ymhrd9RqfskRfChDhrzzKbyq+EVrkqU0+PzAjPft4DCzV30g4m6Gwrese6SOLcACI+ 7DrG9Ds/h0kupjI1Ca8pX8rEcKsQv5dlhAbb8dA73ukcml4PejhAUviy9sWdNr8WASlL TZ1g8SxAuvzHp61cQIvREGWGZQ1umhEHwcw9hgT7YDZY6Tzee/g97MIsOfjB9g7htG66 UqrOgrvP0yF40ZR0ys0ZY4Gk5MTJsbXQB6ggcoNz4V800pmOXGEMPTIjj5teJz3pfsMl 65yBPIpfH031zXZSSORL3Rkju0Kb9w6U2ZqKLXtj2D0+9FRxxGZYWR67lEIeAMuTleka UNUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ZROJLpZuC7aF2AGtgk2hcFmrBdYLIUIe0uy6UAQ2PlM=; b=NNgw0VKpPy9vzUrOAI3O8/nQ1W4IMFHesKWc/hOkPZ7iz0veJfQE84fWr6lf6NqniU QqfqpICQycz1rAL47C24L9PKU7aRp8lXi7ZP+2EGOF4Encn1PsAr30THJ5R628uJCDIa PKJ6AbYIAupB3lblZOH4DMBsAUqpC06Er6ilUwtF5Ij0xQ6gbqOKu8a7NVurUwh960Xj cH4RLCkTCQ6xNTfqkiSLd2RCQ15WwAp59IRdY2IFy6UAzrdzqvqnzFeq3+mL1h5SGJOl o5eIDW3f8GgxQ8V0CZZFhVFqzsQbsTcBhiGpSeQXianYW4R1IBOHoXRmNwXvQtEkCUMQ ox9Q== X-Gm-Message-State: AA6/9Rm76eKMj3aeU2h5yvrQLqpvx2gMQMhEFiBv3LHvcDZUVHyGyNJp633ToDBr0ihXDw== X-Received: by 10.37.172.136 with SMTP id x8mr12206709ybi.119.1475076926608; Wed, 28 Sep 2016 08:35:26 -0700 (PDT) Received: from dhcp-25-97.bos.redhat.com (c-24-63-163-118.hsd1.ma.comcast.net. [24.63.163.118]) by smtp.gmail.com with ESMTPSA id b9sm3295255ywh.45.2016.09.28.08.35.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Sep 2016 08:35:25 -0700 (PDT) From: Aaron Conole To: netfilter-devel@vger.kernel.org, netdev@vger.kernel.org Cc: Florian Westphal , Pablo Neira Ayuso Subject: [PATCH nf-next v4 2/2] nf_set_hooks_head: accommodate different kconfig Date: Wed, 28 Sep 2016 11:35:15 -0400 Message-Id: <1475076915-5920-3-git-send-email-aconole@bytheb.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1475076915-5920-1-git-send-email-aconole@bytheb.org> References: <1475076915-5920-1-git-send-email-aconole@bytheb.org> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When CONFIG_NETFILTER_INGRESS is unset (or no), we need to handle the request for registration properly by dropping the hook. This releases the entry during the set. Fixes: e3b37f11e6e4 ("netfilter: replace list_head with single linked list") Signed-off-by: Aaron Conole --- net/netfilter/core.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/net/netfilter/core.c b/net/netfilter/core.c index e58e420..61e8a9d 100644 --- a/net/netfilter/core.c +++ b/net/netfilter/core.c @@ -90,10 +90,12 @@ static void nf_set_hooks_head(struct net *net, const struct nf_hook_ops *reg, { switch (reg->pf) { case NFPROTO_NETDEV: +#ifdef CONFIG_NETFILTER_INGRESS /* We already checked in nf_register_net_hook() that this is * used from ingress. */ rcu_assign_pointer(reg->dev->nf_hooks_ingress, entry); +#endif break; default: rcu_assign_pointer(net->nf.hooks[reg->pf][reg->hooknum], @@ -107,10 +109,15 @@ int nf_register_net_hook(struct net *net, const struct nf_hook_ops *reg) struct nf_hook_entry *hooks_entry; struct nf_hook_entry *entry; - if (reg->pf == NFPROTO_NETDEV && - (reg->hooknum != NF_NETDEV_INGRESS || - !reg->dev || dev_net(reg->dev) != net)) - return -EINVAL; + if (reg->pf == NFPROTO_NETDEV) { +#ifndef CONFIG_NETFILTER_INGRESS + if (reg->hooknum == NF_NETDEV_INGRESS) + return -EOPNOTSUPP; +#endif + if (reg->hooknum != NF_NETDEV_INGRESS || + !reg->dev || dev_net(reg->dev) != net) + return -EINVAL; + } entry = kmalloc(sizeof(*entry), GFP_KERNEL); if (!entry)