diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2023-07-31 22:55:13 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2023-08-07 00:48:45 +0000 |
commit | 746c8f0cd7061bcda4bb68cb612827288459bee6 (patch) | |
tree | 74aa45ab7a72ac1cd2af88298c1a2a361356a69b | |
parent | c25f1912ea6a9ca510625eac2111d3b2ae67b40d (diff) | |
download | src-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.c | 18 |
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); |