From patchwork Thu Jan 18 18:19:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zach O'Keefe X-Patchwork-Id: 13523088 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id BA7A9C47DB3 for ; Thu, 18 Jan 2024 18:20:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5041A6B009C; Thu, 18 Jan 2024 13:20:30 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 4B4A66B00A7; Thu, 18 Jan 2024 13:20:30 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 37B5B6B00A8; Thu, 18 Jan 2024 13:20:30 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 23E7B6B009C for ; Thu, 18 Jan 2024 13:20:30 -0500 (EST) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id E4EF91A006F for ; Thu, 18 Jan 2024 18:20:29 +0000 (UTC) X-FDA: 81693246978.23.AB3BE90 Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.201]) by imf24.hostedemail.com (Postfix) with ESMTP id 74272180019 for ; Thu, 18 Jan 2024 18:20:28 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=yLd9EsTD; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf24.hostedemail.com: domain of 362upZQcKCJwVKGAABACKKCHA.8KIHEJQT-IIGR68G.KNC@flex--zokeefe.bounces.google.com designates 209.85.128.201 as permitted sender) smtp.mailfrom=362upZQcKCJwVKGAABACKKCHA.8KIHEJQT-IIGR68G.KNC@flex--zokeefe.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1705602028; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=Q4qEVRx2ddSU7H+X65h3lnAP0N9W1FBS+7gcr4VsH4g=; b=nmf28GA0qmhCYO/CqVmOhrOhhxhJ9MzGjKsCpo467cvCIVUWlX2YuMVaYuO2pXEH+s8hlX LDQqOpcr5HxoMbSAwD8jSzYDI4f6qEjyQfFxyIBOx1Ib770ZcgtVznpxtCSzq0nQzEGemB UjBQsWjvMbioDgQ25ZuHrHByKo2Ctus= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=yLd9EsTD; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf24.hostedemail.com: domain of 362upZQcKCJwVKGAABACKKCHA.8KIHEJQT-IIGR68G.KNC@flex--zokeefe.bounces.google.com designates 209.85.128.201 as permitted sender) smtp.mailfrom=362upZQcKCJwVKGAABACKKCHA.8KIHEJQT-IIGR68G.KNC@flex--zokeefe.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1705602028; a=rsa-sha256; cv=none; b=fTZy4nT4Jeu2Usg9UOldihtDVaUVNXXUKosOGF3z/ylNccbbtkKWgfy8jnhK35at4bQ+sX qkSX/gzHhALEhcoTFrckaXsBMJZt9VrtvCAhdDN4GJ06NRGbAXUShZ3Gv/VrHubIyl0UWJ AovDnWFeLqFrEgnp0jwFPL8LM6pXkqE= Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-5efe82b835fso230340787b3.0 for ; Thu, 18 Jan 2024 10:20:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1705602027; x=1706206827; darn=kvack.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=Q4qEVRx2ddSU7H+X65h3lnAP0N9W1FBS+7gcr4VsH4g=; b=yLd9EsTDHnWaTB6GNFP4ENORKXU93CFOo0Al1CosQ3BeANGZRZXc1itNT+yH6KguxK fpzrgW2Zy3tFywnTl/K3E4x44JsvJyhZ52LyWmpLoxYu0/Sv8gwivm31Bx1Lp8KCF5N1 nuMm8NCerOtF60XN9Xr8BZ9uwCfauRrwt8jmHwH3E8DwYvOiOGiwNjIxlhpmUn+g2Zt+ OTjMGVnG6f+UOeKun0/ZFf3fDwPithDxWFnTWLIWWLkasv+w+1S78UeLdka6NFxxNznY vlfpYDLnYX5Y0PXKVWvkXFVDudBsqUMGw1APYYRNSs9lAECNm4mDNHBJ7+BIYt02p+UO p+/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705602027; x=1706206827; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Q4qEVRx2ddSU7H+X65h3lnAP0N9W1FBS+7gcr4VsH4g=; b=BR/OxqA8cFS6ELfI1I/LJ7UJspgFceIYd6RHhijJVbZSs81FnkE4jyjM8Av2CyarlT 1ZAHBeltmbL4osCa0gXEvaYGJjrPtwdhPkqFrFG49IZBkFfdRI5i37ywhsOcivjOJHX5 wgffEDs7Mo9IU91V1ngIOLZSQYy7zyIGz6mVeAsWSfxkw4K3kY4z0nWXdmnaDma4jg24 A7Sob0ySjKXse5SHjTfuoYsZWR4Krbh5b3iMez3RdZBMr5+YpNcLF1PWSWa7eVDEIpt0 iB9S0k1QZZH9jppQAx+tAwgqS/j9zxf67UpKRFikiC50fElahuq/WtTjDogAf77QO6iX KWzQ== X-Gm-Message-State: AOJu0YyhCAlmTuafwdN0jKkMzCDcpNJJ2ZMG5fCvV0uwKkfPxGSeh2ad HqaYHZwK2j+s1CPVeW3nEx13HIcdoImStUqy5ZN7c/rKHO8we7rDWOBTfSzG0qxVoEqsT4ZHDyN ZaLL8MA== X-Google-Smtp-Source: AGHT+IGLUNghu6mxF3SS7FJWjiDaHrXi0fENYH/7FmfNi5ZJUccLxbTU4wHujCNx5nF1YSmUscKnrwovWwgK X-Received: from zokeefe3.c.googlers.com ([fda3:e722:ac3:cc00:20:ed76:c0a8:2971]) (user=zokeefe job=sendgmr) by 2002:a05:6902:181f:b0:dbd:b91e:9b87 with SMTP id cf31-20020a056902181f00b00dbdb91e9b87mr525809ybb.2.1705602027541; Thu, 18 Jan 2024 10:20:27 -0800 (PST) Date: Thu, 18 Jan 2024 10:19:53 -0800 Mime-Version: 1.0 X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Message-ID: <20240118181954.1415197-1-zokeefe@google.com> Subject: [PATCH] mm/writeback: fix possible divide-by-zero in wb_dirty_limits(), again From: "Zach O'Keefe" To: Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, "Zach O'Keefe" , Maxim Patlasov , stable@vger.kernel.org X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 74272180019 X-Stat-Signature: pmfims6zdaubd4z8t4pk3sbfe3br5az7 X-Rspam-User: X-HE-Tag: 1705602028-312189 X-HE-Meta: U2FsdGVkX18DHZ6Fppx5EudSHgXRKks3BzAwEXo3gU0UpV4/NLLICI+IUD0nmmxYBkG/0wB9CA/bH8fDlNQ6Zyxxp/5Rm0laz+Yc/ej+nC9OI0gLcDd5otMIcdEtLyc7jlIDFLZGBbbRejefSzlZMdU9d/MAicLyDj5fPNTLSyv8UhkROgjrbsQHU6NOCKfqd/WW59L8Oy/KwcPALNgCNG06nqA5jWvwovGVsrbwujtvnaLlD2xtpU7MA29T9INY47yvGIM+YHPGx0gAO+iGW6nTYsx05JCU1lL8jqHlWhI/McjGHcp7CeaFeTtAIotBeNp63H88ZnK6zlgMSQkfXliPlXgZODuPwdxRcnJB056BRX/1o0AvGbrTm8UblXNeuUq0N8SpAhBe43nLWA4QKAHlDTgul/ADgEYyO4BJnNfCWalDlXYBELz7QANlFd2+K9Jgm6Q41b83myT2NRIOQWy59mgNe9Z1Mz5fEbNeQgbYxweMtlre2C/sgaNFd1Ag0k38sXBHZQFQpoxRM6IJxbNfr/FuggIdhqDGWKGnPKLVDpVgKzdxZLHQdOe0JUSGNYLsWrgAgwf96mAa4OCjr1xAyhoSOz56kCMqYFGPo/OkokKNlpo3x+7Bx1Kb98GK5BdQ+bzbCckWOlrhoGIrGleh6AS8+zFmKmBuNnWTcpVguFFKyE3Q+DdSqrosi1yttW9aBflIdWGnB8exkkosX3VniOPT/jcoBYHYmHLnNMZv/jf6UrRSUUZAAsktrZ80riwf5b0eAYqwFhdcMSdjKXH4BdcbYkVlwvBKrRnZYTgfiKHRMADWif1OONx6QSaK6c3yIac54yUYzvXLWEebEcCM3fvtMSsRLz0qfg3c5cu2N3l/kqT0Na++BdKDpH5M2EHeHqnrNuRJSENSuKIG8Y3iSUnW9VVuXXYx0xFXwxqhyhuin2/pq60+2j0iSuhBVx7X+zVR85/VupFvJMm 2K6RyrxX aNXSHX1MuOZ3mALy3Wq2cC8jvjqhmVQcW3zygPaD+w7uPrmzuEFw/jkT51rm+Shixl4oCwnOCsdsOLzPRF1MczKwR9vij52O2IJDCYfb7H+amA+TsDPPB5OmvbBQl3WgQVfaEPolXeevRUNzK8cuI1YOjYac1mvowKV3YHrurWggWHvuzQnCPnyd2cKJOTICUr9229i41hXmzoYUVmeoa9mBZ7RK64HFvxf8P+MnAi8wvbNrS9B12DD61KIlWv4Yfn9acTJvsXMDVPlYSBG04p8NoIo5QcIjXhQdpFW/U2YyFw7DGHCHHf3c72YVB13Cqa42AG+QynIy/w12ONaS/FHVOCLnVipk+e+QMvmdXfK2zBoO7imGOzkbbbVOY9hKtBj9CtPt5uGxY91AIDc+YkyTI0A== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000017, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: (struct dirty_throttle_control *)->thresh is an unsigned long, but is passed as the u32 divisor argument to div_u64(). On architectures where unsigned long is 64 bytes, the argument will be implicitly truncated. Use div64_u64() instead of div_u64() so that the value used in the "is this a safe division" check is the same as the divisor. Also, remove redundant cast of the numerator to u64, as that should happen implicitly. This would be difficult to exploit in memcg domain, given the ratio-based arithmetic domain_drity_limits() uses, but is much easier in global writeback domain with a BDI_CAP_STRICTLIMIT-backing device, using e.g. vm.dirty_bytes=(1<<32)*PAGE_SIZE so that dtc->thresh == (1<<32) Fixes: f6789593d5ce ("mm/page-writeback.c: fix divide by zero in bdi_dirty_limits()") Cc: Maxim Patlasov Cc: Signed-off-by: Zach O'Keefe --- mm/page-writeback.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/page-writeback.c b/mm/page-writeback.c index cd4e4ae77c40a..02147b61712bc 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -1638,7 +1638,7 @@ static inline void wb_dirty_limits(struct dirty_throttle_control *dtc) */ dtc->wb_thresh = __wb_calc_thresh(dtc); dtc->wb_bg_thresh = dtc->thresh ? - div_u64((u64)dtc->wb_thresh * dtc->bg_thresh, dtc->thresh) : 0; + div64_u64(dtc->wb_thresh * dtc->bg_thresh, dtc->thresh) : 0; /* * In order to avoid the stacked BDI deadlock we need