From nobody Fri Jun 27 20:08:22 2025 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 4bTRSk38ZSz60C2w; Fri, 27 Jun 2025 20:08:22 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bTRSk2QYRz4B7C; Fri, 27 Jun 2025 20:08:22 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1751054902; 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=9Uap/h8AwovpyQrLRk0iedGRdM2H/onGBI0oX+OegxE=; b=ARVwUsZiGlyCF5Coiujif/imVTiVm2DW2McGHmCz5GtwfliGueJMUOeILkGX7nQYG/q2iF R6PZoNw5A9oa/P2qPQ4kC1u9cbZzYY6TXNDpRvMQGVhr+Whi54unX+kP4ZCO3FYPDakZxX Jw3h7wVNL1Yy/WTISHPhw2rUbkKqC0kZX3BaV09MTKq3WMx56UeUMDEX2WwTqqsrch6PsL r9zCXh+d/7C003qb+MbHXPcNraL2ffOktQtpJPuX0Sheqb65jeTHWAbWridS6cpGH2CLEj +eYq5ngdFrTaAuP7eV/QIrGO/XDM5PajzRRC52JxdWs2/jnIl4vtp/xZ/6E8VA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1751054902; 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=9Uap/h8AwovpyQrLRk0iedGRdM2H/onGBI0oX+OegxE=; b=n46GNJh0HtBaDWWXDX3ERKtGRw7zKUwPIAGrwa/yJKBBh3hNUcFHvlA/+SZiHA3df06+15 octez2TIkhK4buuDZQCfcaOuIsa4u62Hq/sJvCnHemVuZFqtBMm40ZCGZFBf8EOH20nL16 AIvQOV4A/R+S8+QAxWajb5h5eMY3VUE0Pkri2dTJcIXmNsdSVLsFsnAhHUWXDeJmlZGe3f YFEuHRExm0XQzL4nkBNBSVUgrf0i7GyIpDl+cbIXW7PsKOXnqpn3DCGapYsHbBpZHmGgy2 7yOjrIDsdguqrkkPA04e9Ql8DOFXhwKX5HQ/N8ssLf22oJG8HIkGKrNkCDyenQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1751054902; a=rsa-sha256; cv=none; b=C0MTwTsgqs20ej95jU5ej4BeSY2bfTKdx50wMIisA0SdZW7/bzhkobAYJa/IFDG/FWNRxn touxR7kIcbWVnCGdkE1rMOoU7CSSRCCkH5GX4mu6mWRiwt0j/D53uujDC1of7zNr9Jw6DY w8xg1mr53iczcYzFsDFbiSbtF7dBl0hrLuijza1s/DZ1PoGNpqwfhBlH+HcXehvNadNVd/ HVz2Ovs5AI2+oEFI+CQmdsqoBUSdycXWr01y2Ll4iLTvaBCxD3OVmtyeCWOLv1qCEfHC6A hThARt7hYYeQOwf4A0A5Q76zpLEzAu06E5SnKic7T05JjgUwBZrFqbzwmhE01g== 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 4bTRSk1LfZz1273; Fri, 27 Jun 2025 20:08:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 55RK8MlL094777; Fri, 27 Jun 2025 20:08:22 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 55RK8MK3094774; Fri, 27 Jun 2025 20:08:22 GMT (envelope-from git) Date: Fri, 27 Jun 2025 20:08:22 GMT Message-Id: <202506272008.55RK8MK3094774@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Allan Jude Subject: git: eae830109571 - stable/13 - Fix 2 bugs in non-raw send with encryption 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: allanjude X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: eae830109571fcf069545b6a2fabf68c5d8e67c0 Auto-Submitted: auto-generated The branch stable/13 has been updated by allanjude: URL: https://cgit.FreeBSD.org/src/commit/?id=eae830109571fcf069545b6a2fabf68c5d8e67c0 commit eae830109571fcf069545b6a2fabf68c5d8e67c0 Author: George Amanakis AuthorDate: 2025-05-19 16:55:00 +0000 Commit: Allan Jude CommitDate: 2025-06-27 20:07:48 +0000 Fix 2 bugs in non-raw send with encryption Bisecting identified the redacted send/receive as the source of the bug for issue #12014. Specifically the call to dsl_dataset_hold_obj(&fromds) has been replaced by dsl_dataset_hold_obj_flags() which passes a DECRYPT flag and creates a key mapping. A subsequent dsl_dataset_rele_flag(&fromds) is missing and the key mapping is not cleared. This may be inadvertedly used, which results in arc_untransform failing with ECKSUM in: arc_untransform+0x96/0xb0 [zfs] dbuf_read_verify_dnode_crypt+0x196/0x350 [zfs] dbuf_read+0x56/0x770 [zfs] dmu_buf_hold_by_dnode+0x4a/0x80 [zfs] zap_lockdir+0x87/0xf0 [zfs] zap_lookup_norm+0x5c/0xd0 [zfs] zap_lookup+0x16/0x20 [zfs] zfs_get_zplprop+0x8d/0x1d0 [zfs] setup_featureflags+0x267/0x2e0 [zfs] dmu_send_impl+0xe7/0xcb0 [zfs] dmu_send_obj+0x265/0x360 [zfs] zfs_ioc_send+0x10c/0x280 [zfs] Fix this by restoring the call to dsl_dataset_hold_obj(). The same applies for to_ds: here replace dsl_dataset_rele(&to_ds) with dsl_dataset_rele_flags(). Both leaked key mappings will cause a panic when exporting the sending pool or unloading the zfs module after a non-raw send from an encrypted filesystem. Contributions-by: Hank Barta Contributions-by: Paul Dagnelie Reviewed-by: Alexander Motin Reviewed-by: Richard Yao Reviewed-by: Rob Norris Reviewed-by: Brian Behlendorf Signed-off-by: George Amanakis Closes #12014 Closes #17340 (cherry picked from commit ea74cdedda8b9575d7e94198d38f12943ac41343) --- sys/contrib/openzfs/module/zfs/dmu_send.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sys/contrib/openzfs/module/zfs/dmu_send.c b/sys/contrib/openzfs/module/zfs/dmu_send.c index 0dd1ec210a1d..e4891e2fe4aa 100644 --- a/sys/contrib/openzfs/module/zfs/dmu_send.c +++ b/sys/contrib/openzfs/module/zfs/dmu_send.c @@ -2676,8 +2676,8 @@ dmu_send_obj(const char *pool, uint64_t tosnap, uint64_t fromsnap, } if (fromsnap != 0) { - err = dsl_dataset_hold_obj_flags(dspp.dp, fromsnap, dsflags, - FTAG, &fromds); + err = dsl_dataset_hold_obj(dspp.dp, fromsnap, FTAG, &fromds); + if (err != 0) { dsl_dataset_rele_flags(dspp.to_ds, dsflags, FTAG); dsl_pool_rele(dspp.dp, FTAG); @@ -2729,7 +2729,7 @@ dmu_send_obj(const char *pool, uint64_t tosnap, uint64_t fromsnap, kmem_free(dspp.fromredactsnaps, dspp.numfromredactsnaps * sizeof (uint64_t)); - dsl_dataset_rele(dspp.to_ds, FTAG); + dsl_dataset_rele_flags(dspp.to_ds, dsflags, FTAG); return (err); }