elevator: fix double release for elevator module
PATCH 1/1 elevator: fix double release for elevator module
Our issue is descripted in below call path:
->elevator_init
->elevator_init_fn
->{cfq,deadline,noop}_init_queue
->elevator_alloc
->kzalloc_node
fail to call kzalloc_node and then put module in elevator_alloc;
fail to call elevator_init_fn and then put module again in elevator_init.
Remove elevator_put invoking in error path of elevator_alloc to avoid double release issue.
--- block/elevator.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
block/elevator.c +1 -4
@@ -157,7 +157,7 @@ struct elevator_queue *elevator_alloc(struct request_queue *q, eq =kzalloc_node (sizeof (*eq),GFP_KERNEL , q->node);if (unlikely (!eq)) - goto err; +return NULL ; eq->type = e;kobject_init (&eq->kobj, &elv_ktype);
@@ -165,9 +165,6 @@ struct elevator_queue *elevator_alloc(struct request_queue *q,hash_init (eq->hash);return eq; -err: -elevator_put (e); -return NULL ; }EXPORT_SYMBOL (elevator_alloc);
Signature · 1 line
2.3.3
Quoted 31 lines · Chao Yu
Our issue is descripted in below call path:
->elevator_init
->elevator_init_fn
->{cfq,deadline,noop}_init_queue
->elevator_alloc->kzalloc_nodefail to call
kzalloc_nodeand then put module inelevator_alloc;
fail to callelevator_init_fnand then put module again inelevator_init.Remove
elevator_putinvoking in error path ofelevator_allocto avoid double release issue.Signed-off-by Chao Yu <[email protected]>--- block/elevator.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)block/elevator.c +1
-1@@ -157,7 +157,7 @@ struct elevator_queue *elevator_alloc(struct request_queue *q, eq =kzalloc_node (sizeof (*eq),GFP_KERNEL , q->node);if (unlikely (!eq)) - goto err; +return NULL ; eq->type = e;kobject_init (&eq->kobj, &elv_ktype);
block/elevator.c struct elevator_queue *elevator_alloc(struct request_queue *q, · line 169
Quoted 8 lines
block/elevator.c +0
-3@@ -165,9 +165,6 @@ struct elevator_queue *elevator_alloc(struct request_queue *q,hash_init (eq->hash);return eq; -err: -elevator_put (e); -return NULL ; }EXPORT_SYMBOL (elevator_alloc);
You could have posted the two patches together, as they are related. Anyway, looks good to me.
Jens Axboe
maintainerQuoted 45 lines · Jeff Moyer
Quoted 31 lines · Chao Yu
Our issue is descripted in below call path:
->elevator_init
->elevator_init_fn
->{cfq,deadline,noop}_init_queue->elevator_alloc ->kzalloc_node fail to call kzalloc_node and then put module in elevator_alloc;fail to call
elevator_init_fnand then put module again inelevator_init.Remove
elevator_putinvoking in error path ofelevator_allocto avoid double release issue.Signed-off-by Chao Yu <[email protected]>--- block/elevator.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)block/elevator.c +1
-1@@ -157,7 +157,7 @@ struct elevator_queue *elevator_alloc(struct request_queue *q, eq =kzalloc_node (sizeof (*eq),GFP_KERNEL , q->node);if (unlikely (!eq)) - goto err; +return NULL ; eq->type = e;kobject_init (&eq->kobj, &elv_ktype);block/elevator.c struct elevator_queue *elevator_alloc(struct request_queue *q, · line 169
Quoted 8 lines
block/elevator.c +0
-3@@ -165,9 +165,6 @@ struct elevator_queue *elevator_alloc(struct request_queue *q,hash_init (eq->hash);return eq; -err: -elevator_put (e); -return NULL ; }EXPORT_SYMBOL (elevator_alloc);You could have posted the two patches together, as they are related. Anyway, looks good to me.
Quoted 1 line
Reviewed-by Jeff Moyer <[email protected]>
Agree, it should be one patch. I've combined them, and applied the fix for 4.1. Thanks.
Signature · 1 line
Jens Axboe
Hi Jens and Jeff,
Thanks for your review and help! :)
Regards,
Quoted 60 lines
-----Original Message-----
From: Jens Axboe [mailto:[email protected]]
Sent: Friday, April 24, 2015 12:49 AM
To: Jeff Moyer; Chao Yu
Cc: [email protected]
Subject: Re: [PATCH] elevator: fix double release for elevator moduleQuoted 45 lines · Jeff Moyer
Quoted 31 lines · Chao Yu
Our issue is descripted in below call path:
->elevator_init
->elevator_init_fn
->{cfq,deadline,noop}_init_queue->elevator_alloc ->kzalloc_node fail to call kzalloc_node and then put module in elevator_alloc;fail to call
elevator_init_fnand then put module again inelevator_init.Remove
elevator_putinvoking in error path ofelevator_allocto avoid double release issue.Signed-off-by Chao Yu <[email protected]>--- block/elevator.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)block/elevator.c +1
-1@@ -157,7 +157,7 @@ struct elevator_queue *elevator_alloc(struct request_queue *q, eq =kzalloc_node (sizeof (*eq),GFP_KERNEL , q->node);if (unlikely (!eq)) - goto err; +return NULL ; eq->type = e;kobject_init (&eq->kobj, &elv_ktype);block/elevator.c struct elevator_queue *elevator_alloc(struct request_queue *q, · line 169
Quoted 8 lines
block/elevator.c +0
-3@@ -165,9 +165,6 @@ struct elevator_queue *elevator_alloc(struct request_queue *q,hash_init (eq->hash);return eq; -err: -elevator_put (e); -return NULL ; }EXPORT_SYMBOL (elevator_alloc);You could have posted the two patches together, as they are related. Anyway, looks good to me.
Quoted 1 line
Reviewed-by Jeff Moyer <[email protected]>Agree, it should be one patch. I've combined them, and applied the fix for 4.1. Thanks.
--
Jens Axboe