From nobody Wed Sep 06 21:57:02 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 4Rgx6l0Z6Vz4sJKq; Wed, 6 Sep 2023 21:57:03 +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 4Rgx6k70Gvz3cS7; Wed, 6 Sep 2023 21:57:02 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1694037423; 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=pkVUFwTIE1/Q4g9HxHzOSon26LUEnsv4so5/eXG7Itg=; b=HYtfnacvNSsOnXfL/zpXerKJHEo7pw2ywErvrCZ0RzDbiaFDy7uBZU42TjVQ4Zr2Sx52Vo pAf5mgViDIt435nuXGfwu6HUkdSprPCGAWnut8fSFn+gLJAPgy/Kl59Gi5mFdTlWIZlZdi JnMhMbt5hdnK2yhFYo6FK1DKRoMrReWl5WfsJOoKDudfOVlhk3b+Irfy74rR1uhjNRA3ZJ 6BGfhg1uLOnShHrLLHo+D2SO2N84RPlQ+BY4mPNG3Z3H+2M+SgY1iPbU7nYP4I3kxvpnY8 Znia78rDuhPzSlkwlpxG0mVvNLrgzCgtqIjzdwi9U6Kfd6XUNpqnBMgXQ9ng5w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1694037423; a=rsa-sha256; cv=none; b=h3r6gHrISitAN8UY5bpmilc2OpzP0Pv9/c9McIo6prZdzVz94KFeK7bvAaXkN49n05oKFR pjhxLBfxKsjENLKC7QfkDIp02OUA2Yno4DqXgd2TsozVUQePB8IxyMwGu3vp1Y82n3cSV6 NfQczf+Yqlibo2xIBcPI418eDKQJWQaBOJrlFgxGqc5pimgQx6/85so66C5nlJuu0tZ6M+ m2cXvgkpQul+Wr4Fm+Jx8gTgovt70Upjar3H+jYuPOvGJycLNkJDIGhRXRpZKn65wgg2s8 kwYrP1B/80m4eayXg6fJhDvcrLigui+PkV2hjmEmGwtrEnN/ihPG+/7MnbMWPQ== 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=1694037423; 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=pkVUFwTIE1/Q4g9HxHzOSon26LUEnsv4so5/eXG7Itg=; b=fRh+TZLX36FtRB3WYwvGVM438QarJWr57XmeM086acYVcfqHmlWLLZUu2oTzJ7GKR0xVP8 iZ7UIdgfZu65eIbMB/Jgh9/kwcLKjfWPdhVMJ12NPaVUks6OMbsED65kdRDG1+8mALr1ix dG9Lxy2D0zkVKZ3B8fZ2Snpn7yCkCwbKSqQ2TArN5iSekJzpiVZtVZyV16L1hfWoEwHpiU YvUHK7EjBLvYaWb0+EoBq9BPy453Z9/Be0Gk5e4k/1DWuJrJkXQaKt9ZxCnHyAY2lH3CmI +jgn8PK3CrQMngE+fJ/uj/RTzVPxgqryBNJkzbHtwt/tqDWlo/YBJL8rQIgRkA== 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 4Rgx6k65WpzYrw; Wed, 6 Sep 2023 21:57:02 +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 386Lv2lk023736; Wed, 6 Sep 2023 21:57:02 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 386Lv2gr023733; Wed, 6 Sep 2023 21:57:02 GMT (envelope-from git) Date: Wed, 6 Sep 2023 21:57:02 GMT Message-Id: <202309062157.386Lv2gr023733@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: John Baldwin Subject: git: 0f6ffc7ff301 - stable/12 - g_raid concat: Fail requests to read beyond the end of the volume 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: jhb X-Git-Repository: src X-Git-Refname: refs/heads/stable/12 X-Git-Reftype: branch X-Git-Commit: 0f6ffc7ff3018d54857c361d251d0c89ab88ec0e Auto-Submitted: auto-generated The branch stable/12 has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=0f6ffc7ff3018d54857c361d251d0c89ab88ec0e commit 0f6ffc7ff3018d54857c361d251d0c89ab88ec0e Author: John Baldwin AuthorDate: 2023-08-04 23:41:05 +0000 Commit: John Baldwin CommitDate: 2023-09-06 20:02:51 +0000 g_raid concat: Fail requests to read beyond the end of the volume Previously a debug kernel would trigger an assertion failure if an I/O request attempted to read off the end of a concat volume, but a non-debug kernel would use an invalid sub-disk to try to complete the request eventually resulting in some sort of fault in the kernel. Instead, turn the assertions into explicit checks that fail requests beyond the end of the volume with EIO. For requests which run over the end of the volume, return a short request. PR: 257838 Reported by: Robert Morris Reviewed by: emaste MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D41222 (cherry picked from commit 4c89c0127dcadaa0d337c23d028f3fea5e76317a) --- sys/geom/raid/tr_concat.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/sys/geom/raid/tr_concat.c b/sys/geom/raid/tr_concat.c index 97d7111fe801..1e9a803b2054 100644 --- a/sys/geom/raid/tr_concat.c +++ b/sys/geom/raid/tr_concat.c @@ -240,8 +240,10 @@ g_raid_tr_iostart_concat(struct g_raid_tr_object *tr, struct bio *bp) offset -= vol->v_subdisks[no].sd_size; no++; } - KASSERT(no < vol->v_disks_count, - ("Request starts after volume end (%ju)", bp->bio_offset)); + if (no >= vol->v_disks_count) { + g_raid_iodone(bp, EIO); + return; + } bioq_init(&queue); do { sd = &vol->v_subdisks[no]; @@ -267,10 +269,8 @@ g_raid_tr_iostart_concat(struct g_raid_tr_object *tr, struct bio *bp) addr += length; offset = 0; no++; - KASSERT(no < vol->v_disks_count || remain == 0, - ("Request ends after volume end (%ju, %ju)", - bp->bio_offset, bp->bio_length)); - } while (remain > 0); + } while (remain > 0 && no < vol->v_disks_count); + bp->bio_completed = bp->bio_length - remain; while ((cbp = bioq_takefirst(&queue)) != NULL) { sd = cbp->bio_caller1; cbp->bio_caller1 = NULL; @@ -308,8 +308,8 @@ g_raid_tr_kerneldump_concat(struct g_raid_tr_object *tr, offset -= vol->v_subdisks[no].sd_size; no++; } - KASSERT(no < vol->v_disks_count, - ("Request starts after volume end (%ju)", boffset)); + if (no >= vol->v_disks_count) + return (EIO); do { sd = &vol->v_subdisks[no]; length = MIN(sd->sd_size - offset, remain); @@ -321,10 +321,9 @@ g_raid_tr_kerneldump_concat(struct g_raid_tr_object *tr, addr += length; offset = 0; no++; - KASSERT(no < vol->v_disks_count || remain == 0, - ("Request ends after volume end (%ju, %zu)", - boffset, blength)); - } while (remain > 0); + } while (remain > 0 && no < vol->v_disks_count); + if (remain > 0) + return (EIO); return (0); } @@ -340,7 +339,6 @@ g_raid_tr_iodone_concat(struct g_raid_tr_object *tr, g_destroy_bio(bp); pbp->bio_inbed++; if (pbp->bio_children == pbp->bio_inbed) { - pbp->bio_completed = pbp->bio_length; g_raid_iodone(pbp, pbp->bio_error); } }