Skip to content

Commit

Permalink
Move su request path to magisk tmp
Browse files Browse the repository at this point in the history
  • Loading branch information
vvb2060 authored and topjohnwu committed Jun 20, 2023
1 parent 2359cfc commit 9929b25
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 39 deletions.
55 changes: 21 additions & 34 deletions app/src/main/java/com/topjohnwu/magisk/core/su/SuRequestHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import timber.log.Timber
import java.io.DataOutputStream
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.util.concurrent.TimeUnit
Expand All @@ -22,7 +23,7 @@ class SuRequestHandler(
private val policyDB: PolicyDao
) {

private lateinit var output: DataOutputStream
private lateinit var output: File
private lateinit var policy: SuPolicy
lateinit var pkgInfo: PackageInfo
private set
Expand Down Expand Up @@ -52,42 +53,27 @@ class SuRequestHandler(
return true
}

private fun close() {
if (::output.isInitialized)
runCatching { output.close() }
}

private suspend fun init(intent: Intent): Boolean {
val uid = intent.getIntExtra("uid", -1)
if (uid <= 0) {
return false;
}
policy = SuPolicy(uid)
val pid = intent.getIntExtra("pid", -1)
if (pid <= 0) {
return false;
val fifo = intent.getStringExtra("fifo")
if (uid <= 0 || pid <= 0 || fifo == null) {
return false
}
val fifo = intent.getStringExtra("fifo") ?: "/dev/socket/magisk_su_request_$pid"

output = File(fifo)
policy = SuPolicy(uid)
try {
output = DataOutputStream(FileOutputStream(fifo))
try {
pkgInfo = pm.getPackageInfo(uid, pid) ?: PackageInfo().apply {
val name = pm.getNameForUid(uid) ?: throw PackageManager.NameNotFoundException()
// We only fill in sharedUserId and leave other fields uninitialized
sharedUserId = name.split(":")[0]
}
} catch (e: PackageManager.NameNotFoundException) {
Timber.e(e)
respond(SuPolicy.DENY, -1)
return false
pkgInfo = pm.getPackageInfo(uid, pid) ?: PackageInfo().apply {
val name = pm.getNameForUid(uid) ?: throw PackageManager.NameNotFoundException()
// We only fill in sharedUserId and leave other fields uninitialized
sharedUserId = name.split(":")[0]
}
return true
} catch (e: IOException) {
} catch (e: PackageManager.NameNotFoundException) {
Timber.e(e)
close()
respond(SuPolicy.DENY, -1)
return false
}
return output.canWrite()
}

suspend fun respond(action: Int, time: Int) {
Expand All @@ -102,14 +88,15 @@ class SuRequestHandler(

withContext(Dispatchers.IO) {
try {
output.writeInt(policy.policy)
output.flush()
DataOutputStream(FileOutputStream(output)).use {
it.writeInt(policy.policy)
it.flush()
}
} catch (e: IOException) {
Timber.e(e)
} finally {
close()
if (until >= 0)
policyDB.update(policy)
}
if (until >= 0) {
policyDB.update(policy)
}
}
}
Expand Down
8 changes: 4 additions & 4 deletions native/src/core/su/connect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@

#include <base.hpp>
#include <selinux.hpp>
#include <magisk.hpp>

#include "su.hpp"

extern int SDK_INT;

using namespace std;

#define CALL_PROVIDER \
Expand Down Expand Up @@ -193,14 +192,15 @@ void app_notify(const su_context &ctx) {
int app_request(const su_context &ctx) {
// Create FIFO
char fifo[64];
ssprintf(fifo, sizeof(fifo), "/dev/socket/magisk_su_request_%d", ctx.pid);
ssprintf(fifo, sizeof(fifo), "%s/" INTLROOT "/su_request_%d", MAGISKTMP.data(), ctx.pid);
mkfifo(fifo, 0600);
chown(fifo, ctx.info->mgr_uid, ctx.info->mgr_uid);
setfilecon(fifo, MAGISK_FILE_CON);

// Send request
vector<Extra> extras;
extras.reserve(2);
extras.reserve(3);
extras.emplace_back("fifo", fifo);
extras.emplace_back("uid", ctx.info->eval_uid);
extras.emplace_back("pid", ctx.pid);
exec_cmd("request", extras, ctx.info, false);
Expand Down
2 changes: 1 addition & 1 deletion native/src/init/mount.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ void MagiskInit::setup_tmp(const char *path) {
LOGD("Setup Magisk tmp at %s\n", path);
chdir("/data");

xmkdir(INTLROOT, 0755);
xmkdir(INTLROOT, 0711);
xmkdir(MIRRDIR, 0);
xmkdir(BLOCKDIR, 0);
xmkdir(WORKERDIR, 0);
Expand Down

0 comments on commit 9929b25

Please sign in to comment.