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: <1466821262-11176-1-git-send-email-subashab@codeaurora.org>
Date:	Fri, 24 Jun 2016 20:21:02 -0600
From:	Subash Abhinov Kasiviswanathan <subashab@...eaurora.org>
To:	lorenzo@...gle.com, eric.dumazet@...il.com, netdev@...r.kernel.org
Cc:	Subash Abhinov Kasiviswanathan <subashab@...eaurora.org>
Subject: [RFC] tun: Support VIRTIO_NET_HDR_F_DATA_VALID in tun_get_user

Userspace applications might sometimes process packets from hardware
which has already validated checksum, perform trivial operations and
then queue them back to the network stack. By not recomputing the
checksum here, we can see significant improvement in performance.

Sample application here is CLAT which does IPv6 to IPv4 translation.
IPv6 packets for which checksum is validated in hardware are captured
in CLAT and then translated to IPv4 and then queued back to network
stack. In this case, it is expected that the application would not
corrupt the packet and recomputing the checksum would be redundant.

Pass the hint to kernel to skip checksum validation if
VIRTIO_NET_HDR_F_DATA_VALID is set from userspace.

Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@...eaurora.org>
---
 drivers/net/tun.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index e16487c..a5828a5 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1263,6 +1263,9 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
 		}
 	}
 
+	if (gso.flags & VIRTIO_NET_HDR_F_DATA_VALID)
+		skb->ip_summed = CHECKSUM_UNNECESSARY;
+
 	switch (tun->flags & TUN_TYPE_MASK) {
 	case IFF_TUN:
 		if (tun->flags & IFF_NO_PI) {
-- 
1.9.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ