From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C68A8C433DF for ; Thu, 14 May 2020 18:58:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A28632074A for ; Thu, 14 May 2020 18:58:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1589482700; bh=QFTkzBayBCSLe6D142nis/Kp93e8vPojON2nwQBsMzU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=KhIC70fsS2d/QfQKcE9I1RV//mXhDNN5pObadoKbuRrauRtQX4Uzf6BWe0ovwFHVD K1kyS0h4LXkgfIyGCo1EQahD+EJqttADiTSW/T91cIWhAn2rGWKDwOKEK/tgnjJDi4 3gNjDEUgeRpusR7jx10fat9IDkQ4PLnhobwz7vlo= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729878AbgENS6Q (ORCPT ); Thu, 14 May 2020 14:58:16 -0400 Received: from mail.kernel.org ([198.145.29.99]:57462 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729710AbgENS4a (ORCPT ); Thu, 14 May 2020 14:56:30 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A8A33207DA; Thu, 14 May 2020 18:56:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1589482589; bh=QFTkzBayBCSLe6D142nis/Kp93e8vPojON2nwQBsMzU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Brl4fJMNO+dCEgL84Tz7L98jYM06if+HtU/xzMkCZfJ4IK8MVoU7mYN9J2j8IFBgm xUjv/QfKxqlr33o7fu1ZvJsr6Mr5LdKCYX48uhytqp7ne+hwCY+GW+1TnypxnxssiF eVPRjGA4A9Tihz74bkAScILyQrkHzXcHFRUIemWU= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: George Spelvin , Sven Eckelmann , Simon Wunderlich , Sasha Levin , b.a.t.m.a.n@lists.open-mesh.org, netdev@vger.kernel.org Subject: [PATCH AUTOSEL 4.4 03/14] batman-adv: fix batadv_nc_random_weight_tq Date: Thu, 14 May 2020 14:56:14 -0400 Message-Id: <20200514185625.21753-3-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200514185625.21753-1-sashal@kernel.org> References: <20200514185625.21753-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: George Spelvin [ Upstream commit fd0c42c4dea54335967c5a86f15fc064235a2797 ] and change to pseudorandom numbers, as this is a traffic dithering operation that doesn't need crypto-grade. The previous code operated in 4 steps: 1. Generate a random byte 0 <= rand_tq <= 255 2. Multiply it by BATADV_TQ_MAX_VALUE - tq 3. Divide by 255 (= BATADV_TQ_MAX_VALUE) 4. Return BATADV_TQ_MAX_VALUE - rand_tq This would apperar to scale (BATADV_TQ_MAX_VALUE - tq) by a random value between 0/255 and 255/255. But! The intermediate value between steps 3 and 4 is stored in a u8 variable. So it's truncated, and most of the time, is less than 255, after which the division produces 0. Specifically, if tq is odd, the product is always even, and can never be 255. If tq is even, there's exactly one random byte value that will produce a product byte of 255. Thus, the return value is 255 (511/512 of the time) or 254 (1/512 of the time). If we assume that the truncation is a bug, and the code is meant to scale the input, a simpler way of looking at it is that it's returning a random value between tq and BATADV_TQ_MAX_VALUE, inclusive. Well, we have an optimized function for doing just that. Fixes: 3c12de9a5c75 ("batman-adv: network coding - code and transmit packets if possible") Signed-off-by: George Spelvin Signed-off-by: Sven Eckelmann Signed-off-by: Simon Wunderlich Signed-off-by: Sasha Levin --- net/batman-adv/network-coding.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/net/batman-adv/network-coding.c b/net/batman-adv/network-coding.c index 86c69208da2b7..91de807a8f03a 100644 --- a/net/batman-adv/network-coding.c +++ b/net/batman-adv/network-coding.c @@ -991,15 +991,8 @@ static struct batadv_nc_path *batadv_nc_get_path(struct batadv_priv *bat_priv, */ static u8 batadv_nc_random_weight_tq(u8 tq) { - u8 rand_val, rand_tq; - - get_random_bytes(&rand_val, sizeof(rand_val)); - /* randomize the estimated packet loss (max TQ - estimated TQ) */ - rand_tq = rand_val * (BATADV_TQ_MAX_VALUE - tq); - - /* normalize the randomized packet loss */ - rand_tq /= BATADV_TQ_MAX_VALUE; + u8 rand_tq = prandom_u32_max(BATADV_TQ_MAX_VALUE + 1 - tq); /* convert to (randomized) estimated tq again */ return BATADV_TQ_MAX_VALUE - rand_tq; -- 2.20.1