<div dir="ltr">Applied,<div>thanks.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Dec 29, 2014 at 7:44 AM, Yingtai Xie <span dir="ltr"><<a href="mailto:xieyingtai@huawei.com" target="_blank">xieyingtai@huawei.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">/sys/block/ directory has been opened in snprint_devices, the handler<br>
should be released when returned abnormally. Similar memory leak problem<br>
happens in print_multipath_topology when carried out multipath -ll command.<br>
<br>
Signed-off-by: Yingtai Xie <<a href="mailto:xieyingtai@huawei.com">xieyingtai@huawei.com</a>><br>
---<br>
libmultipath/print.c | 9 +++++++--<br>
1 file changed, 7 insertions(+), 2 deletions(-)<br>
<br>
diff --git a/libmultipath/print.c b/libmultipath/print.c<br>
index 383eae4..916906f 100644<br>
--- a/libmultipath/print.c<br>
+++ b/libmultipath/print.c<br>
@@ -890,6 +890,7 @@ print_multipath_topology (struct multipath * mpp, int verbosity)<br>
}<br>
} while (resize);<br>
printf("%s", buff);<br>
+ FREE(buff);<br>
}<br>
<br>
extern int<br>
@@ -1427,8 +1428,10 @@ snprint_devices (char * buff, int len, struct vectors *vecs)<br>
if (!(blkdir = opendir("/sys/block")))<br>
return 1;<br>
<br>
- if ((len - fwd - threshold) <= 0)<br>
+ if ((len - fwd - threshold) <= 0) {<br>
+ closedir(blkdir);<br>
return len;<br>
+ }<br>
fwd += snprintf(buff + fwd, len - fwd, "available block devices:\n");<br>
<br>
strcpy(devpath,"/sys/block/");<br>
@@ -1446,8 +1449,10 @@ snprint_devices (char * buff, int len, struct vectors *vecs)<br>
if (S_ISDIR(statbuf.st_mode) == 0)<br>
continue;<br>
<br>
- if ((len - fwd - threshold) <= 0)<br>
+ if ((len - fwd - threshold) <= 0) {<br>
+ closedir(blkdir);<br>
return len;<br>
+ }<br>
<br>
fwd += snprintf(buff + fwd, len - fwd, " %s", devptr);<br>
pp = find_path_by_dev(vecs->pathvec, devptr);<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.7.12.4<br>
<br>
</font></span></blockquote></div><br></div>