Several minor fixes/improvements

This commit is contained in:
topjohnwu
2025-10-02 02:46:18 -07:00
committed by John Wu
parent 07cc85ccb1
commit 7270f5e413
3 changed files with 10 additions and 18 deletions

View File

@@ -75,8 +75,8 @@ impl MagiskD {
let tmp_bb = buf.append_path(get_magisk_tmp()).append_path(BBPATH);
tmp_bb.mkdirs(0o755).ok();
tmp_bb.append_path("busybox");
tmp_bb.follow_link().chmod(0o755).log_ok();
busybox.copy_to(tmp_bb).ok();
tmp_bb.follow_link().chmod(0o755).log_ok();
// Install busybox applets
Command::new(&tmp_bb)

View File

@@ -2,7 +2,7 @@ use crate::consts::{LOG_PIPE, LOGFILE};
use crate::ffi::get_magisk_tmp;
use crate::logging::LogFile::{Actual, Buffer};
use base::{
FsPathBuilder, LogLevel, LoggedResult, ReadExt, Utf8CStr, Utf8CStrBuf, WriteExt,
FsPathBuilder, LogLevel, LoggedResult, ReadExt, ResultExt, Utf8CStr, Utf8CStrBuf, WriteExt,
const_format::concatcp, cstr, libc, new_daemon_thread, raw_cstr, update_logger,
};
use bytemuck::{Pod, Zeroable, bytes_of, write_zeroes};
@@ -328,7 +328,7 @@ pub fn start_log_daemon() {
}
let _: LoggedResult<()> = try {
path.mkfifo(0o666)?;
path.mkfifo(0o666).log_ok();
chown(path.as_utf8_cstr(), Some(Uid::from(0)), Some(Gid::from(0)))?;
let read = path.open(OFlag::O_RDWR | OFlag::O_CLOEXEC)?;
let write = path.open(OFlag::O_WRONLY | OFlag::O_CLOEXEC)?;

View File

@@ -234,14 +234,11 @@ int su_client_main(int argc, char *argv[]) {
if (atty) {
// We need a PTY. Get one.
write_int(fd, 1);
int ptmx = recv_fd(fd);
setup_sighandlers(sighandler);
// If stdin is not a tty, and if we pump to ptmx, our process may intercept the input to ptmx and
// output to stdout, which cause the target process lost input.
pump_tty(ptmx, atty & ATTY_IN);
} else {
write_int(fd, 0);
}
// Get the exit code
@@ -335,9 +332,10 @@ void exec_root_shell(int client, int pid, SuRequest &req, MntNsMode mode) {
int infd = recv_fd(client);
int outfd = recv_fd(client);
int errfd = recv_fd(client);
int ptsfd = -1;
// App need a PTY
if (read_int(client)) {
if (infd < 0 || outfd < 0 || errfd < 0) {
string pts;
string ptmx;
auto magiskpts = get_magisk_tmp() + "/"s SHELLPTS;
@@ -370,24 +368,18 @@ void exec_root_shell(int client, int pid, SuRequest &req, MntNsMode mode) {
// Opening the TTY has to occur after the
// fork() and setsid() so that it becomes
// our controlling TTY and not the daemon's
int ptsfd = xopen(pts_slave.data(), O_RDWR);
if (infd < 0)
infd = ptsfd;
if (outfd < 0)
outfd = ptsfd;
if (errfd < 0)
errfd = ptsfd;
ptsfd = xopen(pts_slave.data(), O_RDWR);
}
// Swap out stdin, stdout, stderr
xdup2(infd, STDIN_FILENO);
xdup2(outfd, STDOUT_FILENO);
xdup2(errfd, STDERR_FILENO);
xdup2(infd < 0 ? ptsfd : infd, STDIN_FILENO);
xdup2(outfd < 0 ? ptsfd : outfd, STDOUT_FILENO);
xdup2(errfd < 0 ? ptsfd : errfd, STDERR_FILENO);
close(infd);
close(outfd);
close(errfd);
close(ptsfd);
close(client);
// Handle namespaces