[sheepdog] [PATCH] dog: don't free value if it is passed via command line

Hitoshi Mitake mitake.hitoshi at lab.ntt.co.jp
Fri Aug 15 03:32:05 CEST 2014


vdi_setattr() has two way of obtaining value of attr:
1. command line parameter
2. read from stdin

In a case of 1, the value shouldn't be freed because it is not in heap
area. But current dog does it. This patch removes this invalid free.

Reported-by: Ruoyu <liangry at ucweb.com>
Signed-off-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>
---
 dog/vdi.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/dog/vdi.c b/dog/vdi.c
index 84715b3..1d8cc6e 100644
--- a/dog/vdi.c
+++ b/dog/vdi.c
@@ -1278,6 +1278,7 @@ static int vdi_setattr(int argc, char **argv)
 	const char *vdiname = argv[optind++], *key;
 	char *value = NULL;
 	uint64_t offset;
+	bool value_alloced = false;
 
 	key = argv[optind++];
 	if (!key) {
@@ -1289,6 +1290,7 @@ static int vdi_setattr(int argc, char **argv)
 	value = argv[optind++];
 	if (!value && !vdi_cmd_data.delete) {
 		value = xmalloc(SD_MAX_VDI_ATTR_VALUE_LEN);
+		value_alloced = true;
 
 		offset = 0;
 reread:
@@ -1333,7 +1335,7 @@ reread:
 	}
 
 out:
-	if (value)
+	if (value_alloced)
 		free(value);
 
 	return ret;
-- 
1.8.3.2



More information about the sheepdog mailing list