summaryrefslogtreecommitdiffstats
path: root/libebtc.c
diff options
context:
space:
mode:
authorPhil Sutter <phil@nwl.cc>2019-04-09 14:21:25 +0200
committerFlorian Westphal <fw@strlen.de>2019-04-09 14:48:39 +0200
commitc9348e18f3cdd52a7cb1586e03a55cefac08d849 (patch)
tree49cbcf6b419616fc9a96951da58d2166d51aa7a2 /libebtc.c
parentefedf070da42f2facb37cf3ef6028708022a3376 (diff)
Fix segfault with missing lockfile directory
Apparently, dirname() modifies the buffer passed to it. Given a read-only location, this leads to a segfault. Use a buffer initialized (and tailored) to the content of LOCKFILE macro at compile-time instead. Fixes: f45756c1ca3b5 ("Allow customizing lockfile location at configure time") Signed-off-by: Phil Sutter <phil@nwl.cc> Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'libebtc.c')
-rw-r--r--libebtc.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/libebtc.c b/libebtc.c
index f2a2b50..2a9ab87 100644
--- a/libebtc.c
+++ b/libebtc.c
@@ -140,12 +140,13 @@ int use_lockfd;
* or -2 on any other error. */
static int lock_file()
{
+ char pathbuf[] = LOCKFILE;
int fd, try = 0;
retry:
fd = open(LOCKFILE, O_CREAT, 00600);
if (fd < 0) {
- if (try == 1 || mkdir(dirname(LOCKFILE), 00700))
+ if (try == 1 || mkdir(dirname(pathbuf), 00700))
return -2;
try = 1;
goto retry;