Tools: hv: verify origin of netlink connector message
PATCH 1/1 Tools: hv: verify origin of netlink connector message
The SuSE security team suggested to use recvfrom instead of recv to be certain that the connector message is originated from kernel.
--- tools/hv/hv_kvp_daemon.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
tools/hv/hv_kvp_daemon.c +7 -3
@@ -701,14 +701,18 @@ int main(void) pfd.fd = fd;while (1 ) { +struct sockaddr *addr_p = (struct sockaddr *) &addr; +socklen_t addr_l =sizeof (addr); pfd.events =POLLIN ; pfd.revents =0 ;poll (&pfd,1 ,-1 ); - len =recv (fd, kvp_recv_buffer,sizeof (kvp_recv_buffer),0 ); + len =recvfrom (fd, kvp_recv_buffer,sizeof (kvp_recv_buffer),0 , + addr_p, &addr_l); -if (len <0 ) { -syslog (LOG_ERR ,"recv failed; error:%d" , len); +if (len <0 || addr.nl_pid) { +syslog (LOG_ERR ,"recvfrom failed; pid:%u error:%d %s" , + addr.nl_pid, errno,strerror (errno));close (fd);return -1 ; }
Quoted 11 lines
-----Original Message-----
From: Olaf Hering [mailto:[email protected]]
Sent: Thursday, May 31, 2012 10:40 AM
To: KY Srinivasan; Greg Kroah-Hartman
Cc: [email protected]
Subject: [PATCH] Tools: hv: verify origin of netlink connector messageThe SuSE security team suggested to use recvfrom instead of recv to be certain that the connector message is originated from kernel.
Thanks Olaf.
Quoted 2 lines
Signed-off-by Olaf Hering <[email protected]>
Quoted 24 lines
--- tools/hv/hv_kvp_daemon.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)Index:
linux-3.4/tools/hv/hv_kvp_daemon.c
==============================================================
=====tools/hv/hv_kvp_daemon.c +3
-1@@ -701,14 +701,18 @@ int main(void) pfd.fd = fd;while (1 ) { +struct sockaddr *addr_p = (struct sockaddr *) &addr; +socklen_t addr_l =sizeof (addr); pfd.events =POLLIN ; pfd.revents =0 ;poll (&pfd,1 ,-1 ); - len =recv (fd, kvp_recv_buffer,sizeof (kvp_recv_buffer),0 ); + len = recvfrom(fd, kvp_recv_buffer, sizeof(kvp_recv_buffer), 0,
tools/hv/hv_kvp_daemon.c int main(void) · line 718
Quoted 10 lines
tools/hv/hv_kvp_daemon.c +4
-2+ addr_p, &addr_l); -if (len <0 ) { -syslog (LOG_ERR ,"recv failed; error:%d" , len); +if (len <0 || addr.nl_pid) { +syslog (LOG_ERR ,"recvfrom failed; pid:%u error:%d %s" , + addr.nl_pid, errno,strerror (errno));close (fd);return -1 ; }
���{.n�+�������+%�����ݶ��w��{.n�+����{��G�����{ay�ʇڙ�,j��f���h��������z_�(�階�ݢj"���m������G������?����&���~��iO��z��v�^�m����������?�I�