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>
This commit is contained in:
Родитель
45d2933c92
Коммит
c2258ffc56
|
@ -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);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче