commit fda389c8f0311dd5786be91a7b54b9f935fcafa1 Author: Siddhesh Poyarekar <siddhesh@redhat.com> Date: Tue Oct 14 21:05:33 2014 +0530 Fix infinite loop in check_pf (BZ #12926) The recvmsg could return 0 under some conditions and cause the make_request function to be stuck in an infinite loop. Thank you Jim King <jim.king@simplivity.com> for posting Paul's patch on the list. --- ChangeLog | 6 ++++++ NEWS | 2 +- sysdeps/unix/sysv/linux/check_pf.c | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) #diff --git a/ChangeLog b/ChangeLog #index e40ba1f..73db084 100644 #--- a/ChangeLog #+++ b/ChangeLog #@@ -1,3 +1,9 @@ #+2014-10-14 Paul Pluzhnikov <ppluzhnikov@google.com> #+ #+ [BZ #12926] #+ * sysdeps/unix/sysv/linux/check_pf.c (make_request): Avoid #+ infinite loop when __recvmsg returns 0. #+ # 2014-10-10 Joseph Myers <joseph@codesourcery.com> # # * CANCEL-FCT-WAIVE: Remove file. #diff --git a/NEWS b/NEWS #index accc144..987f306 100644 #--- a/NEWS #+++ b/NEWS #@@ -9,7 +9,7 @@ Version 2.21 # # * The following bugs are resolved with this release: # #- 6652, 14171, 17266, 17363, 17370, 17371, 17411, 17460. #+ 6652, 12926, 14171, 17266, 17363, 17370, 17371, 17411, 17460. # # Version 2.20 # diff --git a/sysdeps/unix/sysv/linux/check_pf.c b/sysdeps/unix/sysv/linux/check_pf.c index c7fd9b0..976f249 100644 --- a/sysdeps/unix/sysv/linux/check_pf.c +++ b/sysdeps/unix/sysv/linux/check_pf.c @@ -180,7 +180,7 @@ make_request (int fd, pid_t pid) }; ssize_t read_len = TEMP_FAILURE_RETRY (__recvmsg (fd, &msg, 0)); - if (read_len < 0) + if (read_len <= 0) goto out_fail2; if (msg.msg_flags & MSG_TRUNC)