diff options
author | Miloslav Trmač <mitr@redhat.com> | 2010-07-09 09:20:00 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2010-07-19 09:26:12 +0200 |
commit | 8bc83c103fc3ac26ebadbe4fda33f4f72bd6b998 (patch) | |
tree | 1622cc259ccab17ff8fb985ccd3e4a8faa253266 /cryptodev_main.c | |
parent | ce9ad0144a1a40e149f0efa9def2faf02c7a7694 (diff) | |
download | kernel-crypto-8bc83c103fc3ac26ebadbe4fda33f4f72bd6b998.tar.gz kernel-crypto-8bc83c103fc3ac26ebadbe4fda33f4f72bd6b998.tar.xz kernel-crypto-8bc83c103fc3ac26ebadbe4fda33f4f72bd6b998.zip |
Add missing error handling to {get,put}_user
Signed-off-by: Nikos Mavrogiannopoulos <nmav@gnutls.org>
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 d481a66e129..bf1ee3ec703 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: |