Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp794931ybl; Fri, 24 Jan 2020 09:40:26 -0800 (PST) X-Google-Smtp-Source: APXvYqyG3d+Tp8NpTFM3o4teyp/wtPrtCoeI9O0w7LFrxtviI7nNXstbq0RSgRuDhjT3BrUslQSu X-Received: by 2002:a05:6830:2057:: with SMTP id f23mr3663602otp.110.1579887626143; Fri, 24 Jan 2020 09:40:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579887626; cv=none; d=google.com; s=arc-20160816; b=flSvgR5oO6AhyHIOhEJzAVGP5yy75zCt3cDWiioZdUGgeIF7mHkwxDaHHPKpKHp79D KShkA+pnTAmooSiJf60qDUtjS/lZyzj7X1Efq50xp5ljO0blWACH5sGewtQKZn39K9xP 8qtGHQ2WoO9KHj/A1XA67LlTRz18CSNPpPJmuG2zkydWbILx+/hx37Rd1Mo15P49qUGV GqxWkjmwLk4NjXVDsnyX+33dxoD937LhxJpeMtU8W6A3kgqpMlardiRUcMdsi4oLMDSF IUt0spLNf524h0956aWyEIBfxoO8YvSrcYOcZnde0RIEBTnMUZ6+60jR47lVFHcTYMb7 ySnQ== 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=DPWEyIlBiCOc4du9DfRMIEwjIpXseV2NeA0VNwwW/WY=; b=nsVkQPdh5OB4kTPqKdCghW9bpfptxLlMN6FcL4C0LJuGadeXsF49pfZh7Y6V89aa6d /UUw4W0bWp5K4r9UGxwu2eXkYSAsvNd9TN7+95c6fOETywDLx573v5x87Tu4NPwG0ssg Q/PewmIpeUvxTsHx5LLxikG3thLXR8OaqQGk/g6HDi7eh9KEhDbaD6LTCt0O+csRDOYz 9qCtyd9Kg9EJ6dYskT97HEZSspISOAy7A7m5E6h1Tns4XiPRd2w88Qf5g/J9p+fzC4K5 yHIAZKvm4TXDRBsOavqhB9+4WTHxLmYsJGR55RZNH5FpgVXg1PD+ea9CXHF6C7qgkUYR mrMg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=vDqugwuK; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j143si100330oib.16.2020.01.24.09.40.13; Fri, 24 Jan 2020 09:40:26 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=vDqugwuK; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389575AbgAXLNY (ORCPT + 99 others); Fri, 24 Jan 2020 06:13:24 -0500 Received: from mail.kernel.org ([198.145.29.99]:49644 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388638AbgAXLNV (ORCPT ); Fri, 24 Jan 2020 06:13:21 -0500 Received: from localhost (ip-213-127-102-57.ip.prioritytelecom.net [213.127.102.57]) (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 D642C20708; Fri, 24 Jan 2020 11:13:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579864400; bh=uqr3kV4f44YrbbtVXEpfN1XuCVbICB6sCwdFeb0jBHg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vDqugwuKC2SKD08GyzYh4+XP9bdKViY+2kytCLgJabxy74iFPtOgO4VNs2uv4c5c9 NUfbnA5LThMd3Nmg5zgPfQvqCF3+AnG5wtAzUCZyiTJhHBccr9QHiI2dxCZFULe6aJ mOdifYhmDubfCHgimH0IE92SKORX2LXy3H80TaT8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Florian Westphal , Pablo Neira Ayuso , Sasha Levin Subject: [PATCH 4.19 241/639] netfilter: nft_set_hash: fix lookups with fixed size hash on big endian Date: Fri, 24 Jan 2020 10:26:51 +0100 Message-Id: <20200124093117.002911952@linuxfoundation.org> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200124093047.008739095@linuxfoundation.org> References: <20200124093047.008739095@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: Pablo Neira Ayuso [ Upstream commit 3b02b0adc242a72b5e46019b6a9e4f84823592f6 ] Call jhash_1word() for the 4-bytes key case from the insertion and deactivation path, otherwise big endian arch set lookups fail. Fixes: 446a8268b7f5 ("netfilter: nft_set_hash: add lookup variant for fixed size hashtable") Reported-by: Florian Westphal Tested-by: Florian Westphal Signed-off-by: Pablo Neira Ayuso Signed-off-by: Sasha Levin --- net/netfilter/nft_set_hash.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/net/netfilter/nft_set_hash.c b/net/netfilter/nft_set_hash.c index 015124e649cbd..8dde4bfe8b8a4 100644 --- a/net/netfilter/nft_set_hash.c +++ b/net/netfilter/nft_set_hash.c @@ -488,6 +488,23 @@ static bool nft_hash_lookup_fast(const struct net *net, return false; } +static u32 nft_jhash(const struct nft_set *set, const struct nft_hash *priv, + const struct nft_set_ext *ext) +{ + const struct nft_data *key = nft_set_ext_key(ext); + u32 hash, k1; + + if (set->klen == 4) { + k1 = *(u32 *)key; + hash = jhash_1word(k1, priv->seed); + } else { + hash = jhash(key, set->klen, priv->seed); + } + hash = reciprocal_scale(hash, priv->buckets); + + return hash; +} + static int nft_hash_insert(const struct net *net, const struct nft_set *set, const struct nft_set_elem *elem, struct nft_set_ext **ext) @@ -497,8 +514,7 @@ static int nft_hash_insert(const struct net *net, const struct nft_set *set, u8 genmask = nft_genmask_next(net); u32 hash; - hash = jhash(nft_set_ext_key(&this->ext), set->klen, priv->seed); - hash = reciprocal_scale(hash, priv->buckets); + hash = nft_jhash(set, priv, &this->ext); hlist_for_each_entry(he, &priv->table[hash], node) { if (!memcmp(nft_set_ext_key(&this->ext), nft_set_ext_key(&he->ext), set->klen) && @@ -537,8 +553,7 @@ static void *nft_hash_deactivate(const struct net *net, u8 genmask = nft_genmask_next(net); u32 hash; - hash = jhash(nft_set_ext_key(&this->ext), set->klen, priv->seed); - hash = reciprocal_scale(hash, priv->buckets); + hash = nft_jhash(set, priv, &this->ext); hlist_for_each_entry(he, &priv->table[hash], node) { if (!memcmp(nft_set_ext_key(&this->ext), &elem->key.val, set->klen) && -- 2.20.1