diff --git a/libselinux/man/man3/selinux_set_callback.3 b/libselinux/man/man3/selinux_set_callback.3
index 75f49b06d836..124754a1854b 100644
--- a/libselinux/man/man3/selinux_set_callback.3
+++ b/libselinux/man/man3/selinux_set_callback.3
@@ -122,6 +122,9 @@ None.
.SH "ERRORS"
None.
.
+.SH "NOTES"
+Log messages don't end with a newline.
+.
.SH "AUTHOR"
Eamon Walsh <ewalsh@xxxxxxxxxxxxx>
.
diff --git a/libselinux/src/avc.c b/libselinux/src/avc.c
index 8d5983a2fe0c..e4f7f64fa913 100644
--- a/libselinux/src/avc.c
+++ b/libselinux/src/avc.c
@@ -175,7 +175,7 @@ static int avc_init_internal(const char *prefix,
rc = sidtab_init(&avc_sidtab);
if (rc) {
avc_log(SELINUX_ERROR,
- "%s: unable to initialize SID table\n",
+ "%s: unable to initialize SID table",
avc_prefix);
goto out;
}
@@ -183,7 +183,7 @@ static int avc_init_internal(const char *prefix,
avc_audit_buf = (char *)avc_malloc(AVC_AUDIT_BUFSIZE);
if (!avc_audit_buf) {
avc_log(SELINUX_ERROR,
- "%s: unable to allocate audit buffer\n",
+ "%s: unable to allocate audit buffer",
avc_prefix);
rc = -1;
goto out;
@@ -193,7 +193,7 @@ static int avc_init_internal(const char *prefix,
new = avc_malloc(sizeof(*new));
if (!new) {
avc_log(SELINUX_WARNING,
- "%s: warning: only got %d av entries\n",
+ "%s: warning: only got %d av entries",
avc_prefix, i);
break;
}
@@ -206,7 +206,7 @@ static int avc_init_internal(const char *prefix,
rc = security_getenforce();
if (rc < 0) {
avc_log(SELINUX_ERROR,
- "%s: could not determine enforcing mode: %m\n",
+ "%s: could not determine enforcing mode: %m",
avc_prefix);
goto out;
}
@@ -216,7 +216,7 @@ static int avc_init_internal(const char *prefix,
rc = selinux_status_open(0);
if (rc < 0) {
avc_log(SELINUX_ERROR,
- "%s: could not open selinux status page: %d (%m)\n",
+ "%s: could not open selinux status page: %d (%m)",
avc_prefix, errno);
goto out;
}
@@ -292,7 +292,7 @@ void avc_av_stats(void)
avc_release_lock(avc_lock);
avc_log(SELINUX_INFO, "%s: %u AV entries and %d/%d buckets used, "
- "longest chain length %d\n", avc_prefix,
+ "longest chain length %d", avc_prefix,
avc_cache.active_nodes,
slots_used, AVC_CACHE_SLOTS, max_chain_len);
}
@@ -473,7 +473,7 @@ static int avc_insert(security_id_t ssid, security_id_t tsid,
if (ae->avd.seqno < avc_cache.latest_notif) {
avc_log(SELINUX_WARNING,
- "%s: seqno %u < latest_notif %u\n", avc_prefix,
+ "%s: seqno %u < latest_notif %u", avc_prefix,
ae->avd.seqno, avc_cache.latest_notif);
errno = EAGAIN;
rc = -1;
@@ -613,7 +613,7 @@ static int avc_ratelimit(void)
avc_release_lock(ratelimit_lock);
if (lost) {
avc_log(SELINUX_WARNING,
- "%s: %d messages suppressed.\n", avc_prefix,
+ "%s: %d messages suppressed.", avc_prefix,
lost);
}
rc = 1;
diff --git a/libselinux/src/avc_internal.c b/libselinux/src/avc_internal.c
index 71a1357bc564..a5d24b16d063 100644
--- a/libselinux/src/avc_internal.c
+++ b/libselinux/src/avc_internal.c
@@ -66,7 +66,7 @@ int avc_process_setenforce(int enforcing)
avc_enforcing = enforcing;
if (avc_enforcing && (rc = avc_ss_reset(0)) < 0) {
avc_log(SELINUX_ERROR,
- "%s: cache reset returned %d (errno %d)\n",
+ "%s: cache reset returned %d (errno %d)",
avc_prefix, rc, errno);
return rc;
}
@@ -86,7 +86,7 @@ int avc_process_policyload(uint32_t seqno)
rc = avc_ss_reset(seqno);
if (rc < 0) {
avc_log(SELINUX_ERROR,
- "%s: cache reset returned %d (errno %d)\n",
+ "%s: cache reset returned %d (errno %d)",
avc_prefix, rc, errno);
return rc;
}
@@ -157,7 +157,7 @@ static int avc_netlink_receive(void *buf, unsigned buflen, int blocking)
return -1;
}
else if (rc < 1) {
- avc_log(SELINUX_ERROR, "%s: netlink poll: error %d\n",
+ avc_log(SELINUX_ERROR, "%s: netlink poll: error %d",
avc_prefix, errno);
return rc;
}
@@ -169,21 +169,21 @@ static int avc_netlink_receive(void *buf, unsigned buflen, int blocking)
if (nladdrlen != sizeof nladdr) {
avc_log(SELINUX_WARNING,
- "%s: warning: netlink address truncated, len %u?\n",
+ "%s: warning: netlink address truncated, len %u?",
avc_prefix, nladdrlen);
return -1;
}
if (nladdr.nl_pid) {
avc_log(SELINUX_WARNING,
- "%s: warning: received spoofed netlink packet from: %u\n",
+ "%s: warning: received spoofed netlink packet from: %u",
avc_prefix, nladdr.nl_pid);
return -1;
}
if (rc == 0) {
avc_log(SELINUX_WARNING,
- "%s: warning: received EOF on netlink socket\n",
+ "%s: warning: received EOF on netlink socket",
avc_prefix);
errno = EBADFD;
return -1;
@@ -191,7 +191,7 @@ static int avc_netlink_receive(void *buf, unsigned buflen, int blocking)
if (nlh->nlmsg_flags & MSG_TRUNC || nlh->nlmsg_len > (unsigned)rc) {
avc_log(SELINUX_WARNING,
- "%s: warning: incomplete netlink message\n",
+ "%s: warning: incomplete netlink message",
avc_prefix);
return -1;
}
@@ -214,7 +214,7 @@ static int avc_netlink_process(void *buf)
errno = -err->error;
avc_log(SELINUX_ERROR,
- "%s: netlink error: %d\n", avc_prefix, errno);
+ "%s: netlink error: %d", avc_prefix, errno);
return -1;
}
@@ -236,7 +236,7 @@ static int avc_netlink_process(void *buf)
default:
avc_log(SELINUX_WARNING,
- "%s: warning: unknown netlink message %d\n",
+ "%s: warning: unknown netlink message %d",
avc_prefix, nlh->nlmsg_type);
}
return 0;
@@ -257,7 +257,7 @@ int avc_netlink_check_nb(void)
continue;
else {
avc_log(SELINUX_ERROR,
- "%s: netlink recvfrom: error %d\n",
+ "%s: netlink recvfrom: error %d",
avc_prefix, errno);
return rc;
}
@@ -282,7 +282,7 @@ void avc_netlink_loop(void)
continue;
else {
avc_log(SELINUX_ERROR,
- "%s: netlink recvfrom: error %d\n",
+ "%s: netlink recvfrom: error %d",
avc_prefix, errno);
break;
}
@@ -297,7 +297,7 @@ void avc_netlink_loop(void)
fd = -1;
avc_netlink_trouble = 1;
avc_log(SELINUX_ERROR,
- "%s: netlink thread: errors encountered, terminating\n",
+ "%s: netlink thread: errors encountered, terminating",
avc_prefix);
}
@@ -308,7 +308,7 @@ int avc_netlink_acquire_fd(void)
rc = avc_netlink_open(0);
if (rc < 0) {
avc_log(SELINUX_ERROR,
- "%s: could not open netlink socket: %d (%m)\n",
+ "%s: could not open netlink socket: %d (%m)",
avc_prefix, errno);
return rc;
}
diff --git a/libselinux/src/callbacks.c b/libselinux/src/callbacks.c
index 469c4055f4d7..6850df5fdfe0 100644
--- a/libselinux/src/callbacks.c
+++ b/libselinux/src/callbacks.c
@@ -21,6 +21,12 @@ default_selinux_log(int type __attribute__((unused)), const char *fmt, ...)
va_start(ap, fmt);
rc = vfprintf(stderr, fmt, ap);
va_end(ap);
+ if (rc > 0) {
+ if (fputc('\n', stderr) != EOF)
+ rc++;
+ else
+ rc = EOF;
+ }
return rc;
}