]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
zloop: fix zone append check in zloop_rw()
authorDamien Le Moal <dlemoal@kernel.org>
Wed, 19 Nov 2025 04:34:23 +0000 (13:34 +0900)
committerJens Axboe <axboe@kernel.dk>
Wed, 19 Nov 2025 14:39:42 +0000 (07:39 -0700)
While commit cf28f6f923cb ("zloop: fail zone append operations that are
targeting full zones") added a check in zloop_rw() that a zone append is
not issued to a full zone, commit e3a96ca90462 ("zloop: simplify checks
for writes to sequential zones") inadvertently removed the check to
verify that there is enough unwritten space in a zone for an incoming
zone append opration.

Re-add this check in zloop_rw() to make sure we do not write beyond the
end of a zone. Of note is that this same check is already present in the
function zloop_set_zone_append_sector() when ordered zone append is in
use.

Reported-by: Hans Holmberg <Hans.Holmberg@wdc.com>
Fixes: e3a96ca90462 ("zloop: simplify checks for writes to sequential zones")
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Hans Holmberg <hans.holmberg@wdc.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/zloop.c

index c4da3116f7a9978a7613a12f1a60f15b89c448b2..1273bbca784325615ca8984a41e8bfd4279bf889 100644 (file)
@@ -448,7 +448,8 @@ static void zloop_rw(struct zloop_cmd *cmd)
                         * and set the target sector in zloop_queue_rq().
                         */
                        if (!zlo->ordered_zone_append) {
-                               if (zone->cond == BLK_ZONE_COND_FULL) {
+                               if (zone->cond == BLK_ZONE_COND_FULL ||
+                                   zone->wp + nr_sectors > zone_end) {
                                        spin_unlock_irqrestore(&zone->wp_lock,
                                                               flags);
                                        ret = -EIO;