1
Origin: Red Hat, glibc-2.12-1.47.el6_2.5.src.rpm:glibc-rh767692-2.patch
2
Bug: https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/901716
3
Subject: DoS in RPC implementation
9
sunrpc/svc_tcp.c | 6 ++++++
10
sunrpc/svc_udp.c | 13 +++++++++++--
11
sunrpc/svc_unix.c | 6 ++++++
12
3 files changed, 23 insertions(+), 2 deletions(-)
14
Index: b/sunrpc/svc_tcp.c
15
===================================================================
16
--- a/sunrpc/svc_tcp.c
17
+++ b/sunrpc/svc_tcp.c
26
@@ -243,6 +244,11 @@ again:
30
+ if (errno == EMFILE)
32
+ struct timespec ts = { .tv_sec = 0, .tv_nsec = 50000000 };
33
+ __nanosleep(&ts , NULL);
38
Index: b/sunrpc/svc_udp.c
39
===================================================================
40
--- a/sunrpc/svc_udp.c
41
+++ b/sunrpc/svc_udp.c
43
#include <sys/socket.h>
50
@@ -272,8 +273,16 @@ again:
52
(struct sockaddr *) &(xprt->xp_raddr), &len);
53
xprt->xp_addrlen = len;
54
- if (rlen == -1 && errno == EINTR)
60
+ if (errno == EMFILE)
62
+ struct timespec ts = { .tv_sec = 0, .tv_nsec = 50000000 };
63
+ __nanosleep(&ts , NULL);
66
if (rlen < 16) /* < 4 32-bit ints? */
68
xdrs->x_op = XDR_DECODE;
69
Index: b/sunrpc/svc_unix.c
70
===================================================================
71
--- a/sunrpc/svc_unix.c
72
+++ b/sunrpc/svc_unix.c
81
@@ -245,6 +246,11 @@ again:
85
+ if (errno == EMFILE)
87
+ struct timespec ts = { .tv_sec = 0, .tv_nsec = 50000000 };
88
+ __nanosleep(&ts , NULL);