# HG changeset patch # User Paul Boddie # Date 1666299821 -7200 # Node ID 07dc5a5e97f8f1262c71c009bd0fe8ce3a3ef193 # Parent fc87683fd17298a08822f68925d64b33efd54d0d Handle possible error conditions when seeking to blocks. diff -r fc87683fd172 -r 07dc5a5e97f8 libext2fs_blockserver/lib/src/blockserver_io.c --- a/libext2fs_blockserver/lib/src/blockserver_io.c Sun Oct 02 00:39:35 2022 +0200 +++ b/libext2fs_blockserver/lib/src/blockserver_io.c Thu Oct 20 23:03:41 2022 +0200 @@ -205,13 +205,20 @@ /* Perform the read at the given location. */ - client_seek(data->file, block * channel->block_size, SEEK_SET); - read = client_read(data->file, buf, to_read); + if (client_seek(data->file, block * channel->block_size, SEEK_SET) != block * channel->block_size) + { + read = 0; + retval = EXT2_ET_LLSEEK_FAILED; + } + else + { + read = client_read(data->file, buf, to_read); - /* Check for a short read. */ + /* Check for a short read. */ - if (read < to_read) - retval = EXT2_ET_SHORT_READ; + if (read < to_read) + retval = EXT2_ET_SHORT_READ; + } /* Handle read errors generally. */ @@ -238,13 +245,20 @@ /* Perform the write at the given location. */ - client_seek(data->file, block * channel->block_size, SEEK_SET); - written = client_write(data->file, buf, to_write); + if (client_seek(data->file, block * channel->block_size, SEEK_SET) != block * channel->block_size) + { + retval = EXT2_ET_LLSEEK_FAILED; + written = 0; + } + else + { + written = client_write(data->file, buf, to_write); - /* Check for a short write. */ + /* Check for a short write. */ - if (written < to_write) - retval = EXT2_ET_SHORT_WRITE; + if (written < to_write) + retval = EXT2_ET_SHORT_WRITE; + } /* Handle write errors generally. */