From c61d6fb6654dc12fa87c60c6f1eb57a4392995c2 Mon Sep 17 00:00:00 2001 From: 5ec1cff <56485584+5ec1cff@users.noreply.github.com> Date: Sat, 15 Nov 2025 19:52:05 +0800 Subject: [PATCH] kernel: file_wrapper: copy mode of original inode Bionic uses fstat to determine whether an fd is a tty and set proper buffering flags, so we also need to set the wrapper file's inode mode to the original inode mode. see: https://cs.android.com/android/platform/superproject/main/+/main:bionic/libc/upstream-openbsd/lib/libc/stdio/makebuf.c;l=61-95;drc=9a4b68e20d617b2cb3355071521f16e8c3d538df --- kernel/supercalls.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel/supercalls.c b/kernel/supercalls.c index cf8904ce..bc867c44 100644 --- a/kernel/supercalls.c +++ b/kernel/supercalls.c @@ -463,6 +463,8 @@ static int do_get_wrapper_fd(void __user *arg) { struct file* pf = fget(ret); struct inode* wrapper_inode = file_inode(pf); + // copy original inode mode + wrapper_inode->i_mode = file_inode(f)->i_mode; struct inode_security_struct *sec = selinux_inode(wrapper_inode); if (sec) { sec->sid = ksu_file_sid;