From f73cdc7a6b4c3a1fd8ad9db9288f4cfad65a4e78 Mon Sep 17 00:00:00 2001 From: Florian Pose Date: Tue, 24 Feb 2009 10:03:53 +0000 Subject: [PATCH] Fixed SDO download via library. --- master/cdev.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/master/cdev.c b/master/cdev.c index a96725af..17ea29dd 100644 --- a/master/cdev.c +++ b/master/cdev.c @@ -2273,6 +2273,7 @@ int ec_cdev_ioctl_sdo_request_write( ec_ioctl_sdo_request_t data; ec_slave_config_t *sc; ec_sdo_request_t *req; + int ret; if (unlikely(!priv->requested)) return -EPERM; @@ -2280,6 +2281,11 @@ int ec_cdev_ioctl_sdo_request_write( if (copy_from_user(&data, (void __user *) arg, sizeof(data))) return -EFAULT; + if (!data.size) { + EC_ERR("Sdo download: Data size may not be zero!\n"); + return -EINVAL; + } + if (down_interruptible(&master->master_sem)) return -EINTR; @@ -2295,6 +2301,14 @@ int ec_cdev_ioctl_sdo_request_write( up(&master->master_sem); + ret = ec_sdo_request_alloc(req, data.size); + if (ret) + return ret; + + if (copy_from_user(req->data, (void __user *) data.data, data.size)) + return -EFAULT; + + req->data_size = data.size; ecrt_sdo_request_write(req); return 0; }