[dm-devel] [PATCH 18/72] libmultipath: replace_wwids(): fix possible fd leak
Martin Wilck
Martin.Wilck at suse.com
Sat Oct 12 21:27:59 UTC 2019
From: Martin Wilck <mwilck at suse.com>
... in case the thread is cancelled.
Signed-off-by: Martin Wilck <mwilck at suse.com>
---
libmultipath/wwids.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/libmultipath/wwids.c b/libmultipath/wwids.c
index ef748125..f69ed6f5 100644
--- a/libmultipath/wwids.c
+++ b/libmultipath/wwids.c
@@ -7,6 +7,7 @@
#include <sys/types.h>
#include <sys/stat.h>
+#include "util.h"
#include "checkers.h"
#include "vector.h"
#include "structs.h"
@@ -87,7 +88,8 @@ write_out_wwid(int fd, char *wwid) {
int
replace_wwids(vector mp)
{
- int i, fd, can_write;
+ int i, can_write;
+ long fd;
struct multipath * mpp;
size_t len;
int ret = -1;
@@ -99,6 +101,8 @@ replace_wwids(vector mp)
pthread_cleanup_pop(1);
if (fd < 0)
goto out;
+
+ pthread_cleanup_push(close_fd, (void*)fd);
if (!can_write) {
condlog(0, "cannot replace wwids. wwids file is read-only");
goto out_file;
@@ -132,7 +136,7 @@ replace_wwids(vector mp)
}
ret = 0;
out_file:
- close(fd);
+ pthread_cleanup_pop(1);
out:
return ret;
}
--
2.23.0
More information about the dm-devel
mailing list