--- zzzz-none-000/linux-4.4.60/net/ipv4/udp.c 2017-04-08 07:53:53.000000000 +0000 +++ scorpion-1750e-727/linux-4.4.60/net/ipv4/udp.c 2021-02-04 17:41:59.000000000 +0000 @@ -577,11 +577,18 @@ __be16 sport, __be16 dport, struct udp_table *udptable) { + struct sock *sk; const struct iphdr *iph = ip_hdr(skb); - return __udp4_lib_lookup(dev_net(skb_dst(skb)->dev), iph->saddr, sport, - iph->daddr, dport, inet_iif(skb), - udptable); + sk = __udp4_lib_lookup(dev_net(skb_dst(skb)->dev), iph->saddr, sport, + iph->daddr, dport, inet_iif(skb), + udptable); + +#ifdef CONFIG_AVM_PA + if (sk) + avm_pa_add_local_session(skb, sk); +#endif + return sk; } struct sock *udp4_lib_lookup(struct net *net, __be32 saddr, __be16 sport, @@ -819,7 +826,7 @@ if (is_udplite) /* UDP-Lite */ csum = udplite_csum(skb); - else if (sk->sk_no_check_tx) { /* UDP csum disabled */ + else if (sk->sk_no_check_tx && !skb_is_gso(skb)) { /* UDP csum off */ skb->ip_summed = CHECKSUM_NONE; goto send; @@ -1626,6 +1633,10 @@ struct sk_buff *skb1 = NULL; struct sock *sk; +#ifdef CONFIG_AVM_PA + avm_pa_add_local_session(skb, stack[0]); +#endif + for (i = 0; i < count; i++) { sk = stack[i]; if (likely(!skb1))