[ebtables PATCH] Fix locking if LOCKDIR does not exist

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The previous conversion to using flock() missed a crucial bit of code
which tries to create LOCKDIR once in case opening the lock failed -
This patch reestablishes the old behaviour.

Reported-by: Tangchen (UVP) <tang.chen@xxxxxxxxxx>
Fixes: 6a826591878db ("Use flock() for --concurrent option")
Signed-off-by: Phil Sutter <phil@xxxxxx>
---
 libebtc.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/libebtc.c b/libebtc.c
index c0ff8ccfa66db..d47424872dc51 100644
--- a/libebtc.c
+++ b/libebtc.c
@@ -143,10 +143,16 @@ int use_lockfd;
  * or -2 on any other error. */
 static int lock_file()
 {
-	int fd = open(LOCKFILE, O_CREAT, 00600);
-
-	if (fd < 0)
-		return -2;
+	int fd, try = 0;
+
+retry:
+	fd = open(LOCKFILE, O_CREAT, 00600);
+	if (fd < 0) {
+		if (try == 1 || mkdir(LOCKDIR, 00700))
+			return -2;
+		try = 1;
+		goto retry;
+	}
 	return flock(fd, LOCK_EX);
 }
 
-- 
2.15.1

--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux