Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1286093

breaks blocking receive for other users (was: [PATCH 01/02] core: enable more fine-grained datagram reception control)

From Rainer Weikusat <rweikusat@mobileactivedefense.com>
Newsgroups linux.kernel
Subject breaks blocking receive for other users (was: [PATCH 01/02] core: enable more fine-grained datagram reception control)
Date 2015-12-08 00:20 +0100
Message-ID <qDdex-2Of-11@gated-at.bofh.it> (permalink)
References <qCOSS-3MT-7@gated-at.bofh.it> <qCVKI-87d-59@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


David Miller <davem@davemloft.net> writes:
> From: Rainer Weikusat <rweikusat@mobileactivedefense.com>
> Date: Sun, 06 Dec 2015 21:11:34 +0000
>
>> The __skb_recv_datagram routine in core/ datagram.c provides a general
>> skb reception factility supposed to be utilized by protocol modules
>> providing datagram sockets. It encompasses both the actual recvmsg code
>> and a surrounding 'sleep until data is available' loop. This is
>> inconvenient if a protocol module has to use additional locking in order
>> to maintain some per-socket state the generic datagram socket code is
>> unaware of (as the af_unix code does). The patch below moves the recvmsg
>> proper code into a new __skb_try_recv_datagram routine which doesn't
>> sleep and renames wait_for_more_packets to
>> __skb_wait_for_more_packets, both routines being exported interfaces. The
>> original __skb_recv_datagram routine is reimplemented on top of these
>> two functions such that its user-visible behaviour remains unchanged.
>> 
>> Signed-Off-By: Rainer Weikusat <rweikusat@mobileactivedefense.com>
>
> Applied to net-next.

Because of an oversight, this change breaks blocking datagram reception
for anyone but the AF_UNIX SOCK_DGRAM code. I've noticed this by chance
while running a test program for SOCK_STREAM sockets. The problem seems
to be (fix not yet tested) that a - is missing in the *err check in
__skb_recv_datagram.

Proposed fix:

------------
diff --git a/net/core/datagram.c b/net/core/datagram.c
index 7daff66..fa9dc64 100644
--- a/net/core/datagram.c
+++ b/net/core/datagram.c
@@ -275,7 +275,7 @@ struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned int flags,
                if (skb)
                        return skb;
 
-               if (*err != EAGAIN)
+               if (*err != -EAGAIN)
                        break;
        } while (timeo &&
                !__skb_wait_for_more_packets(sk, err, &timeo, last));
-------------

Provided this works (very likely), I'll send a real patch for that ASAP.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 01/02] core: enable more fine-grained datagram reception control Rainer Weikusat <rweikusat@mobileactivedefense.com> - 2015-12-06 22:20 +0100
  Re: [PATCH 01/02] core: enable more fine-grained datagram  reception control David Miller <davem@davemloft.net> - 2015-12-07 05:40 +0100
    breaks blocking receive for other users (was: [PATCH 01/02] core: enable more fine-grained datagram reception control) Rainer Weikusat <rweikusat@mobileactivedefense.com> - 2015-12-08 00:20 +0100
      [PATCH] fix inverted test in __skb_recv_datagram Rainer Weikusat <rweikusat@mobileactivedefense.com> - 2015-12-08 00:40 +0100
        Re: [PATCH] fix inverted test in __skb_recv_datagram David Miller <davem@davemloft.net> - 2015-12-08 04:30 +0100
          Re: [PATCH] fix inverted test in __skb_recv_datagram Rainer Weikusat <rweikusat@mobileactivedefense.com> - 2015-12-08 15:50 +0100
            Re: [PATCH] fix inverted test in __skb_recv_datagram David Miller <davem@davemloft.net> - 2015-12-08 17:40 +0100
          Re: [PATCH] fix inverted test in __skb_recv_datagram Rainer Weikusat <rweikusat@mobileactivedefense.com> - 2015-12-08 15:50 +0100
            Re: [PATCH] fix inverted test in __skb_recv_datagram David Miller <davem@davemloft.net> - 2015-12-08 17:40 +0100
              Re: [PATCH] fix inverted test in __skb_recv_datagram Rainer Weikusat <rweikusat@mobileactivedefense.com> - 2015-12-08 21:20 +0100

csiph-web