diff options
author | Sudip Mukherjee <sudipm.mukherjee@gmail.com> | 2015-11-28 10:49:24 -0500 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2015-11-29 16:34:57 -0500 |
commit | 76e25081b6ae60fb094328dedf900ec15f10a9fd (patch) | |
tree | 4c693cb15ec6985872a862414eb79f62a18748c7 /drivers/lightnvm/core.c | |
parent | 8261bd48c6c9c36cd2c2e343a69e76a3be2b04a4 (diff) |
lightnvm: fix ioctl memory leaks
If copy_to_user() fails we returned error but we missed releasing
devices.
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
Signed-off-by: Matias Bjørling <m@bjorling.me>
Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'drivers/lightnvm/core.c')
-rw-r--r-- | drivers/lightnvm/core.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c index 5178645ac42b..ea50fa5b6ba6 100644 --- a/drivers/lightnvm/core.c +++ b/drivers/lightnvm/core.c | |||
@@ -680,8 +680,10 @@ static long nvm_ioctl_info(struct file *file, void __user *arg) | |||
680 | info->tgtsize = tgt_iter; | 680 | info->tgtsize = tgt_iter; |
681 | up_write(&nvm_lock); | 681 | up_write(&nvm_lock); |
682 | 682 | ||
683 | if (copy_to_user(arg, info, sizeof(struct nvm_ioctl_info))) | 683 | if (copy_to_user(arg, info, sizeof(struct nvm_ioctl_info))) { |
684 | kfree(info); | ||
684 | return -EFAULT; | 685 | return -EFAULT; |
686 | } | ||
685 | 687 | ||
686 | kfree(info); | 688 | kfree(info); |
687 | return 0; | 689 | return 0; |
@@ -724,8 +726,11 @@ static long nvm_ioctl_get_devices(struct file *file, void __user *arg) | |||
724 | 726 | ||
725 | devices->nr_devices = i; | 727 | devices->nr_devices = i; |
726 | 728 | ||
727 | if (copy_to_user(arg, devices, sizeof(struct nvm_ioctl_get_devices))) | 729 | if (copy_to_user(arg, devices, |
730 | sizeof(struct nvm_ioctl_get_devices))) { | ||
731 | kfree(devices); | ||
728 | return -EFAULT; | 732 | return -EFAULT; |
733 | } | ||
729 | 734 | ||
730 | kfree(devices); | 735 | kfree(devices); |
731 | return 0; | 736 | return 0; |