summaryrefslogtreecommitdiffstats
path: root/cryptodev_main.c
diff options
context:
space:
mode:
authorMiloslav Trmač <mitr@redhat.com>2010-07-09 09:20:00 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2010-07-19 09:26:12 +0200
commit8bc83c103fc3ac26ebadbe4fda33f4f72bd6b998 (patch)
tree1622cc259ccab17ff8fb985ccd3e4a8faa253266 /cryptodev_main.c
parentce9ad0144a1a40e149f0efa9def2faf02c7a7694 (diff)
downloadkernel-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.c16
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: