From nobody Sun Feb 8 16:05:54 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C224FC77B75 for ; Fri, 19 May 2023 20:25:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230423AbjESUZB (ORCPT ); Fri, 19 May 2023 16:25:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57856 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229458AbjESUZA (ORCPT ); Fri, 19 May 2023 16:25:00 -0400 Received: from mail-wr1-x432.google.com (mail-wr1-x432.google.com [IPv6:2a00:1450:4864:20::432]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0CED6102 for ; Fri, 19 May 2023 13:24:59 -0700 (PDT) Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-309553c5417so1084929f8f.2 for ; Fri, 19 May 2023 13:24:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1684527897; x=1687119897; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :from:to:cc:subject:date:message-id:reply-to; bh=Ip/4xPkpTBx2G+b4cQROiLf32EA1DGXtHtMtqI6ZZUw=; b=I7tW7DWG9caQ2bkDJa4MGSBCByIHkfGdAK5ObUMKKabXj/fS35qCfH6ORRJnVBmzva YkNd4AvHU89gJrNrFidCzOoazyKAkpQjApuxVFrLSKxAaKGzKWOoUCHj+HEG85yQ754r yvxFr/0ybbn5RfAmckC821wziERgFwBPUqJGb6giZqxeZXS36JFJryLLeubzXZPmCKUL 96+3dwStSghu1qBqgfz+cOvy53K38evxsNd16gSd1gOy+F290PvDoaBIX0F7QNGM0ktH x6I+q44pCF617/azZlvrOoCvbJAinHGkta0aao73EH4l33eytahjnR3ZnZne9UpZC7/Y mmiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684527897; x=1687119897; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Ip/4xPkpTBx2G+b4cQROiLf32EA1DGXtHtMtqI6ZZUw=; b=X2gBYrTNog1OtVJ4Rpt527A91+NNTBO9auDEghrqmNJpn3p+6TpZwstLZ2HCE5fqob us1j5SgY7rlItegd8pmWGPYfElSbJVYtF+Am7Z5YHzV8H6A60kKMRZDm7lazqYY0mK7u Zv9zKHEtXBTQ8KpYVAbxIoJVMooOX0pFaiTrQncR/YZFL/q+cYpBu1TYPgzvQU979SpT wqH1JWWXGKQOYO4KQx+hvD/PAeuBwVYHG1I3lnGJJnvY9AAZPKFXYOSV6uJnqK+dZYze 8jHDbiIxWieQC4oCI0d0DaokpVtJQbp6VCRixxmDK0/oZRLVcHB5BKqh3qzqipWoCSUR RJxg== X-Gm-Message-State: AC+VfDzskNvDcsxbqAmn/HS0j6dYkyHv+1Dx0HKXjHUROzrJHU9LWNJH gMzsbZ4PKKZ+ydoY31iq2EWfyRCezA== X-Google-Smtp-Source: ACHHUZ6My60WkN1pF7k26ll5wlz3+CWf/QzKDXkbtj8L1DbwAOXH9pK2ZFY6fG0An+qKOfqFNa1sWw== X-Received: by 2002:a5d:4d51:0:b0:2f3:e981:f183 with SMTP id a17-20020a5d4d51000000b002f3e981f183mr2600518wru.10.1684527897243; Fri, 19 May 2023 13:24:57 -0700 (PDT) Received: from p183 ([46.53.249.116]) by smtp.gmail.com with ESMTPSA id l2-20020adfe582000000b0030632833e74sm6314248wrm.11.2023.05.19.13.24.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 May 2023 13:24:56 -0700 (PDT) Date: Fri, 19 May 2023 23:24:54 +0300 From: Alexey Dobriyan To: akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org Subject: [PATCH] fix mult_frac() multiple argument evaluation bug Message-ID: MIME-Version: 1.0 Content-Disposition: inline Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" mult_frac() evaluates _all_ arguments multiple times in the body. Clarify comment while I'm at it. Signed-off-by: Alexey Dobriyan --- include/linux/math.h | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) --- a/include/linux/math.h +++ b/include/linux/math.h @@ -118,17 +118,17 @@ __STRUCT_FRACT(s32) __STRUCT_FRACT(u32) #undef __STRUCT_FRACT =20 -/* - * Multiplies an integer by a fraction, while avoiding unnecessary - * overflow or loss of precision. - */ -#define mult_frac(x, numer, denom)( \ -{ \ - typeof(x) quot =3D (x) / (denom); \ - typeof(x) rem =3D (x) % (denom); \ - (quot * (numer)) + ((rem * (numer)) / (denom)); \ -} \ -) +/* Calculate "x * n / d" without unnecessary overflow or loss of precision= . */ +#define mult_frac(x, n, d) \ +({ \ + typeof(x) x_ =3D (x); \ + typeof(n) n_ =3D (n); \ + typeof(d) d_ =3D (d); \ + \ + typeof(x) q =3D x_ / d_; \ + typeof(x) r =3D x_ % d_; \ + q * n_ + r * n_ / d_; \ +}) =20 #define sector_div(a, b) do_div(a, b)