Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp9463737pxu; Mon, 28 Dec 2020 17:28:37 -0800 (PST) X-Google-Smtp-Source: ABdhPJwV6bSOz1l41sAMoezf3EoAIYp7K71wYigcJcMU78TeTIA32eX4ViKe+jrbki5/uw0DRhGG X-Received: by 2002:a17:907:970a:: with SMTP id jg10mr14217456ejc.529.1609205317442; Mon, 28 Dec 2020 17:28:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1609205317; cv=none; d=google.com; s=arc-20160816; b=jkxxB58uR6wV/vqSKKev+EQjYCjYa6DBbyjmsJOmmrtzCxMi0l+4InIjcrEixw/RgX F70K0IUN+JPF943G2PCDgASJ5VCtwlbnfzKpmZXV7BGegboyVBBFkMJdG4cpJTtLAUjC aXg8aWvCLPFn8ebGIMmsowyZW6GF3yhqFWaksCJcDQa424oXqLvnXF3mOF8yi1cEw24S ytYP/OB4VEjr262qgByMpAoy6BZ/jDlKuhrdUn1weak1Inq3iFaC67xodg5YJACoyemy 4ajzyYf32oMFbPUe9yCRAqu/WbEvW6HRAUCENzIKdhi8UawLccpPDdfhlIzP1IwRvfy0 nmmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:from:subject:cc:to:message-id:date; bh=Hkwhh1jCpdOvAHXsHC1CoexZ4Bw2fWsPQHl2SJoYyK4=; b=CA2wB+Md7UBVBQwnvylE2V0qpWClUDCHth3FP0GzG7TD2tvBfg9D9XEIzUmntop7EQ P5foVKMZG8UXPhU/oVf5AnsEf4kiG0TMGBgToteaWVH48UHMaCiN5CH+UpX1B7WX5x3S N2ihNdKvoHyxcoU5CRp1aZK7gCFalaBiHiwfRBqAXn2R6A9H1rQy4m8zO+qCDuMw4QaN WzM3k1gmW/c5lIaXiaZXziHCIcFWmyeVNiqx/gAhBtfkRJuhdws2fSOfGvyPN9JewIbr 0y6Uf3HqRBDnwOhY6w1KggdDQRWrudBL6j+iDrKp9gFoFF72RXe43rR8qwm/NAkOZTmw /31g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id bs24si21288042edb.519.2020.12.28.17.28.15; Mon, 28 Dec 2020 17:28:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732291AbgL1W4d (ORCPT + 99 others); Mon, 28 Dec 2020 17:56:33 -0500 Received: from shards.monkeyblade.net ([23.128.96.9]:44328 "EHLO mail.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729696AbgL1WwJ (ORCPT ); Mon, 28 Dec 2020 17:52:09 -0500 Received: from localhost (unknown [IPv6:2601:601:9f00:477::3d5]) by mail.monkeyblade.net (Postfix) with ESMTPSA id AC5C04CE686D1; Mon, 28 Dec 2020 14:51:28 -0800 (PST) Date: Mon, 28 Dec 2020 14:51:28 -0800 (PST) Message-Id: <20201228.145128.1498314185351532341.davem@davemloft.net> To: weichen.chen@linux.alibaba.com Cc: eric.dumazet@gmail.com, kuba@kernel.org, splendidsky.cwc@alibaba-inc.com, yanxu.zw@alibaba-inc.com, dsahern@kernel.org, liuhangbin@gmail.com, roopa@cumulusnetworks.com, jdike@akamai.com, nikolay@cumulusnetworks.com, lirongqing@baidu.com, mrv@mojatatu.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v4] net: neighbor: fix a crash caused by mod zero From: David Miller In-Reply-To: <20201225054448.73256-1-weichen.chen@linux.alibaba.com> References: <20201225054448.73256-1-weichen.chen@linux.alibaba.com> X-Mailer: Mew version 6.8 on Emacs 27.1 Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.6.2 (mail.monkeyblade.net [0.0.0.0]); Mon, 28 Dec 2020 14:51:29 -0800 (PST) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: weichenchen Date: Fri, 25 Dec 2020 13:44:45 +0800 > pneigh_enqueue() tries to obtain a random delay by mod > NEIGH_VAR(p, PROXY_DELAY). However, NEIGH_VAR(p, PROXY_DELAY) > migth be zero at that point because someone could write zero > to /proc/sys/net/ipv4/neigh/[device]/proxy_delay after the > callers check it. > > This patch uses prandom_u32_max() to get a random delay instead > which avoids potential division by zero. > > Signed-off-by: weichenchen > --- > V4: > - Use prandom_u32_max() to get a random delay in > pneigh_enqueue(). > V3: > - Callers need to pass the delay time to pneigh_enqueue() > now and they should guarantee it is not zero. > - Use READ_ONCE() to read NEIGH_VAR(p, PROXY_DELAY) in both > of the existing callers of pneigh_enqueue() and then pass > it to pneigh_enqueue(). > V2: > - Use READ_ONCE() to prevent the complier from re-reading > NEIGH_VAR(p, PROXY_DELAY). > - Give a hint to the complier that delay <= 0 is unlikely > to happen. > > V4 is quite concise and works well. > Thanks for Eric's and Jakub's advice. Applied and queued up for -stable, thanks.