af_iucv: recvmsg problem for SOCK_STREAM sockets
authorUrsula Braun <ursula.braun@de.ibm.com>
Wed, 19 Mar 2014 06:57:59 +0000 (07:57 +0100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 20 Mar 2014 04:06:55 +0000 (00:06 -0400)
Commit f9c41a62bba3f3f7ef3541b2a025e3371bcbba97 introduced
a problem for SOCK_STREAM sockets, when only part of the
incoming iucv message is received by user space. In this
case the remaining data of the iucv message is lost.
This patch makes sure an incompletely received iucv message
is queued back to the receive queue.

Signed-off-by: Ursula Braun <ursula.braun@de.ibm.com>
Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
Reported-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/iucv/af_iucv.c

index c4b7218058b648856066bb24dacf38d54d16defc..a5e03119107a5563be4a4307fa56885d8e3952ff 100644 (file)
@@ -1382,6 +1382,7 @@ static int iucv_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
                if (sk->sk_type == SOCK_STREAM) {
                        if (copied < rlen) {
                                IUCV_SKB_CB(skb)->offset = offset + copied;
+                               skb_queue_head(&sk->sk_receive_queue, skb);
                                goto done;
                        }
                }