io: avoid double-free when closing QIOChannelBuffer
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 27 Apr 2016 10:04:52 +0000 (11:04 +0100)
committerAmit Shah <amit.shah@redhat.com>
Thu, 26 May 2016 06:01:09 +0000 (11:31 +0530)
The QIOChannelBuffer's close implementation will free
the internal data buffer. It failed to reset the pointer
to NULL though, so when the object is later finalized
it will free it a second time with predictable crash.

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Message-Id: <1461751518-12128-3-git-send-email-berrange@redhat.com>
Signed-off-by: Amit Shah <amit.shah@redhat.com>
io/channel-buffer.c

index 3e5117bf2803092df8d5a2d146d696b068cee092..43d795976d9eabc51437206c257feb168caca96e 100644 (file)
@@ -140,6 +140,7 @@ static int qio_channel_buffer_close(QIOChannel *ioc,
     QIOChannelBuffer *bioc = QIO_CHANNEL_BUFFER(ioc);
 
     g_free(bioc->data);
+    bioc->data = NULL;
     bioc->capacity = bioc->usage = bioc->offset = 0;
 
     return 0;