diff options
author | Sudip Mukherjee <sudipm.mukherjee@gmail.com> | 2015-11-28 16:49:24 +0100 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2015-11-29 14:34:57 -0700 |
commit | 76e25081b6ae60fb094328dedf900ec15f10a9fd (patch) | |
tree | 4c693cb15ec6985872a862414eb79f62a18748c7 | |
parent | 8261bd48c6c9c36cd2c2e343a69e76a3be2b04a4 (diff) | |
download | op-kernel-dev-76e25081b6ae60fb094328dedf900ec15f10a9fd.zip op-kernel-dev-76e25081b6ae60fb094328dedf900ec15f10a9fd.tar.gz |
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>
-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 5178645..ea50fa5 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) info->tgtsize = tgt_iter; up_write(&nvm_lock); - if (copy_to_user(arg, info, sizeof(struct nvm_ioctl_info))) + if (copy_to_user(arg, info, sizeof(struct nvm_ioctl_info))) { + kfree(info); return -EFAULT; + } kfree(info); return 0; @@ -724,8 +726,11 @@ static long nvm_ioctl_get_devices(struct file *file, void __user *arg) devices->nr_devices = i; - if (copy_to_user(arg, devices, sizeof(struct nvm_ioctl_get_devices))) + if (copy_to_user(arg, devices, + sizeof(struct nvm_ioctl_get_devices))) { + kfree(devices); return -EFAULT; + } kfree(devices); return 0; |