From ec3af0a4fb6ba94512ba62da6065baedc25105d9 Mon Sep 17 00:00:00 2001 From: 2xsec Date: Tue, 23 Oct 2018 11:30:12 +0900 Subject: [PATCH] storage_utils: add error handling Signed-off-by: 2xsec --- src/lxc/storage/storage_utils.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/lxc/storage/storage_utils.c b/src/lxc/storage/storage_utils.c index 67da0f9be..2584b556c 100644 --- a/src/lxc/storage/storage_utils.c +++ b/src/lxc/storage/storage_utils.c @@ -153,12 +153,18 @@ int blk_getsize(struct lxc_storage *bdev, uint64_t *size) const char *src; src = lxc_storage_get_path(bdev->src, bdev->type); - fd = open(src, O_RDONLY); - if (fd < 0) + + fd = open(src, O_RDONLY | O_CLOEXEC); + if (fd < 0) { + SYSERROR("Failed to open \"%s\"", src); return -1; + } /* size of device in bytes */ ret = ioctl(fd, BLKGETSIZE64, size); + if (ret < 0) + SYSERROR("Failed to get block size of dev-src"); + close(fd); return ret; } @@ -195,11 +201,16 @@ int detect_fs(struct lxc_storage *bdev, char *type, int len) srcdev = lxc_storage_get_path(bdev->src, bdev->type); ret = pipe(p); - if (ret < 0) + if (ret < 0) { + SYSERROR("Failed to create pipe"); return -1; + } - if ((pid = fork()) < 0) + pid = fork(); + if (pid < 0) { + SYSERROR("Failed to fork process"); return -1; + } if (pid > 0) { int status; @@ -409,8 +420,10 @@ const char *linkderef(const char *path, char *dest) ssize_t ret; ret = stat(path, &sbuf); - if (ret < 0) + if (ret < 0) { + SYSERROR("Failed to get status of file - \"%s\"", path); return NULL; + } if (!S_ISLNK(sbuf.st_mode)) return path; @@ -517,20 +530,22 @@ int storage_destroy_wrapper(void *data) struct lxc_conf *conf = data; if (setgid(0) < 0) { - ERROR("Failed to setgid to 0"); + SYSERROR("Failed to setgid to 0"); return -1; } if (setgroups(0, NULL) < 0) - WARN("Failed to clear groups"); + SYSWARN("Failed to clear groups"); if (setuid(0) < 0) { - ERROR("Failed to setuid to 0"); + SYSERROR("Failed to setuid to 0"); return -1; } - if (!storage_destroy(conf)) + if (!storage_destroy(conf)) { + ERROR("Failed to destroy storage"); return -1; + } return 0; } -- 2.39.2