From f27497f0cc8fa4bcec43e61c67ba45487f588cfc Mon Sep 17 00:00:00 2001 From: Ethan Yonker Date: Sun, 9 Feb 2014 11:48:33 -0600 Subject: Fix ext4 wiping when no SELinux contexts are defined Change-Id: I900f42892d47f54b573cc1dbfb551ed2a8f9e8b9 --- partition.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/partition.cpp b/partition.cpp index 3f19b7d61..b597695e2 100644 --- a/partition.cpp +++ b/partition.cpp @@ -53,6 +53,7 @@ extern "C" { } #ifdef HAVE_SELINUX #include "selinux/selinux.h" +#include #endif using namespace std; @@ -1344,17 +1345,25 @@ bool TWPartition::Wipe_EXT4() { return false; #if defined(HAVE_SELINUX) && defined(USE_EXT4) + int ret; + char *secontext = NULL; + gui_print("Formatting %s using make_ext4fs function.\n", Display_Name.c_str()); - if (make_ext4fs(Actual_Block_Device.c_str(), Length, Mount_Point.c_str(), selinux_handle) != 0) { + + if (selabel_lookup(selinux_handle, &secontext, Mount_Point.c_str(), S_IFDIR) < 0) { + LOGINFO("Cannot lookup security context for '%s'\n", Mount_Point.c_str()); + ret = make_ext4fs(Actual_Block_Device.c_str(), Length, Mount_Point.c_str(), NULL); + } else { + ret = make_ext4fs(Actual_Block_Device.c_str(), Length, Mount_Point.c_str(), selinux_handle); + } + if (ret != 0) { LOGERR("Unable to wipe '%s' using function call.\n", Mount_Point.c_str()); return false; } else { - #ifdef HAVE_SELINUX string sedir = Mount_Point + "/lost+found"; PartitionManager.Mount_By_Path(sedir.c_str(), true); rmdir(sedir.c_str()); mkdir(sedir.c_str(), S_IRWXU | S_IRWXG | S_IWGRP | S_IXGRP); - #endif return true; } #else -- cgit v1.2.3