mirror of https://github.com/xemu-project/xemu.git
block/raw-posix: Abort on pread beyond end of non-growable file
This shouldn't happen under any normal circumstances. However, it looks like it's possible to achieve this with corrupted images. Without this patch raw_pread is hanging in an endless loop in such cases. The patch is not affecting growable files, for which such reads happen in normal use cases. raw_pread_aligned already handles these cases and won't return zero in the first place. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
f8a83245d9
commit
053965c7ff
|
@ -391,8 +391,12 @@ static int raw_pread(BlockDriverState *bs, int64_t offset,
|
||||||
size = ALIGNED_BUFFER_SIZE;
|
size = ALIGNED_BUFFER_SIZE;
|
||||||
|
|
||||||
ret = raw_pread_aligned(bs, offset, s->aligned_buf, size);
|
ret = raw_pread_aligned(bs, offset, s->aligned_buf, size);
|
||||||
if (ret < 0)
|
if (ret < 0) {
|
||||||
return ret;
|
return ret;
|
||||||
|
} else if (ret == 0) {
|
||||||
|
fprintf(stderr, "raw_pread: read beyond end of file\n");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
size = ret;
|
size = ret;
|
||||||
if (size > count)
|
if (size > count)
|
||||||
|
|
Loading…
Reference in New Issue