static struct proc_dir_entry *divas_proc_entry = NULL;
static ssize_t
-divas_read(struct file *file, char *buf, size_t count, loff_t * off)
+divas_read(struct file *file, char __user *buf, size_t count, loff_t * off)
{
int len = 0;
int cadapter;
if (*off)
return 0;
- if (off != &file->f_pos)
- return -ESPIPE;
divas_get_version(tmpbuf);
if (copy_to_user(buf + len, &tmpbuf, strlen(tmpbuf)))
}
static ssize_t
-divas_write(struct file *file, const char *buf, size_t count, loff_t * off)
+divas_write(struct file *file, const char __user *buf, size_t count, loff_t * off)
{
return (-ENODEV);
}
static int divas_open(struct inode *inode, struct file *file)
{
- return (0);
+ return nonseekable_open(inode, file);
}
static int divas_close(struct inode *inode, struct file *file)
** write group_optimization
*/
static int
-write_grp_opt(struct file *file, const char *buffer, unsigned long count,
+write_grp_opt(struct file *file, const char __user *buffer, unsigned long count,
void *data)
{
diva_os_xdi_adapter_t *a = (diva_os_xdi_adapter_t *) data;
PISDN_ADAPTER IoAdapter = IoAdapters[a->controller - 1];
if ((count == 1) || (count == 2)) {
- switch (buffer[0]) {
+ char c;
+ if (get_user(c, buffer))
+ return -EFAULT;
+ switch (c) {
case '0':
IoAdapter->capi_cfg.cfg_1 &=
~DIVA_XDI_CAPI_CFG_1_GROUP_POPTIMIZATION_ON;
** write dynamic_l1_down
*/
static int
-write_d_l1_down(struct file *file, const char *buffer, unsigned long count,
+write_d_l1_down(struct file *file, const char __user *buffer, unsigned long count,
void *data)
{
diva_os_xdi_adapter_t *a = (diva_os_xdi_adapter_t *) data;
PISDN_ADAPTER IoAdapter = IoAdapters[a->controller - 1];
if ((count == 1) || (count == 2)) {
- switch (buffer[0]) {
+ char c;
+ if (get_user(c, buffer))
+ return -EFAULT;
+ switch (c) {
case '0':
IoAdapter->capi_cfg.cfg_1 &=
~DIVA_XDI_CAPI_CFG_1_DYNAMIC_L1_ON;
** info write
*/
static int
-info_write(struct file *file, const char *buffer, unsigned long count,
+info_write(struct file *file, const char __user *buffer, unsigned long count,
void *data)
{
diva_os_xdi_adapter_t *a = (diva_os_xdi_adapter_t *) data;
PISDN_ADAPTER IoAdapter = IoAdapters[a->controller - 1];
+ char c[4];
+
+ if (count <= 4)
+ return -EINVAL;
+
+ if (copy_from_user(c, buffer, 4))
+ return -EFAULT;
/* this is for test purposes only */
- if ((count > 4) && (!memcmp(buffer, "trap", 4))) {
+ if (!memcmp(c, "trap", 4)) {
(*(IoAdapter->os_trap_nfy_Fnc)) (IoAdapter, IoAdapter->ANum);
return (count);
}