git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git]
/
drivers
/
char
/
watchdog
/
wdt977.c
diff --git
a/drivers/char/watchdog/wdt977.c
b/drivers/char/watchdog/wdt977.c
index
5de016e
..
388c548
100644
(file)
--- a/
drivers/char/watchdog/wdt977.c
+++ b/
drivers/char/watchdog/wdt977.c
@@
-240,7
+240,7
@@
static int wdt977_open(struct inode *inode, struct file *file)
__module_get(THIS_MODULE);
wdt977_start();
__module_get(THIS_MODULE);
wdt977_start();
- return
0
;
+ return
nonseekable_open(inode, file)
;
}
static int wdt977_release(struct inode *inode, struct file *file)
}
static int wdt977_release(struct inode *inode, struct file *file)
@@
-273,12
+273,9
@@
static int wdt977_release(struct inode *inode, struct file *file)
* write of data will do, as we we don't define content meaning.
*/
* write of data will do, as we we don't define content meaning.
*/
-static ssize_t wdt977_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
+static ssize_t wdt977_write(struct file *file, const char __user *buf,
+ size_t count, loff_t *ppos)
{
{
- /* Can't seek (pwrite) on this device */
- if (ppos != &file->f_pos)
- return -ESPIPE;
-
if (count) {
if (!nowayout) {
size_t i;
if (count) {
if (!nowayout) {
size_t i;
@@
-325,6
+322,12
@@
static int wdt977_ioctl(struct inode *inode, struct file *file,
int status;
int new_options, retval = -EINVAL;
int new_timeout;
int status;
int new_options, retval = -EINVAL;
int new_timeout;
+ union {
+ struct watchdog_info __user *ident;
+ int __user *i;
+ } uarg;
+
+ uarg.i = (int __user *)arg;
switch(cmd)
{
switch(cmd)
{
@@
-332,22
+335,22
@@
static int wdt977_ioctl(struct inode *inode, struct file *file,
return -ENOIOCTLCMD;
case WDIOC_GETSUPPORT:
return -ENOIOCTLCMD;
case WDIOC_GETSUPPORT:
- return copy_to_user(
(struct watchdog_info *)arg
, &ident,
+ return copy_to_user(
uarg.ident
, &ident,
sizeof(ident)) ? -EFAULT : 0;
case WDIOC_GETSTATUS:
wdt977_get_status(&status);
sizeof(ident)) ? -EFAULT : 0;
case WDIOC_GETSTATUS:
wdt977_get_status(&status);
- return put_user(status,
(int *) arg
);
+ return put_user(status,
uarg.i
);
case WDIOC_GETBOOTSTATUS:
case WDIOC_GETBOOTSTATUS:
- return put_user(0,
(int *) arg
);
+ return put_user(0,
uarg.i
);
case WDIOC_KEEPALIVE:
wdt977_keepalive();
return 0;
case WDIOC_SETOPTIONS:
case WDIOC_KEEPALIVE:
wdt977_keepalive();
return 0;
case WDIOC_SETOPTIONS:
- if (get_user (new_options,
(int *) arg
))
+ if (get_user (new_options,
uarg.i
))
return -EFAULT;
if (new_options & WDIOS_DISABLECARD) {
return -EFAULT;
if (new_options & WDIOS_DISABLECARD) {
@@
-363,7
+366,7
@@
static int wdt977_ioctl(struct inode *inode, struct file *file,
return retval;
case WDIOC_SETTIMEOUT:
return retval;
case WDIOC_SETTIMEOUT:
- if (get_user(new_timeout,
(int *) arg
))
+ if (get_user(new_timeout,
uarg.i
))
return -EFAULT;
if (wdt977_set_timeout(new_timeout))
return -EFAULT;
if (wdt977_set_timeout(new_timeout))
@@
-373,7
+376,7
@@
static int wdt977_ioctl(struct inode *inode, struct file *file,
/* Fall */
case WDIOC_GETTIMEOUT:
/* Fall */
case WDIOC_GETTIMEOUT:
- return put_user(timeout,
(int *)arg
);
+ return put_user(timeout,
uarg.i
);
}
}
}
}