aboutsummaryrefslogtreecommitdiff
path: root/qga
diff options
context:
space:
mode:
authorPhilippe Mathieu-Daudé <philmd@redhat.com>2020-04-14 15:30:41 +0200
committerMichael Roth <mdroth@linux.vnet.ibm.com>2020-04-15 09:15:53 -0500
commitf62ebb63848107336e57adc12369aefaa639e38c (patch)
treee4186bed16c9af831dc51b4a44b14318b333bae3 /qga
parent73995d15557a3cf2328cc6b7982264897c65cf65 (diff)
downloadqemu-f62ebb63848107336e57adc12369aefaa639e38c.zip
qemu-f62ebb63848107336e57adc12369aefaa639e38c.tar.gz
qemu-f62ebb63848107336e57adc12369aefaa639e38c.tar.bz2
Revert "prevent crash when executing guest-file-read with large count"
As noted by Daniel Berrangé in [*], the fix from commit 807e2b6fce which replaced malloc() by try_malloc() is not enough, the process can still run out of memory a few line later: 346 buf = g_try_malloc0(count + 1); 347 if (!buf) { 348 error_setg(errp, 349 "failed to allocate sufficient memory " 350 "to complete the requested service"); 351 return NULL; 352 } 353 is_ok = ReadFile(fh, buf, count, &read_count, NULL); 354 if (!is_ok) { 355 error_setg_win32(errp, GetLastError(), "failed to read file"); 356 slog("guest-file-read failed, handle %" PRId64, handle); 357 } else { 358 buf[read_count] = 0; 359 read_data = g_new0(GuestFileRead, 1); ^^^^^^ Instead we are going to put a low hard limit on 'count' in the next commits. This reverts commit 807e2b6fce022707418bc8f61c069d91c613b3d2. [*] https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg03471.html Suggested-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Diffstat (limited to 'qga')
-rw-r--r--qga/commands-win32.c8
1 files changed, 1 insertions, 7 deletions
diff --git a/qga/commands-win32.c b/qga/commands-win32.c
index b49920e..46cea7d 100644
--- a/qga/commands-win32.c
+++ b/qga/commands-win32.c
@@ -343,13 +343,7 @@ GuestFileRead *qmp_guest_file_read(int64_t handle, bool has_count,
}
fh = gfh->fh;
- buf = g_try_malloc0(count + 1);
- if (!buf) {
- error_setg(errp,
- "failed to allocate sufficient memory "
- "to complete the requested service");
- return NULL;
- }
+ buf = g_malloc0(count + 1);
is_ok = ReadFile(fh, buf, count, &read_count, NULL);
if (!is_ok) {
error_setg_win32(errp, GetLastError(), "failed to read file");