From patchwork Wed Sep 28 13:12:48 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aaron Conole X-Patchwork-Id: 676231 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 3skdRv3tw0z9sD6 for ; Wed, 28 Sep 2016 23:13:15 +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=1qkVKHEv; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932626AbcI1NNI (ORCPT ); Wed, 28 Sep 2016 09:13:08 -0400 Received: from mail-yb0-f195.google.com ([209.85.213.195]:33656 "EHLO mail-yb0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932511AbcI1NNA (ORCPT ); Wed, 28 Sep 2016 09:13:00 -0400 Received: by mail-yb0-f195.google.com with SMTP id e2so1093933ybi.0 for ; Wed, 28 Sep 2016 06:13:00 -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=fyQVWJpzbMpWcnRo99JzxLzMU/IKWrDsiPE8vl/08sQ=; b=1qkVKHEvt+UWZDcssWLL6dNnNIDdem4NE0viK+VL4B5HoKd1jRznNMvO0dpK7TxnVM 9uSO/tRAjh2FKQ3bY48ZVk3lsODtEwrk5tThHrx9FY2qvaR3yOKp//lieTx0/tyLAsyA P/utXCrImcZexclcoMnRM3mgOk4YTqVvjDGM+rVWlbULP7dG3DqVK2YZW8VjkmfD+D6h rARpiXo2pC4cd+YKPmPZRGiLG8bic86ks6NVUv1avP+/t7qAbyo8P+uY1FFXCnSXYZLd QJCLpNJ5zYioN1nc+hEokhqLuApEAVKyV5C6PQOXf6my/YrEJSVmLj3ms1mApndM90mg GF+g== 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=fyQVWJpzbMpWcnRo99JzxLzMU/IKWrDsiPE8vl/08sQ=; b=kdKSyUxaiMxYW5H54p34fZQqVOWdPpz+AsQ26HMmK4aEG4owq87rdDVLT8pXJiqHwn FJOgHTl8LiyaT5IzLQ6dDynNvGMhrInRlkKuQkIsDHHjQG/J3Vu8WkYkqOMoSk49PHvN QYQf+juJDfCyMkGtS2xw2kJegqMdHZdCfCEjn5SDi5fFdC9qwJEaQbsmWdN+48qmcXHK /qB1Usn4KNdp/8YN0sc/GgpBaume1kUdQu6m/46uF2v8lwHG8mIEbo63y5XuQrRsrmoQ Pi754fm7qRPl/5WcH5l0oa5K2GwaCS11y4dX/Mc+fkKdh0wFLX5YanmyZpPDtQ3zpb+P ahzA== X-Gm-Message-State: AE9vXwOd4BrzS+M1D1lIChHEQ9HFHgbCPeW3a9LW7y1iJHdZ76YWPTogcYoo9jLIpKlWCA== X-Received: by 10.37.174.133 with SMTP id b5mr25149209ybj.20.1475068379235; Wed, 28 Sep 2016 06:12:59 -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 u75sm3059079ywu.47.2016.09.28.06.12.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Sep 2016 06:12:58 -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 v3 2/2] nf_set_hooks_head: accommodate different kconfig Date: Wed, 28 Sep 2016 09:12:48 -0400 Message-Id: <1475068368-3109-3-git-send-email-aconole@bytheb.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1475068368-3109-1-git-send-email-aconole@bytheb.org> References: <1475068368-3109-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. 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)