On Thu, 2017-06-15 at 00:23 +0000, YUAN Linyu wrote: > Hi, > Indeed, it find more. > Compare with my patch, still lost pattern like below, > 1. sctp and openvswitch > --- a/net/sctp/output.c > +++ b/net/sctp/output.c > @@ -463,7 +463,7 @@ static int sctp_packet_pack(struct sctp_packet > *packet, > > padding = SCTP_PAD4(chunk->skb->len) - > chunk->skb->len; > if (padding) > - memset(skb_put(chunk->skb, padding), > 0, padding); > + skb_put_zero(chunk->skb, padding);
Yep, good catch, this finds 18 instances thereof: @@ expression skb, len; @@ -memset(skb_put(skb, len), 0, len); +skb_put_zero(skb, len); > --- a/net/dsa/tag_trailer.c > +++ b/net/dsa/tag_trailer.c > @@ -43,8 +43,7 @@ static struct sk_buff *trailer_xmit(struct sk_buff > *skb, struct net_device *dev) > kfree_skb(skb); > > if (padlen) { > - u8 *pad = skb_put(nskb, padlen); > - memset(pad, 0, padlen); > + skb_put_zero(nskb, padlen); I'd have thought it finds this, but indeed it doesn't; there's only one instances this changes though: @@ type t; expression skb, len; identifier p; @@ t *p - = skb_put(skb, len); + = skb_put_zero(skb, len); -memset(p, 0, len); and it can't figure out that it should remove the variable, without much more work that's not really worth it for one instance :) johannes