漏洞标题
网络:RDS:在rds_recvmsg中修复内存泄漏
漏洞描述信息
在Linux内核中,已修复了以下漏洞:
网络:RDS:修复rds_recvmsg中的内存泄漏
Syzbot报告了RDS中的内存泄漏问题。问题出在错误情况下的输入引用计数。
int rds_recvmsg(struct socket *sock, struct msghdr *msg, size_t size, int msg_flags) {
...
if (!rds_next_incoming(rs, &inc)) {
...
}
之后,在这个“if”之后,inc引用计数增加,并且
if (rds_cmsg_recv(inc, msg, rs)) {
ret = -EFAULT;
goto out;
}
...
out:
return ret;
}
在rds_cmsg_recv()失败的情况下,引用计数不会被减少。从ftrace日志中很容易看出,在rds_recvmsg()中的rds_cmsg_recv()之后,rds_inc_addref()没有rds_inc_put()的配对。
1) | rds_recvmsg() {
1) 3.721 us | rds_inc_addref();
1) 3.853 us | rds_message_inc_copy_to_user();
1) + 10.395 us | rds_cmsg_recv();
1) + 34.260 us | }
CVSS信息
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
漏洞类别
在移除最后引用时对内存的释放不恰当(内存泄露)
漏洞标题
net: rds: fix memory leak in rds_recvmsg
漏洞描述信息
In the Linux kernel, the following vulnerability has been resolved:
net: rds: fix memory leak in rds_recvmsg
Syzbot reported memory leak in rds. The problem
was in unputted refcount in case of error.
int rds_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
int msg_flags)
{
...
if (!rds_next_incoming(rs, &inc)) {
...
}
After this "if" inc refcount incremented and
if (rds_cmsg_recv(inc, msg, rs)) {
ret = -EFAULT;
goto out;
}
...
out:
return ret;
}
in case of rds_cmsg_recv() fail the refcount won't be
decremented. And it's easy to see from ftrace log, that
rds_inc_addref() don't have rds_inc_put() pair in
rds_recvmsg() after rds_cmsg_recv()
1) | rds_recvmsg() {
1) 3.721 us | rds_inc_addref();
1) 3.853 us | rds_message_inc_copy_to_user();
1) + 10.395 us | rds_cmsg_recv();
1) + 34.260 us | }
CVSS信息
N/A
漏洞类别
N/A
漏洞标题
Linux kernel 安全漏洞
漏洞描述信息
Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel存在安全漏洞,该漏洞源于rds_recvmsg 中存在内存泄漏问题。
CVSS信息
N/A
漏洞类别
其他