diff options
author | Gregory CLEMENT <gregory.clement@free-electrons.com> | 2016-05-24 16:03:26 (GMT) |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-05-25 19:35:09 (GMT) |
commit | b388fc7405e901c7d6f7817d05193c054e761815 (patch) | |
tree | 2505b959841980d5794823c8a9fb4241a5be304a /net | |
parent | 91c45e38b9478ff507e05f10151d64cd0d1aad7b (diff) | |
download | linux-b388fc7405e901c7d6f7817d05193c054e761815.tar.xz |
net: hwbm: Fix unbalanced spinlock in error case
When hwbm_pool_add exited in error the spinlock was not released. This
patch fixes this issue.
Fixes: 8cb2d8bf57e6 ("net: add a hardware buffer management helper API")
Reported-by: Jean-Jacques Hiblot <jjhiblot@traphandler.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/hwbm.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/net/core/hwbm.c b/net/core/hwbm.c index 941c284..2cab489 100644 --- a/net/core/hwbm.c +++ b/net/core/hwbm.c @@ -55,18 +55,21 @@ int hwbm_pool_add(struct hwbm_pool *bm_pool, unsigned int buf_num, gfp_t gfp) spin_lock_irqsave(&bm_pool->lock, flags); if (bm_pool->buf_num == bm_pool->size) { pr_warn("pool already filled\n"); + spin_unlock_irqrestore(&bm_pool->lock, flags); return bm_pool->buf_num; } if (buf_num + bm_pool->buf_num > bm_pool->size) { pr_warn("cannot allocate %d buffers for pool\n", buf_num); + spin_unlock_irqrestore(&bm_pool->lock, flags); return 0; } if ((buf_num + bm_pool->buf_num) < bm_pool->buf_num) { pr_warn("Adding %d buffers to the %d current buffers will overflow\n", buf_num, bm_pool->buf_num); + spin_unlock_irqrestore(&bm_pool->lock, flags); return 0; } |