diff options
Diffstat (limited to 'cryptodev_main.c')
-rw-r--r-- | cryptodev_main.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/cryptodev_main.c b/cryptodev_main.c index d481a66..bf1ee3e 100644 --- a/cryptodev_main.c +++ b/cryptodev_main.c @@ -34,6 +34,7 @@ #include <linux/mm.h> #include <linux/highmem.h> #include <linux/random.h> +#include <linux/syscalls.h> #include "cryptodev.h" #include <asm/uaccess.h> #include <asm/ioctl.h> @@ -605,12 +606,15 @@ cryptodev_ioctl(struct inode *inode, struct file *filp, switch (cmd) { case CIOCASYMFEAT: - put_user(0, p); - return 0; + return put_user(0, p); case CRIOGET: fd = clonefd(filp); - put_user(fd, p); - return 0; + ret = put_user(fd, p); + if (unlikely(ret)) { + sys_close(fd); + return ret; + } + return ret; case CIOCGSESSION: ret = copy_from_user(&sop, (void*)arg, sizeof(sop)); if (unlikely(ret)) @@ -626,7 +630,9 @@ cryptodev_ioctl(struct inode *inode, struct file *filp, } return ret; case CIOCFSESSION: - get_user(ses, (uint32_t*)arg); + ret = get_user(ses, (uint32_t*)arg); + if (unlikely(ret)) + return ret; ret = crypto_finish_session(fcr, ses); return ret; case CIOCCRYPT: |