Skip to content

Commit 3df4638

Browse files
Dan Carpentergregkh
authored andcommitted
stm class: Fix a double free in stm_register_device()
The put_device(&stm->dev) call will trigger stm_device_release() which frees "stm" so the vfree(stm) on the next line is a double free. Fixes: 389b669 ("stm class: Fix stm device initialization order") Signed-off-by: Dan Carpenter <[email protected]> Reviewed-by: Amelie Delaunay <[email protected]> Reviewed-by: Andy Shevchenko <[email protected]> Signed-off-by: Alexander Shishkin <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 1565fce commit 3df4638

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

drivers/hwtracing/stm/core.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -868,8 +868,11 @@ int stm_register_device(struct device *parent, struct stm_data *stm_data,
868868
return -ENOMEM;
869869

870870
stm->major = register_chrdev(0, stm_data->name, &stm_fops);
871-
if (stm->major < 0)
872-
goto err_free;
871+
if (stm->major < 0) {
872+
err = stm->major;
873+
vfree(stm);
874+
return err;
875+
}
873876

874877
device_initialize(&stm->dev);
875878
stm->dev.devt = MKDEV(stm->major, 0);
@@ -913,10 +916,8 @@ int stm_register_device(struct device *parent, struct stm_data *stm_data,
913916
err_device:
914917
unregister_chrdev(stm->major, stm_data->name);
915918

916-
/* matches device_initialize() above */
919+
/* calls stm_device_release() */
917920
put_device(&stm->dev);
918-
err_free:
919-
vfree(stm);
920921

921922
return err;
922923
}

0 commit comments

Comments
 (0)