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: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <1458772618-845742-1-git-send-email-tom@herbertland.com>
Date:	Wed, 23 Mar 2016 15:36:49 -0700
From:	Tom Herbert <tom@...bertland.com>
To:	<davem@...emloft.net>, <netdev@...r.kernel.org>
CC:	<kernel-team@...com>
Subject: [PATCH RFC 0/9] udp: GRO in UDP sockets and fast encap_rcv

This patch set does two things:

- Add GRO functions (gro_receive and gro_complete) to UDP sockets.
- Implement "fast receive encapsulation".

Add GRO functions (gro_receive and gro_complete) to UDP sockets. In
udp_gro_receive and udp_gro_complete a socket lookup is done instead of
looking up the port number in udp_offloads.  If a socket is found and
there is are gro functions for it then those are called. This feature
allows binding GRO functions to more than just a port number.
Eventually, we will be able to use this technique to allow application
defined GRO for an application protocol by attaching BPF porgrams to UDP
sockets for doing GRO.

Fast receive encapsulation allows encap_rcv to be called for a socket
without taking the reference to the socket.  The callee can assume it
was called under rcu_read_lock, but must assume that no reference to the
socket is held (so the socket structures should not be written to and
pointer not saved).

In order to implement these function, no socket reference lookup
functions were added in ipv4/udp.c and ipv6/udp.c. Also, inet_iif and
references to skb_dst() were changed to check that dst is set in skbuf
before derefencing.  In the GRO path there is now a UDP socket lookup
performed before dst is set, to the get the device in that case we
simply use skb->dev.

Tested:

Ran various combinations of VXLAN and GUE TCP_STREAM and TCP_RR tests.
DId not see any regressions. perf shows a that the atomic opertions in
taking a reference to UDP sockets in lookup is eliminated for
encapsulation.

Also ran plain UDP_RR. DId not see any regression there.

Tom Herbert (9):
  net: Check skb_dst for NULL in inet_iif
  udp: Add noreference lookup functions
  net: Add fast receive encapsulation
  udp: Add GRO functions to UDP socket
  udp: Add socket based GRO and fast receive encap to tunnel config
  vxlan: change vxlan to use UDP socket GRO
  fou: change to use UDP socket GRO and fast rcv encap
  geneve: change to use UDP socket GRO
  udp: Remove udp_offloads

 drivers/net/geneve.c      |  29 ++----
 drivers/net/vxlan.c       |  31 ++----
 include/linux/netdevice.h |  17 ----
 include/linux/udp.h       |  13 ++-
 include/net/protocol.h    |   3 -
 include/net/route.h       |   7 +-
 include/net/udp.h         |  19 +++-
 include/net/udp_tunnel.h  |   8 ++
 include/net/vxlan.h       |   1 -
 net/ipv4/fou.c            |  49 ++++------
 net/ipv4/udp.c            | 237 +++++++++++++++++++++++++++++-----------------
 net/ipv4/udp_offload.c    | 113 ++++------------------
 net/ipv4/udp_tunnel.c     |   3 +
 net/ipv6/Makefile         |   5 +-
 net/ipv6/af_inet6.c       |   8 ++
 net/ipv6/ip6_offload.c    |   2 -
 net/ipv6/ip6_offload.h    |   3 +-
 net/ipv6/udp.c            | 166 +++++++++++++++++---------------
 net/ipv6/udp_offload.c    |  11 ++-
 19 files changed, 360 insertions(+), 365 deletions(-)

-- 
2.8.0.rc2

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ