summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2012-09-21 22:54:26 +0200
committerStefan Metzmacher <metze@samba.org>2012-09-22 04:31:06 +0200
commiteacdd9f730c09bc59e3906e4f2eff6b8b3051169 (patch)
treee3a28c4214a1d64d4e4528e901d159d764016eb4
parentcc93a3004e1f7a38e7519ecd124a1ce6a21ffe1c (diff)
downloadsamba-eacdd9f730c09bc59e3906e4f2eff6b8b3051169.tar.gz
samba-eacdd9f730c09bc59e3906e4f2eff6b8b3051169.tar.bz2
samba-eacdd9f730c09bc59e3906e4f2eff6b8b3051169.zip
lib/tsocket: fix receiving of udp packets from 0 bytes (bug #9184)
It's possible for a client to send 0 bytes in a UDP packet, we need still need to call recvfrom() and skip the invalid packet at a higher level. Otherwise the kernel receive queue is blocked. metze
-rw-r--r--lib/tsocket/tsocket_bsd.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/lib/tsocket/tsocket_bsd.c b/lib/tsocket/tsocket_bsd.c
index 9e80065227..d5721b4d94 100644
--- a/lib/tsocket/tsocket_bsd.c
+++ b/lib/tsocket/tsocket_bsd.c
@@ -876,10 +876,6 @@ static void tdgram_bsd_recvfrom_handler(void *private_data)
bool retry;
ret = tsocket_bsd_pending(bsds->fd);
- if (ret == 0) {
- /* retry later */
- return;
- }
err = tsocket_bsd_error_from_errno(ret, errno, &retry);
if (retry) {
/* retry later */
@@ -889,6 +885,7 @@ static void tdgram_bsd_recvfrom_handler(void *private_data)
return;
}
+ /* note that 'ret' can be 0 here */
state->buf = talloc_array(state, uint8_t, ret);
if (tevent_req_nomem(state->buf, req)) {
return;