summaryrefslogtreecommitdiffstats
path: root/drivers/block
diff options
context:
space:
mode:
authorLars Ellenberg <lars.ellenberg@linbit.com>2012-01-12 23:01:26 +0100
committerPhilipp Reisner <philipp.reisner@linbit.com>2012-05-09 15:16:32 +0200
commit47a4f1c1bb684a7ed470aba71391d3bd8d77290c (patch)
tree0842d56c6b8015fcc52efa30e2e0674f3a52ab2c /drivers/block
parent7caacb69ac468ea713e8e8ba77be8040d8fe7bbe (diff)
downloadlinux-47a4f1c1bb684a7ed470aba71391d3bd8d77290c.tar.gz
linux-47a4f1c1bb684a7ed470aba71391d3bd8d77290c.tar.xz
linux-47a4f1c1bb684a7ed470aba71391d3bd8d77290c.zip
drbd: Fix module refcount leak in drbd_accept()
drbd_accept was modelled after kernel_accept with drbd commit 53eb779 in July 2008. Only, kernel_accept was then broken, and only fixed later with kernel commit 1b08534e in Dec 2008: net: Fix module refcount leak in kernel_accept() Impact: protocol families provided as modules, e.g. ipv6 or ib_sdp, would soon have their reference count become negative, preventing them from being unloaded (likely), or worse, hit zero without actually being unused, allowing them to be unloaded while still in use (unlikely, but if triggered, causing a kernel crash). Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block')
-rw-r--r--drivers/block/drbd/drbd_receiver.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index 08e694ef5ed9..6b0505a3c4fc 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -466,6 +466,7 @@ static int drbd_accept(struct drbd_conf *mdev, const char **what,
goto out;
}
(*newsock)->ops = sock->ops;
+ __module_get((*newsock)->ops->owner);
out:
return err;