diff mbox series

[ebtables] Fix locking if LOCKDIR does not exist

Message ID 20180115152731.29337-1-phil@nwl.cc
State Accepted
Delegated to: Pablo Neira
Headers show
Series [ebtables] Fix locking if LOCKDIR does not exist | expand

Commit Message

Phil Sutter Jan. 15, 2018, 3:27 p.m. UTC
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@huawei.com>
Fixes: 6a826591878db ("Use flock() for --concurrent option")
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
 libebtc.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

Comments

Pablo Neira Ayuso Jan. 17, 2018, 2:33 a.m. UTC | #1
On Mon, Jan 15, 2018 at 04:27:31PM +0100, Phil Sutter wrote:
> 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.

Applied, thanks Phil.
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox series

Patch

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);
 }