Message ID | 1401287873-25805-6-git-send-email-kwolf@redhat.com |
---|---|
State | New |
Headers | show |
The Wednesday 28 May 2014 à 16:37:38 (+0200), Kevin Wolf wrote : > Some code in the block layer makes potentially huge allocations. Failure > is not completely unexpected there, so avoid aborting qemu and handle > out-of-memory situations gracefully. > > This patch addresses the allocations in the curl block driver. > > Signed-off-by: Kevin Wolf <kwolf@redhat.com> > Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> > --- > block/curl.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/block/curl.c b/block/curl.c > index f491b0b..ae996e2 100644 > --- a/block/curl.c > +++ b/block/curl.c > @@ -604,7 +604,13 @@ static void curl_readv_bh_cb(void *p) > state->buf_start = start; > state->buf_len = acb->end + s->readahead_size; > end = MIN(start + state->buf_len, s->len) - 1; > - state->orig_buf = g_malloc(state->buf_len); > + state->orig_buf = g_try_malloc(state->buf_len); > + if (state->buf_len && state->orig_buf == NULL) { > + curl_clean_state(state); > + acb->common.cb(acb->common.opaque, -ENOMEM); > + qemu_aio_release(acb); > + return; > + } > state->acb[0] = acb; > > snprintf(state->range, 127, "%zd-%zd", start, end); > -- > 1.8.3.1 > > eviewed-by: Benoit Canet <benoit@irqsave.net>
diff --git a/block/curl.c b/block/curl.c index f491b0b..ae996e2 100644 --- a/block/curl.c +++ b/block/curl.c @@ -604,7 +604,13 @@ static void curl_readv_bh_cb(void *p) state->buf_start = start; state->buf_len = acb->end + s->readahead_size; end = MIN(start + state->buf_len, s->len) - 1; - state->orig_buf = g_malloc(state->buf_len); + state->orig_buf = g_try_malloc(state->buf_len); + if (state->buf_len && state->orig_buf == NULL) { + curl_clean_state(state); + acb->common.cb(acb->common.opaque, -ENOMEM); + qemu_aio_release(acb); + return; + } state->acb[0] = acb; snprintf(state->range, 127, "%zd-%zd", start, end);