lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:	Sun, 3 May 2015 13:28:27 +0200
From:	Mathias Kretschmer <mathias.kretschmer@...us.fraunhofer.de>
To:	<netdev@...r.kernel.org>
CC:	Daniel Borkmann <daniel@...earbox.net>
Subject: PATCH: af_packet / TX_RING not fully non-blocking (w/ MSG_DONTWAIT)

Hi,

following up on my initial post and the feedback I have received,
please find attached/in-line an updated patch.

Changes:
*) keep the unlikely() in the case sock_alloc_send_skb() fails, as here 
we enter the slow path, anyway.
*) pass on the return code from sock_alloc_send_skb(), i.e. EGAIN

Please consider this for inclusion.

Cheers,

Mathias

---
diff -uNpr linux-3.16.7.orig/net/packet/af_packet.c 
linux-3.16.7/net/packet/af_packet.c
--- linux-3.16.7.orig/net/packet/af_packet.c    2014-10-30 
16:41:01.000000000 +0000
+++ linux-3.16.7/net/packet/af_packet.c 2015-04-05 08:41:14.577535454 +0000
@@ -2291,11 +2291,14 @@ static int tpacket_snd(struct packet_soc
                 tlen = dev->needed_tailroom;
                 skb = sock_alloc_send_skb(&po->sk,
                                 hlen + tlen + sizeof(struct sockaddr_ll),
-                               0, &err);
+                               !need_wait, &err);

-               if (unlikely(skb == NULL))
+               if (unlikely(skb == NULL)) {
+                       /* we assume the socket was initially writeable 
... */
+                       if (likely(len_sum > 0))
+                               err = len_sum;
                         goto out_status;
-
+               }
                 tp_len = tpacket_fill_skb(po, skb, ph, dev, size_max, 
proto,
                                           addr, hlen);
                 if (tp_len > dev->mtu + dev->hard_header_len) {

View attachment "005-af_packet_no_block_tx.patch" of type "text/x-patch" (803 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ