Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ppp: avoid false drop_monitor false positives

Call consume_skb() in place of kfree_skb() were appropriate.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Eric Dumazet and committed by
David S. Miller
968d7018 a50feda5

+15 -13
+1 -1
drivers/net/ppp/ppp_async.c
··· 613 613 *buf++ = PPP_FLAG; 614 614 ap->olim = buf; 615 615 616 - kfree_skb(ap->tpkt); 616 + consume_skb(ap->tpkt); 617 617 ap->tpkt = NULL; 618 618 return 1; 619 619 }
+7 -7
drivers/net/ppp/ppp_generic.c
··· 1092 1092 new_skb->data, skb->len + 2, 1093 1093 compressor_skb_size); 1094 1094 if (len > 0 && (ppp->flags & SC_CCP_UP)) { 1095 - kfree_skb(skb); 1095 + consume_skb(skb); 1096 1096 skb = new_skb; 1097 1097 skb_put(skb, len); 1098 1098 skb_pull(skb, 2); /* pull off A/C bytes */ 1099 1099 } else if (len == 0) { 1100 1100 /* didn't compress, or CCP not up yet */ 1101 - kfree_skb(new_skb); 1101 + consume_skb(new_skb); 1102 1102 new_skb = skb; 1103 1103 } else { 1104 1104 /* ··· 1112 1112 if (net_ratelimit()) 1113 1113 netdev_err(ppp->dev, "ppp: compressor dropped pkt\n"); 1114 1114 kfree_skb(skb); 1115 - kfree_skb(new_skb); 1115 + consume_skb(new_skb); 1116 1116 new_skb = NULL; 1117 1117 } 1118 1118 return new_skb; ··· 1178 1178 !(ppp->flags & SC_NO_TCP_CCID)); 1179 1179 if (cp == skb->data + 2) { 1180 1180 /* didn't compress */ 1181 - kfree_skb(new_skb); 1181 + consume_skb(new_skb); 1182 1182 } else { 1183 1183 if (cp[0] & SL_TYPE_COMPRESSED_TCP) { 1184 1184 proto = PPP_VJC_COMP; ··· 1187 1187 proto = PPP_VJC_UNCOMP; 1188 1188 cp[0] = skb->data[2]; 1189 1189 } 1190 - kfree_skb(skb); 1190 + consume_skb(skb); 1191 1191 skb = new_skb; 1192 1192 cp = skb_put(skb, len + 2); 1193 1193 cp[0] = 0; ··· 1703 1703 } 1704 1704 skb_reserve(ns, 2); 1705 1705 skb_copy_bits(skb, 0, skb_put(ns, skb->len), skb->len); 1706 - kfree_skb(skb); 1706 + consume_skb(skb); 1707 1707 skb = ns; 1708 1708 } 1709 1709 else ··· 1851 1851 goto err; 1852 1852 } 1853 1853 1854 - kfree_skb(skb); 1854 + consume_skb(skb); 1855 1855 skb = ns; 1856 1856 skb_put(skb, len); 1857 1857 skb_pull(skb, 2); /* pull off the A/C bytes */
+2 -2
drivers/net/ppp/ppp_synctty.c
··· 588 588 skb_reserve(npkt,2); 589 589 skb_copy_from_linear_data(skb, 590 590 skb_put(npkt, skb->len), skb->len); 591 - kfree_skb(skb); 591 + consume_skb(skb); 592 592 skb = npkt; 593 593 } 594 594 skb_push(skb,2); ··· 656 656 if (sent < ap->tpkt->len) { 657 657 tty_stuffed = 1; 658 658 } else { 659 - kfree_skb(ap->tpkt); 659 + consume_skb(ap->tpkt); 660 660 ap->tpkt = NULL; 661 661 clear_bit(XMIT_FULL, &ap->xmit_flags); 662 662 done = 1;
+4 -2
drivers/net/ppp/pppoe.c
··· 984 984 if (skb) { 985 985 total_len = min_t(size_t, total_len, skb->len); 986 986 error = skb_copy_datagram_iovec(skb, 0, m->msg_iov, total_len); 987 - if (error == 0) 988 - error = total_len; 987 + if (error == 0) { 988 + consume_skb(skb); 989 + return total_len; 990 + } 989 991 } 990 992 991 993 kfree_skb(skb);
+1 -1
drivers/net/ppp/pptp.c
··· 209 209 } 210 210 if (skb->sk) 211 211 skb_set_owner_w(new_skb, skb->sk); 212 - kfree_skb(skb); 212 + consume_skb(skb); 213 213 skb = new_skb; 214 214 } 215 215