From nobody Tue May 09 16:48:54 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4QG3yb15vWz4BPB7; Tue, 9 May 2023 16:48:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4QG3yb0Zp6z431C; Tue, 9 May 2023 16:48:55 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1683650935; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=FxwqtQV/8FR27/a6zrBTtvFhHasPRGboiKhjBn+swBE=; b=EMHH1L87IYz4ourMiEm9bPobR+UJYPQBRAtMbOhIee6vgUmi1Yq6WSB1sXvZ1g/+INLkjf fxwnJ6IgNnSgW+PoiHi2YBVszTj3TzUWSbdQAxUUj5z/fCGeJ9fxOLzD/gC3BZBU5WiSY2 +d4FDmu53QskCn07KTWBbY/w8tMkVoBERNNvoQ4waMPXMYm80YKW3O5Pc3bUMzQoDALOgk BGGprvuBL1Qu8rEoVOUmBUoxq9Ex4w5Tel4qlRx6P77MzVV43KLSGwAOLkSznQ8yVm7y5I 63zMFxx0tHIGpgmPp89LDFj4IUTVFennS24lE38gs1aOLFCdHKw0IaCY9/dn/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1683650935; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=FxwqtQV/8FR27/a6zrBTtvFhHasPRGboiKhjBn+swBE=; b=I3fiQEXymATWQbWcC3TdikN6YZ+6FKcsu8bdjyBErVGL8DLAfuEJCGe6rNh2uj010qVlGZ bGysTxBv4jy7NfMLlHY3SCzO98/lEht8NPxebCmAdZNt3Lkqs+30bEjUqXJReWrB4EYqR/ JL3BqdNz7ZW9ZKYjkVpEDXLwcBSLeU83wTOR6i1ve1chzxl26DLpn0OK3A4yE5h4f6FxCP pUd8xKCIEFAP0sPcgmTxNwCQk2oU1hNI2wmYNWknZc/dxNDidE5dl0EW1fu0QprOnJnZlF WQgMqMpkb58k4SMgDSwfuUQfq8ComDRWc3Gx7l5Xl3Q/ohEt/HtyrV4Q2xW1hA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1683650935; a=rsa-sha256; cv=none; b=eY5wiFDntgHKloTQzNQmxoWgRdxa/hcmcCBgMUQtKDXovEgBlu/LiinOH3qvAT7polzaBI gbD518hwlUwB/QPp6u0kIEScW6RoLNAw1D5pZakQeBJMOn2qt0rk/tnEFOMidpp0BlSpsK Q6vfO4YtUe7rjx1r8/pkWhlGi4/aAf6TCwkyT7o15Aht8453USbK4QJiX4AG5BtmYYTGFz tlDG/F4AT3pQX+ZfGq0EJycnFfcZ2iKjMfZMrX5Snn+gqhAIXjAmzzoRD49YIrI8U3JqSi EokDi3+5L5gRf7zVjPxmZNKJqTiU1J6dF5j7NiLniVVXTHP++8r68gY7CmOhwQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4QG3yZ6nM0zbVM; Tue, 9 May 2023 16:48:54 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 349GmsdS046289; Tue, 9 May 2023 16:48:54 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 349GmsOs046288; Tue, 9 May 2023 16:48:54 GMT (envelope-from git) Date: Tue, 9 May 2023 16:48:54 GMT Message-Id: <202305091648.349GmsOs046288@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: "Jonathan T. Looney" Subject: git: 8a16fb47303e - main - locks: fix two potential overflows in the lock delay code List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jtl X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 8a16fb47303ef4bfc773b52a920e0b223f8e9c20 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by jtl: URL: https://cgit.FreeBSD.org/src/commit/?id=8a16fb47303ef4bfc773b52a920e0b223f8e9c20 commit 8a16fb47303ef4bfc773b52a920e0b223f8e9c20 Author: Jonathan T. Looney AuthorDate: 2023-05-09 16:20:49 +0000 Commit: Jonathan T. Looney CommitDate: 2023-05-09 16:20:49 +0000 locks: fix two potential overflows in the lock delay code With large numbers of CPUs, the calculation of the maximum lock delay could overflow, leading to an unexpectedly low delay. In fact, the maximum delay would calculate to 0 on systems with between 128 and 255 cores (inclusive). Also, when calculating the new delay in lock_delay(), the delay would overflow if the old delay was >= 32,768. This commit fixes these two overflows. It also updates the maximum delay from 32,678 to SHRT_MAX. Reviewed by: gallatin, jhb, mjg Fixes: 6b8dd26e7c5f ("locks: convert delay times to u_short") MFC after: 2 weeks Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D39372 --- sys/kern/subr_lock.c | 8 +++----- sys/sys/lock.h | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/sys/kern/subr_lock.c b/sys/kern/subr_lock.c index 1061ed5f5d03..05ce8b73b086 100644 --- a/sys/kern/subr_lock.c +++ b/sys/kern/subr_lock.c @@ -121,14 +121,14 @@ void lock_delay(struct lock_delay_arg *la) { struct lock_delay_config *lc = la->config; - u_short i; + u_int i; for (i = la->delay; i > 0; i--) cpu_spinwait(); la->spin_cnt += la->delay; la->delay <<= 1; - if (__predict_false(la->delay > lc->max)) + if (__predict_false(la->delay > (u_int)lc->max)) la->delay = lc->max; } @@ -148,9 +148,7 @@ lock_delay_default_init(struct lock_delay_config *lc) { lc->base = 1; - lc->max = lock_roundup_2(mp_ncpus) * 256; - if (lc->max > 32678) - lc->max = 32678; + lc->max = min(lock_roundup_2(mp_ncpus) * 256, SHRT_MAX); } struct lock_delay_config __read_frequently locks_delay; diff --git a/sys/sys/lock.h b/sys/sys/lock.h index 4031f20946c0..ce66a8ffebba 100644 --- a/sys/sys/lock.h +++ b/sys/sys/lock.h @@ -182,7 +182,7 @@ extern u_short locks_delay_loops; struct lock_delay_arg { struct lock_delay_config *config; - u_short delay; + u_int delay; u_int spin_cnt; };