--- zzzz-none-000/linux-2.6.39.4/net/ipv4/udp.c 2011-08-03 19:43:28.000000000 +0000 +++ puma6-atom-6490-729/linux-2.6.39.4/net/ipv4/udp.c 2021-11-10 13:38:18.000000000 +0000 @@ -521,10 +521,18 @@ if (unlikely(sk = skb_steal_sock(skb))) return sk; - else - return __udp4_lib_lookup(dev_net(skb_dst(skb)->dev), iph->saddr, sport, - iph->daddr, dport, inet_iif(skb), - udptable); +#ifdef CONFIG_AVM_PA + sk = __udp4_lib_lookup(dev_net(skb_dst(skb)->dev), iph->saddr, sport, + iph->daddr, dport, inet_iif(skb), + udptable); + if (sk) + avm_pa_add_local_session(skb, sk); + return sk; +#else + return __udp4_lib_lookup(dev_net(skb_dst(skb)->dev), iph->saddr, sport, + iph->daddr, dport, inet_iif(skb), + udptable); +#endif } struct sock *udp4_lib_lookup(struct net *net, __be32 saddr, __be16 sport, @@ -865,6 +873,11 @@ } ipc.addr = inet->inet_saddr; +#ifdef CONFIG_TI_META_DATA + /* Initialize the meta-data field */ + ipc.ti_meta_info = 0; +#endif + ipc.oif = sk->sk_bound_dev_if; err = sock_tx_timestamp(sk, &ipc.tx_flags); if (err) @@ -1159,6 +1172,7 @@ int peeked; int err; int is_udplite = IS_UDPLITE(sk); + bool checksum_valid = false; bool slow; /* @@ -1189,11 +1203,12 @@ */ if (len < ulen || UDP_SKB_CB(skb)->partial_cov) { - if (udp_lib_checksum_complete(skb)) + checksum_valid = !udp_lib_checksum_complete(skb); + if (!checksum_valid) goto csum_copy_err; } - if (skb_csum_unnecessary(skb)) + if (checksum_valid || skb_csum_unnecessary(skb)) err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr), msg->msg_iov, len); else {