diff options
author | Phil Sutter <phil@nwl.cc> | 2018-01-15 16:27:31 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2018-01-17 03:32:37 +0100 |
commit | 068ba959c09b1f3697ccc93dc0ab0b2557719776 (patch) | |
tree | cd5cb73b511c26cb5df4b91005a8557d31e4e743 /libebtc.c | |
parent | 6a826591878db3fa9e2a94b87a3d5edd8e0fc442 (diff) | |
download | ebtables-068ba959c09b1f3697ccc93dc0ab0b2557719776.tar.gz |
Fix locking if LOCKDIR does not exist
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>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'libebtc.c')
-rw-r--r-- | libebtc.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -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); } |