summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManish Sogi <manish.sogi@samsung.com>2015-07-02 09:54:19 +0530
committerPeter Meerwald <p.meerwald@bct-electronic.com>2015-07-21 16:40:03 +0200
commitdd084acb2834f1b6bb92c304f70e0ed0c0be84f6 (patch)
tree7b767d42bc1cf6199af5abf84f600a20775ced8a
parent8f12ef901c183454eecce2faefd759f040e738fd (diff)
downloadpulseaudio-dd084acb2834f1b6bb92c304f70e0ed0c0be84f6.tar.gz
xen: Resource leak in local function alloc_gref() - alloc_fd and dev_fd
The file descriptors need to be closed in failure cases otherwise resource leak is there. Buglink: https://bugs.freedesktop.org/show_bug.cgi?id=91174#c0 Signed-off-by: Manish Sogi <manish.sogi@samsung.com>
-rw-r--r--src/modules/xen/module-xenpv-sink.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/modules/xen/module-xenpv-sink.c b/src/modules/xen/module-xenpv-sink.c
index b87f811bb..4813f100a 100644
--- a/src/modules/xen/module-xenpv-sink.c
+++ b/src/modules/xen/module-xenpv-sink.c
@@ -591,6 +591,7 @@ static int alloc_gref(struct ioctl_gntalloc_alloc_gref *gref_, void **addr) {
dev_fd = open("/dev/xen/gntdev", O_RDWR);
if (dev_fd<=0) {
perror("Could not open /dev/xen/gntdev! Have you loaded the xen_gntdev module?");
+ close(alloc_fd);
return 1;
}
@@ -602,7 +603,7 @@ static int alloc_gref(struct ioctl_gntalloc_alloc_gref *gref_, void **addr) {
rv = ioctl(alloc_fd, IOCTL_GNTALLOC_ALLOC_GREF, gref_);
if (rv) {
pa_log_debug("Xen audio sink: src-add error: %s (rv=%d)\n", strerror(errno), rv);
- return rv;
+ goto finish;
}
/*addr=NULL(default),length, prot, flags, fd, offset*/
@@ -610,7 +611,7 @@ static int alloc_gref(struct ioctl_gntalloc_alloc_gref *gref_, void **addr) {
if (*addr == MAP_FAILED) {
*addr = 0;
pa_log_debug("Xen audio sink: mmap'ing shared page failed\n");
- return rv;
+ goto finish;
}
pa_log_debug("Xen audio sink: Got grant #%d. Mapped locally at %Ld=%p\n",
@@ -626,7 +627,7 @@ static int alloc_gref(struct ioctl_gntalloc_alloc_gref *gref_, void **addr) {
if (rv)
pa_log_debug("gntalloc unmap notify error: %s (rv=%d)\n", strerror(errno), rv);
*/
-
+finish:
close(alloc_fd);
close(dev_fd);