From 692c41a31cd6f54e13eca332dde03adf96f8a623 Mon Sep 17 00:00:00 2001 From: Zhou Kang Date: Sat, 12 Aug 2023 07:00:52 +0000 Subject: [PATCH] fix when the file is rto --- src/binfmt_rto/binfmt_rto.c | 5 ++++- src/binfmt_rto/loader_device.c | 6 +++--- src/binfmt_rto/loader_device.h | 4 ++-- src/binfmt_rto/main.c | 3 +++ 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/binfmt_rto/binfmt_rto.c b/src/binfmt_rto/binfmt_rto.c index ff38261..2167c9c 100644 --- a/src/binfmt_rto/binfmt_rto.c +++ b/src/binfmt_rto/binfmt_rto.c @@ -1176,7 +1176,10 @@ static int load_elf_binary(struct linux_binprm *bprm) retval = -ENOEXEC; /* close feature to rmmod this ko */ - if (!use_rto || !IS_SYSBOOST_RTO(bprm->file->f_inode)) { + if (!use_rto) { + goto out; + } + if (!is_rto_format && !IS_SYSBOOST_RTO_SYMBOLIC_LINK(bprm->file->f_inode)) { goto out; } pr_info("lyt enter rto\n"); diff --git a/src/binfmt_rto/loader_device.c b/src/binfmt_rto/loader_device.c index 3d39fb2..9e1c922 100644 --- a/src/binfmt_rto/loader_device.c +++ b/src/binfmt_rto/loader_device.c @@ -205,12 +205,12 @@ static int do_loader_ioctl(char *rto_path) inode = file->f_inode; spin_lock(&inode->i_lock); - if (IS_SYSBOOST_RTO(inode)) { + if (IS_SYSBOOST_RTO_SYMBOLIC_LINK(inode)) { iput(inode); - inode->i_flags &= ~S_SYSBOOST_RTO; + inode->i_flags &= ~S_SYSBOOST_RTO_SYMBOLIC_LINK; } else { ihold(inode); - inode->i_flags |= S_SYSBOOST_RTO; + inode->i_flags |= S_SYSBOOST_RTO_SYMBOLIC_LINK; } pr_info("lyt inode: 0x%pK, i_flags: 0x%x, i_count: %d\n", inode, inode->i_flags, atomic_read(&inode->i_count)); diff --git a/src/binfmt_rto/loader_device.h b/src/binfmt_rto/loader_device.h index 6adc92d..a446fce 100644 --- a/src/binfmt_rto/loader_device.h +++ b/src/binfmt_rto/loader_device.h @@ -19,5 +19,5 @@ struct loaded_rto *find_loaded_rto(struct inode *inode); int __init loader_device_init(void); void __exit loader_device_exit(void); -#define S_SYSBOOST_RTO (1 << 31) /* has rto cache */ -#define IS_SYSBOOST_RTO(inode) ((inode)->i_flags & S_SYSBOOST_RTO) +#define S_SYSBOOST_RTO_SYMBOLIC_LINK (1 << 31) /* has rto cache */ +#define IS_SYSBOOST_RTO_SYMBOLIC_LINK(inode) ((inode)->i_flags & S_SYSBOOST_RTO_SYMBOLIC_LINK) diff --git a/src/binfmt_rto/main.c b/src/binfmt_rto/main.c index 8ae3ca2..7fe908c 100644 --- a/src/binfmt_rto/main.c +++ b/src/binfmt_rto/main.c @@ -49,9 +49,12 @@ static int __init sysboost_loader_init(void) if (ret) goto error_rto; +// TODO: x86 check_vma_flags found fail +#ifdef CONFIG_ARM64 ret = rto_populate_init(); if (ret) goto error_rto; +#endif ret = init_rto_binfmt(); if (ret) -- Gitee