Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec...
[linux-block.git] / net / ipv4 / udp.c
index e5738d1217a1a578a8da0bc1aef4eb78211056bd..e4fd4408b7753acae4bd17f478e804c81b0c9c28 100644 (file)
@@ -1475,7 +1475,7 @@ int __udp_enqueue_schedule_skb(struct sock *sk, struct sk_buff *skb)
         * queue contains some other skb
         */
        rmem = atomic_add_return(size, &sk->sk_rmem_alloc);
-       if (rmem > (size + sk->sk_rcvbuf))
+       if (rmem > (size + (unsigned int)sk->sk_rcvbuf))
                goto uncharge_drop;
 
        spin_lock(&list->lock);
@@ -2105,8 +2105,7 @@ static int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
        BUILD_BUG_ON(sizeof(struct udp_skb_cb) > SKB_SGO_CB_OFFSET);
        __skb_push(skb, -skb_mac_offset(skb));
        segs = udp_rcv_segment(sk, skb, true);
-       for (skb = segs; skb; skb = next) {
-               next = skb->next;
+       skb_list_walk_safe(segs, skb, next) {
                __skb_pull(skb, skb_transport_offset(skb));
                ret = udp_queue_rcv_one_skb(sk, skb);
                if (ret > 0)