On Sat, 27 Sep 2025, Osama Abdelkader wrote:
Fix FIXME comment in display_verbose() by adding null check for cterm
before calling puts(). This prevents a potential segfault when
xmalloc_ttyname(0) returns NULL.
Fixes: potential segfault in sestatus -v mode when terminal name cannot be
determined
Signed-off-by: Osama Abdelkader <[email protected]>
---
selinux/sestatus.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/selinux/sestatus.c b/selinux/sestatus.c
index 098a4d189..cad44632c 100644
--- a/selinux/sestatus.c
+++ b/selinux/sestatus.c
@@ -131,8 +131,9 @@ static void display_verbose(void)
puts("\nFile contexts:");
cterm = xmalloc_ttyname(0);
-//FIXME: if cterm == NULL, we segfault!??
- puts(cterm);
+ if (cterm) {
+ puts(cterm);
+ }
It looks like the style is no braces around single statement blocks.
if (cterm && lgetfilecon(cterm, &con) >= 0) {
printf(COL_FMT "%s\n", "Controlling term:", con);
if (ENABLE_FEATURE_CLEAN_UP)
I thought the controlling terminal would be obtained with ctermid(), but
https://github.com/SELinuxProject/selinux/blob/main/policycoreutils/sestatus/sestatus.c
also uses ttyname(0).
That SELinuxProject code also doesn't print anything between
"File Contexts:" and "Controlling terminal:", so perhaps the best thing
to do here is just delete the puts(cterm) altogether? It might have
been leftover debugging...?
--- a/selinux/sestatus.c
+++ b/selinux/sestatus.c
@@ -131,13 +131,13 @@ static void display_verbose(void)
puts("\nFile contexts:");
cterm = xmalloc_ttyname(0);
-//FIXME: if cterm == NULL, we segfault!??
- puts(cterm);
if (cterm && lgetfilecon(cterm, &con) >= 0) {
printf(COL_FMT "%s\n", "Controlling term:", con);
if (ENABLE_FEATURE_CLEAN_UP)
freecon(con);
}
+ if (ENABLE_FEATURE_CLEAN_UP)
+ free(cterm);
for (i = 0; fc[i] != NULL; i++) {
struct stat stbuf;
_______________________________________________
busybox mailing list
[email protected]
https://lists.busybox.net/mailman/listinfo/busybox