aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2023-07-31 22:55:13 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2023-08-07 00:48:45 +0000
commit746c8f0cd7061bcda4bb68cb612827288459bee6 (patch)
tree74aa45ab7a72ac1cd2af88298c1a2a361356a69b
parentc25f1912ea6a9ca510625eac2111d3b2ae67b40d (diff)
downloadsrc-746c8f0cd7061bcda4bb68cb612827288459bee6.tar.gz
src-746c8f0cd7061bcda4bb68cb612827288459bee6.zip
cd9660: do not leak buffers in cd9660_rrip_loop()
PR: 272856 (cherry picked from commit fa3cf6cdc68cb6d6f2c440f2653258d68eae1015)
-rw-r--r--sys/fs/cd9660/cd9660_rrip.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/sys/fs/cd9660/cd9660_rrip.c b/sys/fs/cd9660/cd9660_rrip.c
index 87bc64c9b7d2..5d64e2c17f0a 100644
--- a/sys/fs/cd9660/cd9660_rrip.c
+++ b/sys/fs/cd9660/cd9660_rrip.c
@@ -549,12 +549,18 @@ cd9660_rrip_loop(isodir,ana,table)
}
if (ana->fields && ana->iso_ce_len) {
- if (ana->iso_ce_blk >= ana->imp->volume_space_size
- || ana->iso_ce_off + ana->iso_ce_len > ana->imp->logical_block_size
- || bread(ana->imp->im_devvp,
- ana->iso_ce_blk <<
- (ana->imp->im_bshift - DEV_BSHIFT),
- ana->imp->logical_block_size, NOCRED, &bp))
+ if (ana->iso_ce_blk >= ana->imp->volume_space_size ||
+ ana->iso_ce_off + ana->iso_ce_len >
+ ana->imp->logical_block_size)
+ break;
+ if (bp != NULL) {
+ brelse(bp);
+ bp = NULL;
+ }
+ if (bread(ana->imp->im_devvp,
+ ana->iso_ce_blk <<
+ (ana->imp->im_bshift - DEV_BSHIFT),
+ ana->imp->logical_block_size, NOCRED, &bp) != 0)
/* what to do now? */
break;
phead = (ISO_SUSP_HEADER *)(bp->b_data + ana->iso_ce_off);