Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 37647
b: refs/heads/master
c: 54f67f6
h: refs/heads/master
i:
  37645: d1383e3
  37643: e683af2
  37639: 3ee08d8
  37631: 072cd78
v: v3
  • Loading branch information
Petr Vandrovec authored and Linus Torvalds committed Oct 1, 2006
1 parent e1b270b commit 7967f29
Show file tree
Hide file tree
Showing 7 changed files with 218 additions and 240 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 89bbc03c01f68e627a2b120963f136e2815f0d84
refs/heads/master: 54f67f631dfc25ca7a8b19200e34013abc974337
198 changes: 0 additions & 198 deletions trunk/fs/compat_ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@
#include <linux/ctype.h>
#include <linux/ioctl32.h>
#include <linux/syscalls.h>
#include <linux/ncp_fs.h>
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <linux/wireless.h>
Expand Down Expand Up @@ -2348,193 +2347,6 @@ static int rtc_ioctl(unsigned fd, unsigned cmd, unsigned long arg)
}
}

#if defined(CONFIG_NCP_FS) || defined(CONFIG_NCP_FS_MODULE)
struct ncp_ioctl_request_32 {
u32 function;
u32 size;
compat_caddr_t data;
};

struct ncp_fs_info_v2_32 {
s32 version;
u32 mounted_uid;
u32 connection;
u32 buffer_size;

u32 volume_number;
u32 directory_id;

u32 dummy1;
u32 dummy2;
u32 dummy3;
};

struct ncp_objectname_ioctl_32
{
s32 auth_type;
u32 object_name_len;
compat_caddr_t object_name; /* an userspace data, in most cases user name */
};

struct ncp_privatedata_ioctl_32
{
u32 len;
compat_caddr_t data; /* ~1000 for NDS */
};

#define NCP_IOC_NCPREQUEST_32 _IOR('n', 1, struct ncp_ioctl_request_32)
#define NCP_IOC_GETMOUNTUID2_32 _IOW('n', 2, u32)
#define NCP_IOC_GET_FS_INFO_V2_32 _IOWR('n', 4, struct ncp_fs_info_v2_32)
#define NCP_IOC_GETOBJECTNAME_32 _IOWR('n', 9, struct ncp_objectname_ioctl_32)
#define NCP_IOC_SETOBJECTNAME_32 _IOR('n', 9, struct ncp_objectname_ioctl_32)
#define NCP_IOC_GETPRIVATEDATA_32 _IOWR('n', 10, struct ncp_privatedata_ioctl_32)
#define NCP_IOC_SETPRIVATEDATA_32 _IOR('n', 10, struct ncp_privatedata_ioctl_32)

static int do_ncp_ncprequest(unsigned int fd, unsigned int cmd, unsigned long arg)
{
struct ncp_ioctl_request_32 n32;
struct ncp_ioctl_request __user *p = compat_alloc_user_space(sizeof(*p));

if (copy_from_user(&n32, compat_ptr(arg), sizeof(n32)) ||
put_user(n32.function, &p->function) ||
put_user(n32.size, &p->size) ||
put_user(compat_ptr(n32.data), &p->data))
return -EFAULT;

return sys_ioctl(fd, NCP_IOC_NCPREQUEST, (unsigned long)p);
}

static int do_ncp_getmountuid2(unsigned int fd, unsigned int cmd, unsigned long arg)
{
mm_segment_t old_fs = get_fs();
__kernel_uid_t kuid;
int err;

cmd = NCP_IOC_GETMOUNTUID2;

set_fs(KERNEL_DS);
err = sys_ioctl(fd, cmd, (unsigned long)&kuid);
set_fs(old_fs);

if (!err)
err = put_user(kuid,
(unsigned int __user *) compat_ptr(arg));

return err;
}

static int do_ncp_getfsinfo2(unsigned int fd, unsigned int cmd, unsigned long arg)
{
mm_segment_t old_fs = get_fs();
struct ncp_fs_info_v2_32 n32;
struct ncp_fs_info_v2 n;
int err;

if (copy_from_user(&n32, compat_ptr(arg), sizeof(n32)))
return -EFAULT;
if (n32.version != NCP_GET_FS_INFO_VERSION_V2)
return -EINVAL;
n.version = NCP_GET_FS_INFO_VERSION_V2;

set_fs(KERNEL_DS);
err = sys_ioctl(fd, NCP_IOC_GET_FS_INFO_V2, (unsigned long)&n);
set_fs(old_fs);

if (!err) {
n32.version = n.version;
n32.mounted_uid = n.mounted_uid;
n32.connection = n.connection;
n32.buffer_size = n.buffer_size;
n32.volume_number = n.volume_number;
n32.directory_id = n.directory_id;
n32.dummy1 = n.dummy1;
n32.dummy2 = n.dummy2;
n32.dummy3 = n.dummy3;
err = copy_to_user(compat_ptr(arg), &n32, sizeof(n32)) ? -EFAULT : 0;
}
return err;
}

static int do_ncp_getobjectname(unsigned int fd, unsigned int cmd, unsigned long arg)
{
struct ncp_objectname_ioctl_32 n32, __user *p32 = compat_ptr(arg);
struct ncp_objectname_ioctl __user *p = compat_alloc_user_space(sizeof(*p));
s32 auth_type;
u32 name_len;
int err;

if (copy_from_user(&n32, p32, sizeof(n32)) ||
put_user(n32.object_name_len, &p->object_name_len) ||
put_user(compat_ptr(n32.object_name), &p->object_name))
return -EFAULT;

err = sys_ioctl(fd, NCP_IOC_GETOBJECTNAME, (unsigned long)p);
if (err)
return err;

if (get_user(auth_type, &p->auth_type) ||
put_user(auth_type, &p32->auth_type) ||
get_user(name_len, &p->object_name_len) ||
put_user(name_len, &p32->object_name_len))
return -EFAULT;

return 0;
}

static int do_ncp_setobjectname(unsigned int fd, unsigned int cmd, unsigned long arg)
{
struct ncp_objectname_ioctl_32 n32, __user *p32 = compat_ptr(arg);
struct ncp_objectname_ioctl __user *p = compat_alloc_user_space(sizeof(*p));

if (copy_from_user(&n32, p32, sizeof(n32)) ||
put_user(n32.auth_type, &p->auth_type) ||
put_user(n32.object_name_len, &p->object_name_len) ||
put_user(compat_ptr(n32.object_name), &p->object_name))
return -EFAULT;

return sys_ioctl(fd, NCP_IOC_SETOBJECTNAME, (unsigned long)p);
}

static int do_ncp_getprivatedata(unsigned int fd, unsigned int cmd, unsigned long arg)
{
struct ncp_privatedata_ioctl_32 n32, __user *p32 = compat_ptr(arg);
struct ncp_privatedata_ioctl __user *p =
compat_alloc_user_space(sizeof(*p));
u32 len;
int err;

if (copy_from_user(&n32, p32, sizeof(n32)) ||
put_user(n32.len, &p->len) ||
put_user(compat_ptr(n32.data), &p->data))
return -EFAULT;

err = sys_ioctl(fd, NCP_IOC_GETPRIVATEDATA, (unsigned long)p);
if (err)
return err;

if (get_user(len, &p->len) ||
put_user(len, &p32->len))
return -EFAULT;

return 0;
}

static int do_ncp_setprivatedata(unsigned int fd, unsigned int cmd, unsigned long arg)
{
struct ncp_privatedata_ioctl_32 n32;
struct ncp_privatedata_ioctl_32 __user *p32 = compat_ptr(arg);
struct ncp_privatedata_ioctl __user *p =
compat_alloc_user_space(sizeof(*p));

if (copy_from_user(&n32, p32, sizeof(n32)) ||
put_user(n32.len, &p->len) ||
put_user(compat_ptr(n32.data), &p->data))
return -EFAULT;

return sys_ioctl(fd, NCP_IOC_SETPRIVATEDATA, (unsigned long)p);
}
#endif

static int
lp_timeout_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
{
Expand Down Expand Up @@ -2748,16 +2560,6 @@ HANDLE_IOCTL(RTC_IRQP_SET32, rtc_ioctl)
HANDLE_IOCTL(RTC_EPOCH_READ32, rtc_ioctl)
HANDLE_IOCTL(RTC_EPOCH_SET32, rtc_ioctl)

#if defined(CONFIG_NCP_FS) || defined(CONFIG_NCP_FS_MODULE)
HANDLE_IOCTL(NCP_IOC_NCPREQUEST_32, do_ncp_ncprequest)
HANDLE_IOCTL(NCP_IOC_GETMOUNTUID2_32, do_ncp_getmountuid2)
HANDLE_IOCTL(NCP_IOC_GET_FS_INFO_V2_32, do_ncp_getfsinfo2)
HANDLE_IOCTL(NCP_IOC_GETOBJECTNAME_32, do_ncp_getobjectname)
HANDLE_IOCTL(NCP_IOC_SETOBJECTNAME_32, do_ncp_setobjectname)
HANDLE_IOCTL(NCP_IOC_GETPRIVATEDATA_32, do_ncp_getprivatedata)
HANDLE_IOCTL(NCP_IOC_SETPRIVATEDATA_32, do_ncp_setprivatedata)
#endif

/* dvb */
HANDLE_IOCTL(VIDEO_GET_EVENT, do_video_get_event)
HANDLE_IOCTL(VIDEO_STILLPICTURE, do_video_stillpicture)
Expand Down
3 changes: 3 additions & 0 deletions trunk/fs/ncpfs/dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ const struct file_operations ncp_dir_operations =
.read = generic_read_dir,
.readdir = ncp_readdir,
.ioctl = ncp_ioctl,
#ifdef CONFIG_COMPAT
.compat_ioctl = ncp_compat_ioctl,
#endif
};

struct inode_operations ncp_dir_inode_operations =
Expand Down
3 changes: 3 additions & 0 deletions trunk/fs/ncpfs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,9 @@ const struct file_operations ncp_file_operations =
.read = ncp_file_read,
.write = ncp_file_write,
.ioctl = ncp_ioctl,
#ifdef CONFIG_COMPAT
.compat_ioctl = ncp_compat_ioctl,
#endif
.mmap = ncp_mmap,
.release = ncp_release,
.fsync = ncp_fsync,
Expand Down
Loading

0 comments on commit 7967f29

Please sign in to comment.