From: Wolfgang Bumiller Date: Thu, 12 Jul 2018 13:16:40 +0000 (+0200) Subject: lsm: fixup lsm_process_label_set_at return values X-Git-Tag: lxc-3.1.0~192^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c68d5b0dd63ea8226698ae3ff8a5336a60c171c3;p=thirdparty%2Flxc.git lsm: fixup lsm_process_label_set_at return values Always return -1 on error (some code paths returned -1, some returned negative error codes), don't assume 'errno' is set afterwards, as the function already prints errors and not all code paths will have a usable errno value. Signed-off-by: Wolfgang Bumiller --- diff --git a/src/lxc/lsm/apparmor.c b/src/lxc/lsm/apparmor.c index 1507917c8..95b61943e 100644 --- a/src/lxc/lsm/apparmor.c +++ b/src/lxc/lsm/apparmor.c @@ -241,7 +241,7 @@ static int apparmor_process_label_set(const char *inlabel, struct lxc_conf *conf ret = lsm_process_label_set_at(label_fd, label, on_exec); close(label_fd); if (ret < 0) { - SYSERROR("Failed to change apparmor profile to %s", label); + ERROR("Failed to change apparmor profile to %s", label); return -1; } diff --git a/src/lxc/lsm/lsm.c b/src/lxc/lsm/lsm.c index f4500ae20..8d7de2dbe 100644 --- a/src/lxc/lsm/lsm.c +++ b/src/lxc/lsm/lsm.c @@ -142,18 +142,20 @@ int lsm_process_label_set_at(int label_fd, const char *label, bool on_exec) if (on_exec) { ERROR("Changing AppArmor profile on exec not supported"); - return -EINVAL; + return -1; } len = strlen(label) + strlen("changeprofile ") + 1; command = malloc(len); if (!command) - return -1; + goto on_error; ret = snprintf(command, len, "changeprofile %s", label); if (ret < 0 || (size_t)ret >= len) { + int saved_errno = errno; free(command); - return -1; + errno = saved_errno; + goto on_error; } ret = lxc_write_nointr(label_fd, command, len - 1); @@ -161,9 +163,11 @@ int lsm_process_label_set_at(int label_fd, const char *label, bool on_exec) } else if (strcmp(name, "SELinux") == 0) { ret = lxc_write_nointr(label_fd, label, strlen(label)); } else { - ret = -EINVAL; + errno = EINVAL; + ret = -1; } if (ret < 0) { +on_error: SYSERROR("Failed to set %s label \"%s\"", name, label); return -1; }