1. 23 Jul, 2018 39 commits
  2. 22 Jul, 2018 1 commit
    • Jakub Kicinski's avatar
      nfp: avoid buffer leak when FW communication fails · 07300f77
      Jakub Kicinski authored
      After device is stopped we reset the rings by moving all free buffers
      to positions [0, cnt - 2], and clear the position cnt - 1 in the ring.
      We then proceed to clear the read/write pointers.  This means that if
      we try to reset the ring again the code will assume that the next to
      fill buffer is at position 0 and swap it with cnt - 1.  Since we
      previously cleared position cnt - 1 it will lead to leaking the first
      buffer and leaving ring in a bad state.
      
      This scenario can only happen if FW communication fails, in which case
      the ring will never be used again, so the fact it's in a bad state will
      not be noticed.  Buffer leak is the only problem.  Don't try to move
      buffers in the ring if the read/write pointers indicate the ring was
      never used or have already been reset.
      
      nfp_net_clear_config_and_disable() is now fully idempotent.
      
      Found by code inspection, FW communication failures are very rare,
      and reconfiguring a live device is not common either, so it's unlikely
      anyone has ever noticed the leak.
      Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Reviewed-by: default avatarDirk van der Merwe <dirk.vandermerwe@netronome.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      07300f77