diff options
author | Lars Ellenberg <lars.ellenberg@linbit.com> | 2014-05-14 15:35:21 -0400 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2014-07-10 12:35:09 -0400 |
commit | c2258ffc56f2b34573c2917937190c1491620334 (patch) | |
tree | b202e9693aa3520a622bae29e85efbf3f70a9312 /drivers/block | |
parent | 45d2933c921c51ddd2780a806193ab00e03fe215 (diff) |
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')
-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) | |||
2192 | blk_cleanup_queue(device->rq_queue); | 2192 | blk_cleanup_queue(device->rq_queue); |
2193 | kfree(device->rs_plan_s); | 2193 | kfree(device->rs_plan_s); |
2194 | kfree(first_peer_device(device)); | 2194 | kfree(first_peer_device(device)); |
2195 | memset(device, 0xfd, sizeof(*device)); | ||
2195 | kfree(device); | 2196 | kfree(device); |
2196 | 2197 | ||
2197 | for_each_connection(connection, resource) | 2198 | for_each_connection(connection, resource) |
@@ -2285,6 +2286,7 @@ void drbd_destroy_resource(struct kref *kref) | |||
2285 | idr_destroy(&resource->devices); | 2286 | idr_destroy(&resource->devices); |
2286 | free_cpumask_var(resource->cpu_mask); | 2287 | free_cpumask_var(resource->cpu_mask); |
2287 | kfree(resource->name); | 2288 | kfree(resource->name); |
2289 | memset(resource, 0xf2, sizeof(*resource)); | ||
2288 | kfree(resource); | 2290 | kfree(resource); |
2289 | } | 2291 | } |
2290 | 2292 | ||
@@ -2665,6 +2667,7 @@ void drbd_destroy_connection(struct kref *kref) | |||
2665 | drbd_free_socket(&connection->data); | 2667 | drbd_free_socket(&connection->data); |
2666 | kfree(connection->int_dig_in); | 2668 | kfree(connection->int_dig_in); |
2667 | kfree(connection->int_dig_vv); | 2669 | kfree(connection->int_dig_vv); |
2670 | memset(connection, 0xfc, sizeof(*connection)); | ||
2668 | kfree(connection); | 2671 | kfree(connection); |
2669 | kref_put(&resource->kref, drbd_destroy_resource); | 2672 | kref_put(&resource->kref, drbd_destroy_resource); |
2670 | } | 2673 | } |