On Thu, May 13, 2021 at 02:40:31PM +0000, Visa Hankala wrote:
> It looks that re_rxeof() might leak mbufs in two cases. The first case
> happens if the controller returns an incomplete frame when frames are
> expected to be non-fragmented. Note that in this instance the fragment
> list sc->rl_head should be empty and does not need clearing.
>
> The second leak happens if a frame has a reception error. The code has
> cleared any preceding fragments but leaks the list's final mbuf.
>
> Index: dev/ic/re.c
> ===================================================================
> RCS file: src/sys/dev/ic/re.c,v
> retrieving revision 1.210
> diff -u -p -r1.210 re.c
> --- dev/ic/re.c 7 May 2021 09:13:19 -0000 1.210
> +++ dev/ic/re.c 13 May 2021 14:33:20 -0000
> @@ -1280,6 +1280,8 @@ re_rxeof(struct rl_softc *sc)
> if ((sc->rl_flags & RL_FLAG_JUMBOV2) != 0 &&
> (rxstat & (RL_RDESC_STAT_SOF | RL_RDESC_STAT_EOF)) !=
> (RL_RDESC_STAT_SOF | RL_RDESC_STAT_EOF)) {
> + ifp->if_ierrors++;
> + m_freem(m);
> continue;
> } else if (!(rxstat & RL_RDESC_STAT_EOF)) {
> m->m_len = RL_FRAMELEN(sc->rl_max_mtu);
> @@ -1328,6 +1330,7 @@ re_rxeof(struct rl_softc *sc)
> m_freem(sc->rl_head);
> sc->rl_head = sc->rl_tail = NULL;
> }
> + m_freem(m);
> continue;
> }
>
>
Looks correct to me. OK claudio@
--
:wq Claudio