diff --git a/app/src/main/java/com/topjohnwu/magisk/arch/BaseMainActivity.kt b/app/src/main/java/com/topjohnwu/magisk/arch/BaseMainActivity.kt index fafd9e11e..58130f9d7 100644 --- a/app/src/main/java/com/topjohnwu/magisk/arch/BaseMainActivity.kt +++ b/app/src/main/java/com/topjohnwu/magisk/arch/BaseMainActivity.kt @@ -9,6 +9,7 @@ import androidx.databinding.ViewDataBinding import androidx.lifecycle.lifecycleScope import com.topjohnwu.magisk.BuildConfig.APPLICATION_ID import com.topjohnwu.magisk.R +import com.topjohnwu.magisk.StubApk import com.topjohnwu.magisk.core.Config import com.topjohnwu.magisk.core.Const import com.topjohnwu.magisk.core.JobService @@ -95,10 +96,19 @@ abstract class BaseMainActivity : NavigationActivity< } private fun preLoad() { - val prevPkg = intent.getStringExtra(Const.Key.PREV_PKG) + val prevPkg = intent.getStringExtra(Const.Key.PREV_PKG)?.let { + // Make sure the calling package matches (prevent DoS) + if (it == callingPackage) + it + else + null + } Config.load(prevPkg) handleRepackage(prevPkg) + if (prevPkg != null) { + StubApk.restartProcess(this) + } Notifications.setup(this) JobService.schedule(this) Shortcuts.setupDynamic(this) diff --git a/app/src/main/java/com/topjohnwu/magisk/core/Config.kt b/app/src/main/java/com/topjohnwu/magisk/core/Config.kt index 9272fc354..bb3e73156 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/Config.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/Config.kt @@ -163,7 +163,7 @@ object Config : PreferenceConfig, DBConfig { fun load(pkg: String?) { // Only try to load prefs when fresh install and a previous package name is set if (pkg != null && prefs.all.isEmpty()) runCatching { - context.contentResolver.openInputStream(Provider.PREFS_URI(pkg))?.use { + context.contentResolver.openInputStream(Provider.preferencesUri(pkg))?.use { prefs.edit { parsePrefs(it) } } } diff --git a/app/src/main/java/com/topjohnwu/magisk/core/Provider.kt b/app/src/main/java/com/topjohnwu/magisk/core/Provider.kt index 2117268c0..3dc6d951e 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/Provider.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/Provider.kt @@ -6,7 +6,6 @@ import android.os.ParcelFileDescriptor import android.os.ParcelFileDescriptor.MODE_READ_ONLY import com.topjohnwu.magisk.core.base.BaseProvider import com.topjohnwu.magisk.core.su.SuCallbackHandler -import java.io.File class Provider : BaseProvider() { @@ -17,17 +16,13 @@ class Provider : BaseProvider() { override fun openFile(uri: Uri, mode: String): ParcelFileDescriptor? { return when (uri.encodedPath ?: return null) { - "/apk_file" -> ParcelFileDescriptor.open(File(context!!.packageCodePath), MODE_READ_ONLY) "/prefs_file" -> ParcelFileDescriptor.open(Config.prefsFile, MODE_READ_ONLY) else -> super.openFile(uri, mode) } } companion object { - fun APK_URI(pkg: String) = - Uri.Builder().scheme("content").authority("$pkg.provider").path("apk_file").build() - - fun PREFS_URI(pkg: String) = + fun preferencesUri(pkg: String): Uri = Uri.Builder().scheme("content").authority("$pkg.provider").path("prefs_file").build() } } diff --git a/app/src/main/java/com/topjohnwu/magisk/core/tasks/HideAPK.kt b/app/src/main/java/com/topjohnwu/magisk/core/tasks/HideAPK.kt index fa8ff1621..e51f32fd7 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/tasks/HideAPK.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/tasks/HideAPK.kt @@ -97,10 +97,10 @@ object HideAPK { Config.suManager = if (pkg == APPLICATION_ID) "" else pkg val self = activity.packageName val flag = Intent.FLAG_GRANT_READ_URI_PERMISSION - activity.grantUriPermission(pkg, Provider.APK_URI(self), flag) - activity.grantUriPermission(pkg, Provider.PREFS_URI(self), flag) + activity.grantUriPermission(pkg, Provider.preferencesUri(self), flag) intent.putExtra(Const.Key.PREV_PKG, self) - activity.startActivity(intent) + intent.flags = 0 + activity.startActivityForResult(intent, Int.MAX_VALUE) activity.finish() }