From c9348e18f3cdd52a7cb1586e03a55cefac08d849 Mon Sep 17 00:00:00 2001 From: Phil Sutter Date: Tue, 9 Apr 2019 14:21:25 +0200 Subject: 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 Signed-off-by: Florian Westphal --- libebtc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'libebtc.c') 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; -- cgit v1.2.3