diff --git a/src/binfmt_rto/binfmt_rto.c b/src/binfmt_rto/binfmt_rto.c index ff3826181874bd95f3216ff2569b71988b5bdd84..2167c9c4ab4f7b7fdf6103c262e8148dd24aaa7b 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 3d39fb26fd879d49b947505d9dfdac8627147f3f..9e1c9222145fd633ecbfd88fc7749f5a42e3d82a 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 6adc92d621e7409755fc0e69e810ecce13f3b40f..a446fceaaff7b69f417ef37d0485193d9aa6132d 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 8ae3ca2273f6afafd8165db24a48369db9ad9cc3..7fe908c4ffa65a2663fc255c226692f4428e3c0e 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)