Message ID | 165306442878.34086.2437731947506679099.stgit@warthog.procyon.org.uk (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | rxrpc: Leak fixes | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Clearly marked for net |
netdev/apply | fail | Patch does not apply to net |
On Fri, 20 May 2022 17:33:48 +0100 David Howells wrote: > AF_RXRPC doesn't currently enable IPv6 UDP Tx checksums on the transport > socket it opens and the checksums in the packets it generates end up 0. > > It probably should also enable IPv6 UDP Rx checksums and IPv4 UDP > checksums. The latter only seem to be applied if the socket family is > AF_INET and don't seem to apply if it's AF_INET6. IPv4 packets from an > IPv6 socket seem to have checksums anyway. > > What seems to have happened is that the inet_inv_convert_csum() call didn't > get converted to the appropriate udp_port_cfg parameters - and > udp_sock_create() disables checksums unless explicitly told not too. > > Fix this by enabling the three udp_port_cfg checksum options. > > Fixes: 1a9b86c9fd95 ("rxrpc: use udp tunnel APIs instead of open code in rxrpc_open_socket") > Reported-by: Marc Dionne <marc.dionne@auristor.com> > Signed-off-by: David Howells <dhowells@redhat.com> > Reviewed-by: Xin Long <lucien.xin@gmail.com> > Reviewed-by: Marc Dionne <marc.dionne@auristor.com> This is already in net.. pw build got gave up on this series. Could you resend just the other 5 patches?
Jakub Kicinski <kuba@kernel.org> wrote: > This is already in net.. > pw build got gave up on this series. > Could you resend just the other 5 patches? Will do. David
diff --git a/net/rxrpc/local_object.c b/net/rxrpc/local_object.c index a4111408ffd0..6a1611b0e303 100644 --- a/net/rxrpc/local_object.c +++ b/net/rxrpc/local_object.c @@ -117,6 +117,7 @@ static int rxrpc_open_socket(struct rxrpc_local *local, struct net *net) local, srx->transport_type, srx->transport.family); udp_conf.family = srx->transport.family; + udp_conf.use_udp_checksums = true; if (udp_conf.family == AF_INET) { udp_conf.local_ip = srx->transport.sin.sin_addr; udp_conf.local_udp_port = srx->transport.sin.sin_port; @@ -124,6 +125,8 @@ static int rxrpc_open_socket(struct rxrpc_local *local, struct net *net) } else { udp_conf.local_ip6 = srx->transport.sin6.sin6_addr; udp_conf.local_udp_port = srx->transport.sin6.sin6_port; + udp_conf.use_udp6_tx_checksums = true; + udp_conf.use_udp6_rx_checksums = true; #endif } ret = udp_sock_create(net, &udp_conf, &local->socket);