From 88a334ac2f98affcc526e861c2ed1b8bd2c34b3c Mon Sep 17 00:00:00 2001 From: Pavel Reichl Date: Wed, 11 May 2022 23:20:43 +0200 Subject: [PATCH] exfatprogs: fix some minor code issues * Add checking of function return value * Fix potentially overflowing expression Signed-off-by: Pavel Reichl --- fsck/de_iter.c | 9 ++++++--- lib/libexfat.c | 13 ++++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/fsck/de_iter.c b/fsck/de_iter.c index bc95c49..587b027 100644 --- a/fsck/de_iter.c +++ b/fsck/de_iter.c @@ -82,6 +82,9 @@ static int read_ahead_next_blocks(struct exfat_de_iter *iter, offset >= iter->ra_begin_offset) { ret = get_next_clus(exfat, iter->parent, p_clus, &ra_p_clus); + if (ret) + return ret; + if (ra_p_clus == EXFAT_EOF_CLUSTER) return -EIO; @@ -172,10 +175,10 @@ static ssize_t read_block(struct exfat_de_iter *iter, unsigned int block) ret = get_next_clus(exfat, iter->parent, prev_desc->p_clus, &desc->p_clus); desc->offset = 0; - if (!ret && desc->p_clus == EXFAT_EOF_CLUSTER) - return EOF; - else if (ret) + if (ret) return ret; + else if (desc->p_clus == EXFAT_EOF_CLUSTER) + return EOF; } } diff --git a/lib/libexfat.c b/lib/libexfat.c index 42e3fdc..ee48d3a 100644 --- a/lib/libexfat.c +++ b/lib/libexfat.c @@ -470,7 +470,12 @@ int exfat_set_volume_label(struct exfat_blk_dev *bd, exfat_err("volume entry write failed: %d\n", errno); return -1; } - fsync(bd->dev_fd); + + if (fsync(bd->dev_fd) == -1) { + exfat_err("failed to sync volume entry: %d, %s\n", errno, + strerror(errno)); + return -1; + } exfat_info("new label: %s\n", label_input); return 0; @@ -479,7 +484,8 @@ int exfat_set_volume_label(struct exfat_blk_dev *bd, int exfat_read_sector(struct exfat_blk_dev *bd, void *buf, unsigned int sec_off) { int ret; - unsigned long long offset = sec_off * bd->sector_size; + unsigned long long offset = + (unsigned long long)sec_off * bd->sector_size; ret = pread(bd->dev_fd, buf, bd->sector_size, offset); if (ret < 0) { @@ -493,7 +499,8 @@ int exfat_write_sector(struct exfat_blk_dev *bd, void *buf, unsigned int sec_off) { int bytes; - unsigned long long offset = sec_off * bd->sector_size; + unsigned long long offset = + (unsigned long long)sec_off * bd->sector_size; bytes = pwrite(bd->dev_fd, buf, bd->sector_size, offset); if (bytes != (int)bd->sector_size) { -- 2.35.3