From patchwork Fri Apr 27 11:14:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Westphal X-Patchwork-Id: 905658 X-Patchwork-Delegate: pablo@netfilter.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.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=netfilter-devel-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=strlen.de Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40XWYc0fy5z9ryr for ; Fri, 27 Apr 2018 21:15:00 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757485AbeD0LO5 (ORCPT ); Fri, 27 Apr 2018 07:14:57 -0400 Received: from Chamillionaire.breakpoint.cc ([146.0.238.67]:36302 "EHLO Chamillionaire.breakpoint.cc" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751464AbeD0LO4 (ORCPT ); Fri, 27 Apr 2018 07:14:56 -0400 Received: from fw by Chamillionaire.breakpoint.cc with local (Exim 4.89) (envelope-from ) id 1fC1L4-00062Y-BG; Fri, 27 Apr 2018 13:14:54 +0200 From: Florian Westphal To: Cc: Florian Westphal Subject: [PATCH iptables] xtables-compat: only fetch revisions for ip/ip6 Date: Fri, 27 Apr 2018 13:14:44 +0200 Message-Id: <20180427111444.32570-1-fw@strlen.de> X-Mailer: git-send-email 2.14.3 Sender: netfilter-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netfilter-devel@vger.kernel.org Only ip and ip6tables have revision rerieval support; pretend ebtables and arptables are always ok. Signed-off-by: Florian Westphal --- iptables/nft.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/iptables/nft.c b/iptables/nft.c index c1cf16cd..c18798c9 100644 --- a/iptables/nft.c +++ b/iptables/nft.c @@ -2464,14 +2464,27 @@ int nft_compatible_revision(const char *name, uint8_t rev, int opt) struct mnl_socket *nl; char buf[MNL_SOCKET_BUFFER_SIZE]; struct nlmsghdr *nlh; - uint32_t portid, seq, type; + uint32_t portid, seq, type = 0; + uint32_t pf = AF_INET; int ret = 0; - if (opt == IPT_SO_GET_REVISION_MATCH || - opt == IP6T_SO_GET_REVISION_MATCH) - type = 0; - else + switch (opt) { + case IPT_SO_GET_REVISION_MATCH: + break; + case IP6T_SO_GET_REVISION_MATCH: + pf = AF_INET6; + break; + case IPT_SO_GET_REVISION_TARGET: + type = 1; + break; + case IP6T_SO_GET_REVISION_TARGET: type = 1; + pf = AF_INET6; + break; + default: + /* No revision support (arp, ebtables), assume latest version ok */ + return 1; + } nlh = mnl_nlmsg_put_header(buf); nlh->nlmsg_type = (NFNL_SUBSYS_NFT_COMPAT << 8) | NFNL_MSG_COMPAT_GET; @@ -2479,7 +2492,7 @@ int nft_compatible_revision(const char *name, uint8_t rev, int opt) nlh->nlmsg_seq = seq = time(NULL); struct nfgenmsg *nfg = mnl_nlmsg_put_extra_header(nlh, sizeof(*nfg)); - nfg->nfgen_family = AF_INET; + nfg->nfgen_family = pf; nfg->version = NFNETLINK_V0; nfg->res_id = 0;