Unverified Commit 28968d7d by Wolfgang Bumiller Committed by Christian Brauner

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: 's avatarWolfgang Bumiller <w.bumiller@proxmox.com>
parent 11c52cb4
...@@ -241,7 +241,7 @@ static int apparmor_process_label_set(const char *inlabel, struct lxc_conf *conf ...@@ -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); ret = lsm_process_label_set_at(label_fd, label, on_exec);
close(label_fd); close(label_fd);
if (ret < 0) { if (ret < 0) {
SYSERROR("Failed to change apparmor profile to %s", label); ERROR("Failed to change apparmor profile to %s", label);
return -1; return -1;
} }
......
...@@ -142,18 +142,20 @@ int lsm_process_label_set_at(int label_fd, const char *label, bool on_exec) ...@@ -142,18 +142,20 @@ int lsm_process_label_set_at(int label_fd, const char *label, bool on_exec)
if (on_exec) { if (on_exec) {
ERROR("Changing AppArmor profile on exec not supported"); ERROR("Changing AppArmor profile on exec not supported");
return -EINVAL; return -1;
} }
len = strlen(label) + strlen("changeprofile ") + 1; len = strlen(label) + strlen("changeprofile ") + 1;
command = malloc(len); command = malloc(len);
if (!command) if (!command)
return -1; goto on_error;
ret = snprintf(command, len, "changeprofile %s", label); ret = snprintf(command, len, "changeprofile %s", label);
if (ret < 0 || (size_t)ret >= len) { if (ret < 0 || (size_t)ret >= len) {
int saved_errno = errno;
free(command); free(command);
return -1; errno = saved_errno;
goto on_error;
} }
ret = lxc_write_nointr(label_fd, command, len - 1); 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) ...@@ -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) { } else if (strcmp(name, "SELinux") == 0) {
ret = lxc_write_nointr(label_fd, label, strlen(label)); ret = lxc_write_nointr(label_fd, label, strlen(label));
} else { } else {
ret = -EINVAL; errno = EINVAL;
ret = -1;
} }
if (ret < 0) { if (ret < 0) {
on_error:
SYSERROR("Failed to set %s label \"%s\"", name, label); SYSERROR("Failed to set %s label \"%s\"", name, label);
return -1; return -1;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment