diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp
index b4eb010a4ae1c94227c1db6e1f72bc9275b7eaeb..407b96abb67495a11c5f020943764d0021226797 100644
--- a/src/libs/utils/fileutils.cpp
+++ b/src/libs/utils/fileutils.cpp
@@ -100,14 +100,29 @@ bool FileUtils::removeRecursively(const QString &filePath, QString *error)
     QFile::setPermissions(filePath, fileInfo.permissions() | QFile::WriteUser);
     if (fileInfo.isDir()) {
         QDir dir(filePath);
+        dir = dir.canonicalPath();
+        if (dir.isRoot()) {
+            if (error) {
+                *error = QCoreApplication::translate("Utils::FileUtils",
+                    "Refusing to remove root directory.");
+            }
+            return false;
+        }
+        if (dir.path() == QDir::home().canonicalPath()) {
+            if (error) {
+                *error = QCoreApplication::translate("Utils::FileUtils",
+                    "Refusing to remove your home directory.");
+            }
+            return false;
+        }
+
         QStringList fileNames = dir.entryList(QDir::Files | QDir::Hidden
                                               | QDir::System | QDir::Dirs | QDir::NoDotAndDotDot);
         foreach (const QString &fileName, fileNames) {
             if (!removeRecursively(filePath + QLatin1Char('/') + fileName, error))
                 return false;
         }
-        dir.cdUp();
-        if (!dir.rmdir(fileInfo.fileName())) {
+        if (!QDir::root().rmdir(dir.path())) {
             if (error) {
                 *error = QCoreApplication::translate("Utils::FileUtils", "Failed to remove directory '%1'.")
                         .arg(QDir::toNativeSeparators(filePath));