这将继续 setxattr 写入L并随后第四次释放 L。然后我们通过io_uring_setup系统调用分配一个 io_ring_ctx 对象,因此 L\equiv R$。最后,Z 尝试获取一个锁,如果成功,它将导致它创建一个新线程 T,并使用 setxattr 再次分配 R。但是,此时,线程 Y 持有锁,因此 Z 暂停尝试获取它。 第五,Z 通过处理写入保护页漏...
/* fs/xattr.c */ #define __NR_setxattr 5 __SYSCALL(__NR_setxattr, sys_setxattr) #define __NR_lsetxattr 6 __SYSCALL(__NR_lsetxattr, sys_lsetxattr) #define __NR_fsetxattr 7 __SYSCALL(__NR_fsetxattr, sys_fsetxattr) #define __NR_getxattr 8 __SYSCALL(__NR_getxattr, sys_getxattr)...
/* fs/xattr.c */ #define __NR_setxattr 5 __SYSCALL(__NR_setxattr, sys_setxattr) #define __NR_lsetxattr 6 __SYSCALL(__NR_lsetxattr, sys_lsetxattr) #define __NR_fsetxattr 7 __SYSCALL(__NR_fsetxattr, sys_fsetxattr) #define __NR_getxattr 8 __SYSCALL(__NR_getxattr, sys_getxattr)...
/* fs/xattr.c */ #define __NR_setxattr 5 __SYSCALL(__NR_setxattr, sys_setxattr) #define __NR_lsetxattr 6 __SYSCALL(__NR_lsetxattr, sys_lsetxattr) #define __NR_fsetxattr 7 __SYSCALL(__NR_fsetxattr, sys_fsetxattr) #define __NR_getxattr 8 __SYSCALL(__NR_getxattr, sys_getxattr)...
path_setxattr -> setxattr -> vfs_setxattr,**当时看到这个漏洞修复百思不得其解,原先的代码也有使用校验当前命名空间是否具有相应权限的函数,只是这个函数调用放在了 setxattr而非 patch 的 vfs_setxattr,**这样为什么会有漏洞呢?用户态进程在 Overlay 文件系统中,使用 setxattr 的内核调用栈如下 ...
其次,从线程 X 中,我们从主线程中捕获 setxattr 中发出的页面漏洞。现在我们在主线程中做同样的事情,不同之处在于,我们为一个新值注册一个新范围,我们希望线程 Y 捕获下一个页面漏洞,并且页面漏洞发生的偏移量是 struct msg_msg +8。我们仍然用我们的标头覆盖 L。
int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t); ssize_t (*listxattr) (struct dentry *, char *, size_t); int (*removexattr) (struct dentry *, const char *); ...
我们以setxattr系统调用为例,相关代码流程图如下 /source/fs/xattr.c /** Extended attribute SET operations*/staticlongsetxattr(structdentry *d,constchar__user *name,constvoid__user *value, size_t size,intflags) {interror;void*kvalue =NULL;charkname[XATTR_NAME_MAX +1];if(flags & ~(XATTR_CR...
#define SYS_lsetxattr __NR_lsetxattr #define SYS_lstat __NR_lstat #define SYS_madvise __NR_madvise #define SYS_mbind __NR_mbind #define SYS_migrate_pages __NR_migrate_pages #define SYS_mincore __NR_mincore #define SYS_mkdir __NR_mkdir ...
userfaultfd+setxattr通用堆喷射技术 为了实现通用的堆喷射技术,一般方法采用kmalloc->kfree执行路径之一(满足条件1和2),并将其与userfaultfd结合使用,以满足第3个条件。 userfaultfd有一个详细的手册页,不仅介绍了其用法,同时还提供了关于如何设置页面错误处理程序线程的示例。其基本思想是,处理用户空间中的页面错误...