Cong Wang wrote: > On Mon, Oct 11, 2021 at 10:06 PM John Fastabend > <john.fastabend@xxxxxxxxx> wrote: > > > > Cong Wang wrote: > > > From: Cong Wang <cong.wang@xxxxxxxxxxxxx> > > > > > > It turns out the skb's in sock receive queue could have > > > bad checksums, as both ->poll() and ->recvmsg() validate > > > checksums. We have to do the same for ->read_sock() path > > > too before they are redirected in sockmap. > > > > > > Fixes: d7f571188ecf ("udp: Implement ->read_sock() for sockmap") > > > Reported-by: Daniel Borkmann <daniel@xxxxxxxxxxxxx> > > > Reported-by: John Fastabend <john.fastabend@xxxxxxxxx> > > > Cc: Lorenz Bauer <lmb@xxxxxxxxxxxxxx> > > > Cc: Jakub Sitnicki <jakub@xxxxxxxxxxxxxx> > > > Signed-off-by: Cong Wang <cong.wang@xxxxxxxxxxxxx> > > > --- > > > net/ipv4/udp.c | 11 +++++++++++ > > > 1 file changed, 11 insertions(+) > > > > > > diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c > > > index 8536b2a7210b..0ae8ab5e05b4 100644 > > > --- a/net/ipv4/udp.c > > > +++ b/net/ipv4/udp.c > > > @@ -1808,6 +1808,17 @@ int udp_read_sock(struct sock *sk, read_descriptor_t *desc, > > > skb = skb_recv_udp(sk, 0, 1, &err); > > > if (!skb) > > > return err; > > > + > > > + if (udp_lib_checksum_complete(skb)) { > > > + __UDP_INC_STATS(sock_net(sk), UDP_MIB_CSUMERRORS, > > > + IS_UDPLITE(sk)); > > > + __UDP_INC_STATS(sock_net(sk), UDP_MIB_INERRORS, > > > + IS_UDPLITE(sk)); > > > + atomic_inc(&sk->sk_drops); > > > + kfree_skb(skb); > > > > We could use sock_drop() here? Otherwise looks good thanks. > > sock_drop() is in include/linux/skmsg.h, I think we need to move it > to sock.h before using it here in net/ipv4/udp.c, right? Yes it would be necessary. Lets not do it here otherwise backports will be ugly. Acked-by: John Fastabend <john.fastabend@xxxxxxxxx> > > And there are other similar patterns which can be replaced with > sock_drop(), so we can do the replacement for all in a separate > patch. > > Thanks.