From f51b76109f6be2bfee3e4eec61ae3f9bc3d7f8e2 Mon Sep 17 00:00:00 2001
From: David Sterba <dsterba@suse.cz>
Date: Tue, 9 Jun 2015 14:58:43 +0200
Subject: [PATCH] btrfs-progs: receive: fix minor resource leak

Resolves-coverity-id: 1302985
Signed-off-by: David Sterba <dsterba@suse.cz>
---
 cmds-receive.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/cmds-receive.c b/cmds-receive.c
index 114b718c..a57f8d9f 100644
--- a/cmds-receive.c
+++ b/cmds-receive.c
@@ -1002,7 +1002,7 @@ int cmd_receive(int argc, char **argv)
 	struct btrfs_receive r;
 	int receive_fd = fileno(stdin);
 	u64 max_errors = 1;
-	int ret;
+	int ret = 0;
 
 	memset(&r, 0, sizeof(r));
 	r.mnt_fd = -1;
@@ -1039,10 +1039,11 @@ int cmd_receive(int argc, char **argv)
 			max_errors = arg_strtou64(optarg);
 			break;
 		case 'm':
+			free(realmnt);
 			realmnt = strdup(optarg);
 			if (!realmnt) {
 				fprintf(stderr, "ERROR: couldn't allocate realmnt.\n");
-				return 1;
+				goto out;
 			}
 			break;
 		case '?':
@@ -1061,12 +1062,15 @@ int cmd_receive(int argc, char **argv)
 		receive_fd = open(fromfile, O_RDONLY | O_NOATIME);
 		if (receive_fd < 0) {
 			fprintf(stderr, "ERROR: failed to open %s\n", fromfile);
-			return 1;
+			goto out;
 		}
 	}
 
 	ret = do_receive(&r, tomnt, realmnt, receive_fd, max_errors);
 
+out:
+	free(realmnt);
+
 	return !!ret;
 }