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