#include <asm/semaphore.h>
#include <linux/init.h>
-#define IPMI_DEVINTF_VERSION "v31"
+#define IPMI_DEVINTF_VERSION "v32"
struct ipmi_file_private
{
{
int rv;
struct ipmi_addr addr;
- unsigned char *msgdata;
+ struct kernel_ipmi_msg msg;
if (req->addr_len > sizeof(struct ipmi_addr))
return -EINVAL;
if (copy_from_user(&addr, req->addr, req->addr_len))
return -EFAULT;
- msgdata = kmalloc(IPMI_MAX_MSG_LENGTH, GFP_KERNEL);
- if (!msgdata)
+ msg.netfn = req->msg.netfn;
+ msg.cmd = req->msg.cmd;
+ msg.data_len = req->msg.data_len;
+ msg.data = kmalloc(IPMI_MAX_MSG_LENGTH, GFP_KERNEL);
+ if (!msg.data)
return -ENOMEM;
/* From here out we cannot return, we must jump to "out" for
goto out;
}
- if (copy_from_user(&msgdata,
+ if (copy_from_user(msg.data,
req->msg.data,
req->msg.data_len))
{
goto out;
}
} else {
- req->msg.data_len = 0;
+ msg.data_len = 0;
}
- req->msg.data = msgdata;
rv = ipmi_request_settime(user,
&addr,
req->msgid,
- &(req->msg),
+ &msg,
NULL,
0,
retries,
retry_time_ms);
out:
- kfree(msgdata);
+ kfree(msg.data);
return rv;
}
{
int rv = -EINVAL;
struct ipmi_file_private *priv = file->private_data;
+ void __user *arg = (void __user *)data;
switch (cmd)
{
{
struct ipmi_req req;
- if (copy_from_user(&req, (void *) data, sizeof(req))) {
+ if (copy_from_user(&req, arg, sizeof(req))) {
rv = -EFAULT;
break;
}
{
struct ipmi_req_settime req;
- if (copy_from_user(&req, (void *) data, sizeof(req))) {
+ if (copy_from_user(&req, arg, sizeof(req))) {
rv = -EFAULT;
break;
}
rv = 0;
- if (copy_from_user(&rsp, (void *) data, sizeof(rsp))) {
+ if (copy_from_user(&rsp, arg, sizeof(rsp))) {
rv = -EFAULT;
break;
}
rsp.msg.data_len = 0;
}
- if (copy_to_user((void *) data, &rsp, sizeof(rsp))) {
+ if (copy_to_user(arg, &rsp, sizeof(rsp))) {
rv = -EFAULT;
goto recv_putback_on_err;
}
{
struct ipmi_cmdspec val;
- if (copy_from_user(&val, (void *) data, sizeof(val))) {
+ if (copy_from_user(&val, arg, sizeof(val))) {
rv = -EFAULT;
break;
}
{
struct ipmi_cmdspec val;
- if (copy_from_user(&val, (void *) data, sizeof(val))) {
+ if (copy_from_user(&val, arg, sizeof(val))) {
rv = -EFAULT;
break;
}
{
int val;
- if (copy_from_user(&val, (void *) data, sizeof(val))) {
+ if (copy_from_user(&val, arg, sizeof(val))) {
rv = -EFAULT;
break;
}
{
unsigned int val;
- if (copy_from_user(&val, (void *) data, sizeof(val))) {
+ if (copy_from_user(&val, arg, sizeof(val))) {
rv = -EFAULT;
break;
}
val = ipmi_get_my_address(priv->user);
- if (copy_to_user((void *) data, &val, sizeof(val))) {
+ if (copy_to_user(arg, &val, sizeof(val))) {
rv = -EFAULT;
break;
}
{
unsigned int val;
- if (copy_from_user(&val, (void *) data, sizeof(val))) {
+ if (copy_from_user(&val, arg, sizeof(val))) {
rv = -EFAULT;
break;
}
val = ipmi_get_my_LUN(priv->user);
- if (copy_to_user((void *) data, &val, sizeof(val))) {
+ if (copy_to_user(arg, &val, sizeof(val))) {
rv = -EFAULT;
break;
}
{
struct ipmi_timing_parms parms;
- if (copy_from_user(&parms, (void *) data, sizeof(parms))) {
+ if (copy_from_user(&parms, arg, sizeof(parms))) {
rv = -EFAULT;
break;
}
parms.retries = priv->default_retries;
parms.retry_time_ms = priv->default_retry_time_ms;
- if (copy_to_user((void *) data, &parms, sizeof(parms))) {
+ if (copy_to_user(arg, &parms, sizeof(parms))) {
rv = -EFAULT;
break;
}