From: Kadin Sayani Date: Wed, 3 Sep 2025 22:45:20 +0000 (-0600) Subject: lxccontainer: check if target exists before remove in create_mount_target() X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fba76ea65475028cea56181c8ae13d93525a1ff2;p=thirdparty%2Flxc.git lxccontainer: check if target exists before remove in create_mount_target() Signed-off-by: Kadin Sayani --- diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index 6c80065a6..0f41411d8 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -4911,6 +4911,7 @@ WRAP_API_2(bool, lxcapi_restore, char *, bool) static int create_mount_target(const char *dest, mode_t st_mode) { char *dirdup, *destdirname; + struct stat sb; int ret; dirdup = strdup(dest); @@ -4928,7 +4929,21 @@ static int create_mount_target(const char *dest, mode_t st_mode) } free(dirdup); - (void)remove(dest); + if (stat(dest, &sb) == 0) { + if (S_ISDIR(st_mode) && S_ISDIR(sb.st_mode)) + return 0; + + if (S_ISREG(st_mode) && S_ISREG(sb.st_mode)) + return 0; + + if (remove(dest) < 0) { + SYSERROR("Failed to remove existing mount target \"%s\"", dest); + return -1; + } + } else if (errno != ENOENT) { + SYSERROR("Failed to stat existing mount target \"%s\"", dest); + return -1; + } if (S_ISDIR(st_mode)) ret = mkdir(dest, 0000);