aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSiddhesh Poyarekar <siddhesh@redhat.com>2014-10-14 21:05:33 +0530
committerSiddhesh Poyarekar <siddhesh@redhat.com>2014-10-14 21:05:33 +0530
commitfda389c8f0311dd5786be91a7b54b9f935fcafa1 (patch)
treeed86d5f6c8477676fd64feb3b1bab447b8273ee0
parentfcb32af153a745414b0d949e707c9485ab77d6ba (diff)
downloadglibc-fda389c8f0311dd5786be91a7b54b9f935fcafa1.tar
glibc-fda389c8f0311dd5786be91a7b54b9f935fcafa1.tar.gz
glibc-fda389c8f0311dd5786be91a7b54b9f935fcafa1.tar.bz2
glibc-fda389c8f0311dd5786be91a7b54b9f935fcafa1.zip
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.
-rw-r--r--ChangeLog6
-rw-r--r--NEWS2
-rw-r--r--sysdeps/unix/sysv/linux/check_pf.c2
3 files changed, 8 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index e40ba1f346..73db0841e1 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 accc1441d6..987f306655 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 c7fd9b0376..976f249e20 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)