From: Andrew Lunn <andrew@lunn.ch> Date: 2017-08-21 19:47:29
On Mon, Aug 21, 2017 at 12:41:43PM -0700, Florian Fainelli wrote:
skb_put_padto() already frees the passed sk_buff reference upon error,
so calling kfree_skb() on it again is not necessary.
Detected by CoverityScan, CID#1416687 ("USE_AFTER_FREE")
Fixes: e71cb9e00922 ("net: dsa: ksz: fix skb freeing")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
skb_copy_and_csum_dev(skb, skb_put(nskb, skb->len));- if (skb_put_padto(nskb, nskb->len + padlen)) {- kfree_skb(nskb);+ if (skb_put_padto(nskb, nskb->len + padlen)) return NULL;- } kfree_skb(skb); }--
Because skb_put_padto() frees skb when it fails, below lines in e71cb9e00922
("net: dsa: ksz: fix skb freeing") will be an issue to.
if (skb_tailroom(skb) >= padlen + KSZ_INGRESS_TAG_LEN) {
+ if (skb_put_padto(skb, skb->len + padlen))
+ return NULL;
+
When it fails skb will be freed twice in skb_put_padto() and
caller of dsa_slave_xmit().
Woojung
skb_copy_and_csum_dev(skb, skb_put(nskb, skb->len));- if (skb_put_padto(nskb, nskb->len + padlen)) {- kfree_skb(nskb);+ if (skb_put_padto(nskb, nskb->len + padlen)) return NULL;- } kfree_skb(skb); }--
Because skb_put_padto() frees skb when it fails, below lines in e71cb9e00922
("net: dsa: ksz: fix skb freeing") will be an issue to.
if (skb_tailroom(skb) >= padlen + KSZ_INGRESS_TAG_LEN) {
+ if (skb_put_padto(skb, skb->len + padlen))
+ return NULL;
+
When it fails skb will be freed twice in skb_put_padto() and
caller of dsa_slave_xmit().
You are right, I am not sure what is the best way to fix tag_ksz.c other
than somehow open coding skb_put_padto() minus the freeing on error part?
--
Florian
Because skb_put_padto() frees skb when it fails, below lines in
e71cb9e00922
quoted
("net: dsa: ksz: fix skb freeing") will be an issue to.
if (skb_tailroom(skb) >= padlen + KSZ_INGRESS_TAG_LEN) {
+ if (skb_put_padto(skb, skb->len + padlen))
+ return NULL;
+
When it fails skb will be freed twice in skb_put_padto() and
caller of dsa_slave_xmit().
You are right, I am not sure what is the best way to fix tag_ksz.c other
than somehow open coding skb_put_padto() minus the freeing on error part?
Agree. May need to go back to 1st submission without skb_put_padto().
Will check more if any other ideas.
Thanks.
Woojung