diff options
author | Lars Ellenberg <lars.ellenberg@linbit.com> | 2014-05-14 21:35:21 +0200 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2014-07-10 18:35:09 +0200 |
commit | c2258ffc56f2b34573c2917937190c1491620334 (patch) | |
tree | b202e9693aa3520a622bae29e85efbf3f70a9312 /drivers/block/drbd/drbd_main.c | |
parent | 45d2933c921c51ddd2780a806193ab00e03fe215 (diff) | |
download | lwn-c2258ffc56f2b34573c2917937190c1491620334.tar.gz lwn-c2258ffc56f2b34573c2917937190c1491620334.zip |
drbd: poison free'd device, resource and connection structs
Now that we have additional asynchronous kref_get/kref_put
via debugfs, make sure we catch access after free.
Poison struct drbd_device, drbd_connection and drbd_resource
before kfree() with 0xfd, 0xfc, and 0xf2, respectively.
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block/drbd/drbd_main.c')
-rw-r--r-- | drivers/block/drbd/drbd_main.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index 686c5a59edeb..92547d16b2c7 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -2192,6 +2192,7 @@ void drbd_destroy_device(struct kref *kref) blk_cleanup_queue(device->rq_queue); kfree(device->rs_plan_s); kfree(first_peer_device(device)); + memset(device, 0xfd, sizeof(*device)); kfree(device); for_each_connection(connection, resource) @@ -2285,6 +2286,7 @@ void drbd_destroy_resource(struct kref *kref) idr_destroy(&resource->devices); free_cpumask_var(resource->cpu_mask); kfree(resource->name); + memset(resource, 0xf2, sizeof(*resource)); kfree(resource); } @@ -2665,6 +2667,7 @@ void drbd_destroy_connection(struct kref *kref) drbd_free_socket(&connection->data); kfree(connection->int_dig_in); kfree(connection->int_dig_vv); + memset(connection, 0xfc, sizeof(*connection)); kfree(connection); kref_put(&resource->kref, drbd_destroy_resource); } |