从Chrome渲染器代码执行到内核:MSG_OOB漏洞分析引言2025年6月初,我在审查Linux内核新功能时了解到面向流的UNIX域套接字支持的MSG_OOB特性。...在审查MSG_OOB实现时,我发现了影响Linux >=6.9的安全漏洞(CVE-2025-38236),并向Linux报告了该漏洞,随后得到了修复。...MSG_OOB特性2021年通过commit 314001f0bf92("af_unix: Add OOB support",在Linux 5.15中落地)添加了对AF_UNIX流套接字使用MSG_OOB...结论即使在相对受限的环境中,也可以执行中等复杂度的Linux内核漏洞利用。Chrome的Linux桌面渲染器沙箱暴露了在沙箱中从未合法使用的内核攻击面。...Linux内核通过相同的系统调用公开深奥的特性和常用的核心内核功能,从而加剧了这个问题。
学Linux网络编程这么久,还真没注意到 read/write 和 recv/send之间有什么区别,于是就去研究了一下。...flags); flags取值有: 0: 与write()无异 MSG_DONTROUTE:告诉内核,目标主机在本地网络,不用查路由表 MSG_DONTWAIT:将单个I/O操作设置为非阻塞模式 MSG_OOB...int s, void *buf, size_t len, int flags); flags取值有: 0:常规操作,与read()相同 MSG_DONTWAIT:将单个I/O操作设置为非阻塞模式 MSG_OOB...buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen); flags取值有: 0:常规操作,与read()相同 MSG_OOB
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9614056.html 一.多种I/O函数 前言:之前我们讲的数据传输一般Linux上用write...其实Linux上也可以用send和recv,它与write和read主要区别是它的最后一个参数可以附带一些扩展功能。...Linux中的send和recv 基础 ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags); 成功返回发送的字节数...可选项如下: MSG_OOB:传输紧急消息(Out-of-band data) MSG_PEEK:验证输入缓冲中是否存在接收的数据 MSG_DONTROUTE:在本地网络中寻找目的地...= 2) { printf("Usage: %s \n", argv[0]); exit(1); } //Linux上的信号处理(事件驱动
MSG_OOB This flag requests receipt of out-of-band data that would not be received in the normal...MSG_TRUNC (since Linux 2.2) For raw (AF_PACKET), Internet datagram (since Linux 2.4.27/2.6.8),...netlink (since Linux 2.6.22) and UNIX datagram (since Linux 3.4) sockets: return the real length...MSG_OOB is returned to indicate that expedited or out-of-band data were received....POSIX.1-2001 describes only the MSG_OOB, MSG_PEEK, and MSG_WAITALL flags.
发送 OOB 首先产生 OOB 是非常简单的,只需要在寻常 send 的最后一个参数,加入 MSG_OOB 标志位: ret = send (sockfd, ptr, n, MSG_OOB); 如果考虑一个完整的测试场景...normal head %d\n", ret); 7 8 ptr += 2; 9 n = 1; 10 if ((ret = send (sockfd, ptr, n, MSG_OOB...4 int ret = 0; 5 char buf[BUFLEN] = { 0 }; 6 ret = recv (g_fd, buf, sizeof (buf), MSG_OOB...,MSG_OOB) 接收带外数据 1 if (FD_ISSET(clfd, &exds)) 2 { 3 // the...\n"); 8 ret = recv (clfd, buf, 1, MSG_OOB); 9 if (ret > 0
(这里是windows中的头文件,Linux的用法在下面的那个实例) 头文件:#include #include int recvfrom...其他数值定义如下: 1、MSG_OOB 接收以out-of-band 送出的数据. 2、MSG_PEEK 返回来的数据并不会在系统内删除, 如果再调用recv()会返回相同的数据内容.
或者是紧急数据或者还没有发出去一个数据包则直接发送 if ((skb->len - hdrlen) >= sk->mss || (flags & MSG_OOB...return(copied); return(tmp); } // 带外数据 if (flags & MSG_OOB...tcp_read: if (flags & MSG_OOB) return tcp_read_urg(sk, nonblock, to, len, flags); tcp_read_urg...release_sock(sk); return 1; } release_sock(sk); /* * Fixed the recv(..., MSG_OOB
MSG_OOB 发送带外数据(仅适用于SO_STREAM;参见2.2.3节)。...MSG_OOB 处理带外数据(参见2.2.3节具体讨论)。...MSG_OOB 处理带外数据(参见2.2.3节具体讨论)。...MSG_OOB 处理带外数据(参见2.2.3节具体讨论)。...WSAEOPNOTSUPP:指定了MSG_OOB,但套接口不是SOCK_STREAM类型的。 WSAESHUTDOWN:套接口已被关闭。
Linux系统调用– recv/recvfrom函数详解 功能描述: 从套接字上接收一个消息。对于recvfrom,可同时应用于面向连接的和无连接的套接字。...MSG_OOB:指示接收到out-of-band数据(即需要优先处理的数据)。 MSG_ERRQUEUE:指示除了来自套接字错误队列的错误外,没有接收到其它数据。
MSG_OOB 处理超出边界的数据 MSG_PEEK 从接受队列的起始位置接收数据,但不将他们从接受队列中移除。..., $msg, strlen( $msg ) ); socket_close( $connection_socket ); } socket_close( $listen_socket ); 那么MSG_OOB...MSG_OOB其实叫做外带数据,有时候有些地方叫做紧急数据。...PHP的socket_recv()选项有如下四个项,且每项之间均可以使用|(或运算)来搭配使用同时获得多个特性: MSG_OOB MSG_PEEK MSG_WAITALL MSG_DONTWAIT 而...recv()则拥有五个配置项: MSG_OOB MSG_PEEK MSG_WAITALL MSG_DONTWAIT MSG_DONTROUTE 而当你使用recvmsg()的时候,配置项则达到了十一项
flags参数比较重要的有两个,一个是MSG_OOB,即读取带外数据时候的选项,tcp头部有一个紧急指针16位的值。...参考: 《Linux C 编程一站式学习》 《TCP/IP详解 卷一》 《UNP》
flag参数 send(int socket, const void *buffer, size_t length, int flags); flags参数传MSG_OOB...MSG_OOB是个宏 • 确认ACK:占1bit,当ACK=1时生效。TCP有条硬性规定,当建立链接成功后所有传输的数据报文都必须把ACK置为1。
IO复用是Linux中的IO模型之中的一个,IO复用就是进程预先告诉内核须要监视的IO条件,使得内核一旦发现进程指定的一个或多个IO条件就绪,就通过进程进程处理。从而不会在单个IO上堵塞了。...Linux中。提供了select、poll、epoll三种接口函数来实现IO复用。...採用带MSG_OOB标志的recv函数都去带外数据 */ if(FD_ISSET(connfd, &except_fd)) { if(recv(connfd, buf, sizeof(buf...) - 1, MSG_OOB) < 0) { err_info("recv error\n"); continue; } printf("recv: %s\n", buf...} } } } } close(connfd); close(listenfd); return 0; } 3、epoll系列函数 epoll是Linux
这里需要注意的是,listen()函数不会阻塞,它主要做的事情为,将该套接字和套接字对应的连接队列长度告诉 Linux 内核,然后,listen()函数就结束。...其值为 MSG_CONFIRM MSG_DONTROUTE MSG_DONTWAIT MSG_EOR MSG_MORE MSG_NOSIGNAL MSG_OOB 中 1 个或者几个的逻辑或或者逻辑与值...其值为 MSG_CMSG_CLOEXEC MSG_DONTWAIT MSG_ERRQUEUE MSG_OOB MSG_PEEK MSG_TRUNC MSG_WAITALL 中 1 个或者几个的逻辑或或者逻辑与值
Linux 文件系统 目录 说明 bin 存放二进制可执行文件 sbin 存放二进制可执行文件,只有 root 才能访问 boot 存放用于系统引导时使用的各种文件 dev 用于存放设备文件 etc...是超级管理员 localhost 表示主机名 ~ 表示当前目录(家目录),其中超级管理员家目录为 /root,普通用户家目录为 /home/chan $ 表示普通用户提示符,# 表示超级管理员提示符 Linux...test.tar.gz 文件搜索命令 locate:在后台数据库搜索文件 updatedb:更新后台数据库 whereis:搜索系统命令所在位置 which:搜索命令所在路径及别名 find:搜索文件或文件夹 用户和组 Linux
第三个参数为该字符串的大小 第四个参数可以用来控制读写操作 该值可以为一下几种 0 MSG_DONTROUTE:不查找路由表/* send without using routing tables */ MSG_OOB...MSG_OOB:表示能够接收和发送带外的数据.关于带外数据我们以后会解释的. MSG_PEEK:是recv函数的使用标志,表示只是从系统缓冲区中读取内容,而不清除系统缓冲区的内容。
printf( "get %d bytes of normal data: %s\n", ret, buf ); } /* 对于异常事件,采用带MSG_OOB...connfd, &exception_fds ) ) { ret = recv( connfd, buf, sizeof( buf )-1, MSG_OOB...---- 参考资料: 《Linux高性能服务器编程》
Linux文件操作 Linux中,一切皆文件(网络设备除外)。 硬件设备也“是”文件,通过文件来使用设备。 目录(文件夹)也是一种文件。...boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件和镜像文件。...deb:deb是Device(设备)的缩写,该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。...系统会自动识别一些设备,例如U盘、光驱等,当识别后,Linux会把识别的设备挂载到这个目录下。...---- Linux文件的操作方式 文件描述符fd fd是一个大于等于0的整数。 每打开一个文件,就创建一个文件描述符,通过文件描述符来操作文件。
---- O_SYNC 缓存同步 为了保证磁盘系统与缓冲区内容一致,Linux系统提供了sync,fsync,fdatasync三个函数。...---- Linux文件IO流程图 内核中会有一个线程,不断地将高速页缓冲区中的数据写入到物理磁盘中。
一、Linux下的用户分类 在Linux下,有两种用户,一种是超级用户,一种是普通用户 超级用户:可以再linux系统下做任何事情,不受权限限制(制定规则,但不需要遵守规则) 普通用户:在linux...2、Linux中的所有用户都要有自己的密码,无论是root还是普通用户,并且root的密码和普通用户的密码尽量不要一样!!...二、Linux权限的概念 什么叫做权限呢??通俗一点说就是一件事情是否允许你做! ...后缀无意义但需要 Linux系统中,文件名后缀没有没有直接的意义。 ...所以Linux中的文件是否需要使用后缀,具体看用户的需求!!