From nobody Sun May 19 12:54:37 2024 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 4Vj0yj5Zvrz5JyhD; Sun, 19 May 2024 12:54:37 +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 4Vj0yj4TDWz4FRW; Sun, 19 May 2024 12:54:37 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1716123277; 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=B3N4Z58bNWCdT5a9JaD8fG/MilWmLR65dHZ3xTdmIzY=; b=XZ+eAP+22MEK1hcD7Y08Wt3lqo4bD0bodT0CAERQeSBqtI54muUqN6/oGO3aqVKUE4d1OO N5zw2/QR81tSqUiNAYFCodIaNSMQp2CDYc+3kd8DzccWCgbSmeb87vIN0U3hOWRAGsLK1j y+2+35pAgFpbUJvfjRFw1ATgOpW+plzgOTpd4v0qfL5wOX8sPYY430OS3TznyA+5a97Vox RsEIEhDu+FEwxZmpX3wPjLcrSmdEXyG/DWLJN5eSZkKl4Jx123InrD7nLtoHSMtDHu5Ve9 X6oNKxYDOpwHnfRCEYUdn72LPq0F3XkCmC9MfV/OmjKUiWruGl5EhMQrf4fDFA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1716123277; a=rsa-sha256; cv=none; b=qiRXeFQS7mM8T0Vi9bJwaH3shvd51xMrF5lRcw7JawwxSCnp2YRGXMAZWfSnriIATN9Ybw 0tdfIWFUGXQAN7z2AOIc6a0yCoao/6TWLaG80+hZIlKklUHOq478k6NcvxYIFvpOuajZcl xOJz4sscWywD6hMswwPI/qyhYsnNydQNokcWmFzWWCtrD8TQPONqum/OQhjdaoLHb06fZY sLmcombr26AQk2iSKh2UDiZ2K2mQ2VtccTnvkgE4WkHeVQTflH71prwlGMew6dwTZMpahv QNlrgLELEIXLcQUkSVp2tJGNwwimbG3pWcYU7HlCyablD26FNFTD0FIe5E2J0w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1716123277; 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=B3N4Z58bNWCdT5a9JaD8fG/MilWmLR65dHZ3xTdmIzY=; b=RdlHDyQ9TPYlMG6gByQ4Ga+sc36w298FJwAdy//b3htvSWvElGa6C9fwtPhKrby6HNFnxD mUDvqFQeLgiudZ8fSOyw5zk46lO1DLD4CHTxARCb5rYpJ70l8AgT0bWg2H7a7dNmi/fnj7 Jl6Y9bauRTKwht2/2W3CAlU9DUWJQyyowgRUOvGqCqLlRkVlfYqlBcb4RSd+GX6wbJPiN6 vonp+sOsrB1n247RQ6eAPYuWwVHTKj4F441E3MLlZx/RF1J8QTMRttEQs6NVJsIqmvqXBT 5ql80YMjpmsArq6sfXn38FoYIO4EewNdI1Q/NtZ3XDQ1jZLFhc5SBTgVuywyXg== 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 4Vj0yj45T9z19H2; Sun, 19 May 2024 12:54:37 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 44JCsbaP095266; Sun, 19 May 2024 12:54:37 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 44JCsbvl095263; Sun, 19 May 2024 12:54:37 GMT (envelope-from git) Date: Sun, 19 May 2024 12:54:37 GMT Message-Id: <202405191254.44JCsbvl095263@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mariusz Zaborski Subject: git: 4b3141f5d537 - main - geli: allocate a UMA pool earlier 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: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: oshogbo X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4b3141f5d5373989598f9447ab5a9f87e2d1c9fb Auto-Submitted: auto-generated The branch main has been updated by oshogbo: URL: https://cgit.FreeBSD.org/src/commit/?id=4b3141f5d5373989598f9447ab5a9f87e2d1c9fb commit 4b3141f5d5373989598f9447ab5a9f87e2d1c9fb Author: Mariusz Zaborski AuthorDate: 2024-05-19 12:53:17 +0000 Commit: Mariusz Zaborski CommitDate: 2024-05-19 12:53:17 +0000 geli: allocate a UMA pool earlier The functions g_eli_init_uma and g_eli_fini_uma are used to trace the number of devices in GELI. There is an issue where the g_eli_create function may fail before g_eli_init_uma is called, however g_eli_fini_uma is still executed in the fail path. This can incorrectly decrease the device count to zero, potentially leading to the UMA pool being freed. Accessing the device after the pool has been freed causes a system panic. This commit resolves the issue by ensuring devices count is increassed eariler. PR: 278828 Reported by: Andre Albsmeier Reviewed by: asomers MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D45225 --- sys/geom/eli/g_eli.c | 4 +++- tests/sys/geom/class/eli/attach_test.sh | 29 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/sys/geom/eli/g_eli.c b/sys/geom/eli/g_eli.c index 5d769d606d20..ddb148ebd5db 100644 --- a/sys/geom/eli/g_eli.c +++ b/sys/geom/eli/g_eli.c @@ -1046,10 +1046,12 @@ g_eli_create(struct gctl_req *req, struct g_class *mp, struct g_provider *bpp, bioq_init(&sc->sc_queue); mtx_init(&sc->sc_queue_mtx, "geli:queue", NULL, MTX_DEF); mtx_init(&sc->sc_ekeys_lock, "geli:ekeys", NULL, MTX_DEF); + g_eli_init_uma(); pp = NULL; cp = g_new_consumer(gp); cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; + error = g_attach(cp, bpp); if (error != 0) { if (req != NULL) { @@ -1092,7 +1094,6 @@ g_eli_create(struct gctl_req *req, struct g_class *mp, struct g_provider *bpp, if (threads == 0) threads = mp_ncpus; sc->sc_cpubind = (mp_ncpus > 1 && threads == mp_ncpus); - g_eli_init_uma(); for (i = 0; i < threads; i++) { if (g_eli_cpu_is_disabled(i)) { G_ELI_DEBUG(1, "%s: CPU %u disabled, skipping.", @@ -1164,6 +1165,7 @@ g_eli_create(struct gctl_req *req, struct g_class *mp, struct g_provider *bpp, sc->sc_crypto == G_ELI_CRYPTO_SW_ACCEL ? "accelerated software" : sc->sc_crypto == G_ELI_CRYPTO_SW ? "software" : "hardware"); return (gp); + failed: mtx_lock(&sc->sc_queue_mtx); sc->sc_flags |= G_ELI_FLAG_DESTROY; diff --git a/tests/sys/geom/class/eli/attach_test.sh b/tests/sys/geom/class/eli/attach_test.sh index eb59234f014b..b6b1848f2d37 100644 --- a/tests/sys/geom/class/eli/attach_test.sh +++ b/tests/sys/geom/class/eli/attach_test.sh @@ -39,6 +39,34 @@ attach_d_cleanup() geli_test_cleanup } +atf_test_case atach_multiple_fails cleanup +attach_multiple_fails_head() +{ + atf_set "descr" "test multiple failed attach of geli provider" + atf_set "require.user" "root" +} +attach_multiple_fails_body() +{ + geli_test_setup + + sectors=1000 + attach_md md -t malloc -s `expr $sectors + 1` + atf_check dd if=/dev/random of=keyfile bs=512 count=16 status=none + + atf_check geli init -B none -P -K keyfile ${md} + atf_check geli attach -d -p -k keyfile ${md} + + for i in $(jot 100); do + atf_check -s not-exit:0 -e ignore -- geli attach -d -p -k keyfile ${md} + done + atf_check -o ignore -- newfs ${md}.eli +} +attach_multiple_fails_cleanup() +{ + geli_test_cleanup +} + + atf_test_case attach_r cleanup attach_r_head() { @@ -125,5 +153,6 @@ atf_init_test_cases() atf_add_test_case attach_d atf_add_test_case attach_r atf_add_test_case attach_multiple + atf_add_test_case attach_multiple_fails atf_add_test_case nokey }