From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Tue, 21 Jun 2016 00:41:15 +0800 From: Antonio Quartulli Message-ID: <20160620164115.GD10666@prodigo> References: <1465575241-1754-1-git-send-email-sven@narfation.org> <1465575241-1754-2-git-send-email-sven@narfation.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="XCAWwTQADTZzNDLi" Content-Disposition: inline In-Reply-To: <1465575241-1754-2-git-send-email-sven@narfation.org> Subject: Re: [B.A.T.M.A.N.] [PATCH next] batman-adv: Free tp_meter ack skb when it was not consumed List-Id: The list for a Better Approach To Mobile Ad-hoc Networking List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: The list for a Better Approach To Mobile Ad-hoc Networking --XCAWwTQADTZzNDLi Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, Jun 10, 2016 at 06:14:01PM +0200, Sven Eckelmann wrote: > batadv_send_skb_to_orig can return -1 to signal that the skb was not > consumed. tp_meter has then to free the skb to avoid a memory leak. >=20 > Fixes: 98d7a766b645 ("batman-adv: throughput meter implementation") > Signed-off-by: Sven Eckelmann > --- > Antonio, this is not really tested. Could you please review it and tell me > if I may have missed something. >=20 > net/batman-adv/tp_meter.c | 3 +++ > 1 file changed, 3 insertions(+) >=20 > diff --git a/net/batman-adv/tp_meter.c b/net/batman-adv/tp_meter.c > index bf6bffb..2333777 100644 > --- a/net/batman-adv/tp_meter.c > +++ b/net/batman-adv/tp_meter.c > @@ -1206,6 +1206,9 @@ static int batadv_tp_send_ack(struct batadv_priv *b= at_priv, const u8 *dst, > =20 > /* send the ack */ > r =3D batadv_send_skb_to_orig(skb, orig_node, NULL); > + if (r =3D=3D -1) > + kfree_skb(skb); > + Good catch, Sven ! However, how about changing the patch this way ? --- a/net/batman-adv/tp_meter.c +++ b/net/batman-adv/tp_meter.c @@ -1206,7 +1206,7 @@ static int batadv_tp_send_ack(struct batadv_priv *bat= _priv, const u8 *dst, =20 /* send the ack */ r =3D batadv_send_skb_to_orig(skb, orig_node, NULL); - if (r =3D=3D -1) + if ((r =3D=3D -1) || !dev_xmit_complete(res)) kfree_skb(skb); =20 if (unlikely(r < 0) || (r =3D=3D NET_XMIT_DROP)) { this is the same check we do in batadv_send_skb_unicast(). Cheers, --=20 Antonio Quartulli --XCAWwTQADTZzNDLi Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJXaByrAAoJEJ4aZjxxc6bKx8sP/iVFl9KOEb/6+4PVPUvWAgsJ 0tI9sCusGOG2gDTnPonwkDiDhyHDTtV9e0p4FB9CpkkusLjyXk0yidXFWRmoyjqO nj20z6yqR/92rH1zWUdh6p0SncSkpLuWR6uQ6Q/uFGy4DIFPkET0P3cNZvaId+Ey QXHyZhEB91D6+rVpgb++A5v1VbyeD7dXDGSnQMqYwSmfzkvkw5fiRfYsLD70oAJ8 ewbfEc67BKUVXkVEdv3PE9UJS+rICMKoLgK+zB51iiEQtt18QaWAzS+UkqL8qfbA rlWYgcw4AAvxXAALXJB8nf+xfjYRtko3gp/lptAesvLJJuyE3mcry9HPFX+10ZQ8 CbTJHbs+3dH1UvFJ9EefCDiekeS7F/Z3Yy0Ny/oPmmTsdjZ+s2rA06SUEt6SqW4o FjRb6RyOiV6NV+259P83s9X9HuFA6FwEOpNcY3TLbSkDcmGnRsf0vwvCbfNxWqqT 0R0+ZBsCpP4VTROrZvwTl2XGt3KUB7Tv0P+mHIwjMP5+t8XdRXLSUh/k+I3RqXf/ +N9x7CtC5+bF2JVoMjX1hhJnuSB0nS1MVylhflwRaeZTSeneSJo506vnF8j0YGGw lY2KklC53Z516pVwH3qmTzuG0fkpH7fgp7yp/O6TRI+eJ4tlBhOvcJnJWV9Kw9Kg 90Y9bhlcZg1StkZxybBt =qFcG -----END PGP SIGNATURE----- --XCAWwTQADTZzNDLi--