[git commit] stat: fix printing selinux context and null-dereference

Denys Vlasenko vda.linux at googlemail.com
Fri Jun 27 12:08:29 UTC 2014


commit: http://git.busybox.net/busybox/commit/?id=1b487ea8a69ac90b530e9ccd161a5b1b21e604c7
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

busybox stat tries to always print the selinux context, even if it
is not requested which leads to a segmentation fault due to
dereferencing a null-pointer.

This also changes the format-string used to print the context to
so it actually produces useful output.

Signed-off-by: Michael Gernoth <michael at gernoth.net>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 coreutils/stat.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/coreutils/stat.c b/coreutils/stat.c
index dc9d81c..769fac0 100644
--- a/coreutils/stat.c
+++ b/coreutils/stat.c
@@ -655,7 +655,7 @@ static bool do_stat(const char *filename, const char *format)
 		);
 # if ENABLE_SELINUX
 		if (option_mask32 & OPT_SELINUX)
-			printf(" %lc\n", *scontext);
+			printf(" %s\n", scontext);
 		else
 			bb_putchar('\n');
 # endif
@@ -700,7 +700,8 @@ static bool do_stat(const char *filename, const char *format)
 		       (unsigned long) statbuf.st_gid,
 		       (gw_ent != NULL) ? gw_ent->gr_name : "UNKNOWN");
 # if ENABLE_SELINUX
-		printf("   S_Context: %lc\n", *scontext);
+		if (option_mask32 & OPT_SELINUX)
+			printf("   S_Context: %s\n", scontext);
 # endif
 		printf("Access: %s\n", human_time(statbuf.st_atime));
 		printf("Modify: %s\n", human_time(statbuf.st_mtime));


More information about the busybox-cvs mailing list