* [PATCH net 0/2] s390: af_iucv patches
@ 2016-10-07 13:51 Ursula Braun
2016-10-07 13:51 ` [PATCH net 1/2] Subject: [PATCH] af_iucv: enable control sends in case of SEND_SHUTDOWN Ursula Braun
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Ursula Braun @ 2016-10-07 13:51 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-s390, schwidefsky, heiko.carstens, ubraun
Hi Dave,
here are 2 patches for the s390-only af_iucv socket family code.
Thanks, Ursula
Ursula Braun (2):
Subject: [PATCH] af_iucv: enable control sends in case of
SEND_SHUTDOWN
Subject: [PATCH] af_iucv: drop skbs rejected by filter
net/iucv/af_iucv.c | 34 ++++++++++++++++++++++++++--------
1 file changed, 26 insertions(+), 8 deletions(-)
--
2.8.4
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH net 1/2] Subject: [PATCH] af_iucv: enable control sends in case of SEND_SHUTDOWN
2016-10-07 13:51 [PATCH net 0/2] s390: af_iucv patches Ursula Braun
@ 2016-10-07 13:51 ` Ursula Braun
2016-10-07 13:51 ` [PATCH net 2/2] Subject: [PATCH] af_iucv: drop skbs rejected by filter Ursula Braun
2016-10-12 5:56 ` [PATCH net 0/2] s390: af_iucv patches David Miller
2 siblings, 0 replies; 4+ messages in thread
From: Ursula Braun @ 2016-10-07 13:51 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-s390, schwidefsky, heiko.carstens, ubraun
If a socket program has shut down the socket for sending, it can still
receive an undetermined number of packets. The AF_IUCV protocol for
HIPER transport requires sending of a WIN flag from time to time
from the receiver to the sender, otherwise the peer cannot continue
sending. That means sending of control flags must still work, even
though the AF_IUCV socket is shutdown for sending data.
sock_alloc_send_skb() returns with error EPIPE, if socket sk_shutdown
is SEND_SHUTDOWN. Thus this patch temporarily removes the send
shutdown attribute from the socket to enable transfer of control
flags.
Signed-off-by: Ursula Braun <ubraun@linux.vnet.ibm.com>
---
net/iucv/af_iucv.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
index 02b45a8..88d0eaa 100644
--- a/net/iucv/af_iucv.c
+++ b/net/iucv/af_iucv.c
@@ -453,19 +453,27 @@ static void iucv_sever_path(struct sock *sk, int with_user_data)
}
}
-/* Send FIN through an IUCV socket for HIPER transport */
+/* Send controlling flags through an IUCV socket for HIPER transport */
static int iucv_send_ctrl(struct sock *sk, u8 flags)
{
int err = 0;
int blen;
struct sk_buff *skb;
+ u8 shutdown = 0;
blen = sizeof(struct af_iucv_trans_hdr) + ETH_HLEN;
+ if (sk->sk_shutdown & SEND_SHUTDOWN) {
+ /* controlling flags should be sent anyway */
+ shutdown = sk->sk_shutdown;
+ sk->sk_shutdown &= RCV_SHUTDOWN;
+ }
skb = sock_alloc_send_skb(sk, blen, 1, &err);
if (skb) {
skb_reserve(skb, blen);
err = afiucv_hs_send(NULL, sk, skb, flags);
}
+ if (shutdown)
+ sk->sk_shutdown = shutdown;
return err;
}
--
2.8.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH net 2/2] Subject: [PATCH] af_iucv: drop skbs rejected by filter
2016-10-07 13:51 [PATCH net 0/2] s390: af_iucv patches Ursula Braun
2016-10-07 13:51 ` [PATCH net 1/2] Subject: [PATCH] af_iucv: enable control sends in case of SEND_SHUTDOWN Ursula Braun
@ 2016-10-07 13:51 ` Ursula Braun
2016-10-12 5:56 ` [PATCH net 0/2] s390: af_iucv patches David Miller
2 siblings, 0 replies; 4+ messages in thread
From: Ursula Braun @ 2016-10-07 13:51 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-s390, schwidefsky, heiko.carstens, ubraun
A packet filter might be installed for instance with setsockopt
SO_ATTACH_FILTER. af_iucv currently queues skbs rejected by filter
into the backlog queue. This does not make sense, since packets
rejected by filter can be dropped immediately. This patch adds
separate sk_filter return code checking, and dropping of packets
if applicable.
Signed-off-by: Ursula Braun <ubraun@linux.vnet.ibm.com>
Reported-by: Daniel Borkmann <daniel@iogearbox.net>
---
net/iucv/af_iucv.c | 24 +++++++++++++++++-------
1 file changed, 17 insertions(+), 7 deletions(-)
diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
index 88d0eaa..cfb9e5f 100644
--- a/net/iucv/af_iucv.c
+++ b/net/iucv/af_iucv.c
@@ -1323,8 +1323,13 @@ static void iucv_process_message(struct sock *sk, struct sk_buff *skb,
}
IUCV_SKB_CB(skb)->offset = 0;
- if (sock_queue_rcv_skb(sk, skb))
- skb_queue_head(&iucv_sk(sk)->backlog_skb_q, skb);
+ if (sk_filter(sk, skb)) {
+ atomic_inc(&sk->sk_drops); /* skb rejected by filter */
+ kfree_skb(skb);
+ return;
+ }
+ if (__sock_queue_rcv_skb(sk, skb)) /* handle rcv queue full */
+ skb_queue_tail(&iucv_sk(sk)->backlog_skb_q, skb);
}
/* iucv_process_message_q() - Process outstanding IUCV messages
@@ -1438,13 +1443,13 @@ static int iucv_sock_recvmsg(struct socket *sock, struct msghdr *msg,
rskb = skb_dequeue(&iucv->backlog_skb_q);
while (rskb) {
IUCV_SKB_CB(rskb)->offset = 0;
- if (sock_queue_rcv_skb(sk, rskb)) {
+ if (__sock_queue_rcv_skb(sk, rskb)) {
+ /* handle rcv queue full */
skb_queue_head(&iucv->backlog_skb_q,
rskb);
break;
- } else {
- rskb = skb_dequeue(&iucv->backlog_skb_q);
}
+ rskb = skb_dequeue(&iucv->backlog_skb_q);
}
if (skb_queue_empty(&iucv->backlog_skb_q)) {
if (!list_empty(&iucv->message_q.list))
@@ -2124,12 +2129,17 @@ static int afiucv_hs_callback_rx(struct sock *sk, struct sk_buff *skb)
skb_reset_transport_header(skb);
skb_reset_network_header(skb);
IUCV_SKB_CB(skb)->offset = 0;
+ if (sk_filter(sk, skb)) {
+ atomic_inc(&sk->sk_drops); /* skb rejected by filter */
+ kfree_skb(skb);
+ return NET_RX_SUCCESS;
+ }
+
spin_lock(&iucv->message_q.lock);
if (skb_queue_empty(&iucv->backlog_skb_q)) {
- if (sock_queue_rcv_skb(sk, skb)) {
+ if (__sock_queue_rcv_skb(sk, skb))
/* handle rcv queue full */
skb_queue_tail(&iucv->backlog_skb_q, skb);
- }
} else
skb_queue_tail(&iucv_sk(sk)->backlog_skb_q, skb);
spin_unlock(&iucv->message_q.lock);
--
2.8.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH net 0/2] s390: af_iucv patches
2016-10-07 13:51 [PATCH net 0/2] s390: af_iucv patches Ursula Braun
2016-10-07 13:51 ` [PATCH net 1/2] Subject: [PATCH] af_iucv: enable control sends in case of SEND_SHUTDOWN Ursula Braun
2016-10-07 13:51 ` [PATCH net 2/2] Subject: [PATCH] af_iucv: drop skbs rejected by filter Ursula Braun
@ 2016-10-12 5:56 ` David Miller
2 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2016-10-12 5:56 UTC (permalink / raw)
To: ubraun; +Cc: netdev, linux-s390, schwidefsky, heiko.carstens
From: Ursula Braun <ubraun@linux.vnet.ibm.com>
Date: Fri, 7 Oct 2016 15:51:46 +0200
> here are 2 patches for the s390-only af_iucv socket family code.
Series applied to net-next, thanks.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-10-12 6:02 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-10-07 13:51 [PATCH net 0/2] s390: af_iucv patches Ursula Braun
2016-10-07 13:51 ` [PATCH net 1/2] Subject: [PATCH] af_iucv: enable control sends in case of SEND_SHUTDOWN Ursula Braun
2016-10-07 13:51 ` [PATCH net 2/2] Subject: [PATCH] af_iucv: drop skbs rejected by filter Ursula Braun
2016-10-12 5:56 ` [PATCH net 0/2] s390: af_iucv patches David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).