dm mpath: always free attached_handler_name in parse_path()
Commitb592211c33
("dm mpath: fix attached_handler_name leak and dangling hw_handler_name pointer") fixed a memory leak for the case where setup_scsi_dh() returns failure. But setup_scsi_dh may return success and not "use" attached_handler_name if the retain_attached_hwhandler flag is not set on the map. As setup_scsi_sh properly "steals" the pointer by nullifying it, freeing it unconditionally in parse_path() is safe. Fixes:b592211c33
("dm mpath: fix attached_handler_name leak and dangling hw_handler_name pointer") Cc: stable@vger.kernel.org Reported-by: Yufen Yu <yuyufen@huawei.com> Signed-off-by: Martin Wilck <mwilck@suse.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
parent
8e890c1ab1
commit
940bc47178
|
@ -897,6 +897,7 @@ static struct pgpath *parse_path(struct dm_arg_set *as, struct path_selector *ps
|
||||||
if (attached_handler_name || m->hw_handler_name) {
|
if (attached_handler_name || m->hw_handler_name) {
|
||||||
INIT_DELAYED_WORK(&p->activate_path, activate_path_work);
|
INIT_DELAYED_WORK(&p->activate_path, activate_path_work);
|
||||||
r = setup_scsi_dh(p->path.dev->bdev, m, &attached_handler_name, &ti->error);
|
r = setup_scsi_dh(p->path.dev->bdev, m, &attached_handler_name, &ti->error);
|
||||||
|
kfree(attached_handler_name);
|
||||||
if (r) {
|
if (r) {
|
||||||
dm_put_device(ti, p->path.dev);
|
dm_put_device(ti, p->path.dev);
|
||||||
goto bad;
|
goto bad;
|
||||||
|
@ -911,7 +912,6 @@ static struct pgpath *parse_path(struct dm_arg_set *as, struct path_selector *ps
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
bad:
|
bad:
|
||||||
kfree(attached_handler_name);
|
|
||||||
free_pgpath(p);
|
free_pgpath(p);
|
||||||
return ERR_PTR(r);
|
return ERR_PTR(r);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user