Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
f20bf018
Commit
f20bf018
authored
Sep 22, 2002
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/home/davem/BK/sparc-2.5
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
e7144e64
2d35bd3f
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
384 additions
and
12 deletions
+384
-12
arch/sparc64/kernel/ioctl32.c
arch/sparc64/kernel/ioctl32.c
+322
-0
arch/sparc64/kernel/sys_sparc32.c
arch/sparc64/kernel/sys_sparc32.c
+62
-12
No files found.
arch/sparc64/kernel/ioctl32.c
View file @
f20bf018
...
...
@@ -46,6 +46,7 @@
#include <linux/netdevice.h>
#include <linux/raw.h>
#include <linux/smb_fs.h>
#include <linux/ncp_fs.h>
#include <linux/blkpg.h>
#include <linux/blk.h>
#include <linux/elevator.h>
...
...
@@ -2225,6 +2226,307 @@ static int do_smb_getmountuid(unsigned int fd, unsigned int cmd, unsigned long a
return
err
;
}
struct
ncp_ioctl_request_32
{
unsigned
int
function
;
unsigned
int
size
;
__kernel_caddr_t32
data
;
};
struct
ncp_fs_info_v2_32
{
int
version
;
unsigned
int
mounted_uid
;
unsigned
int
connection
;
unsigned
int
buffer_size
;
unsigned
int
volume_number
;
__u32
directory_id
;
__u32
dummy1
;
__u32
dummy2
;
__u32
dummy3
;
};
struct
ncp_objectname_ioctl_32
{
int
auth_type
;
unsigned
int
object_name_len
;
__kernel_caddr_t32
object_name
;
/* an userspace data, in most cases user name */
};
struct
ncp_privatedata_ioctl_32
{
unsigned
int
len
;
__kernel_caddr_t32
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, unsigned int)
#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
n
;
mm_segment_t
old_fs
;
int
err
;
if
(
copy_from_user
(
&
n32
,
(
struct
ncp_ioctl_request_32
*
)
arg
,
sizeof
(
n32
)))
return
-
EFAULT
;
n
.
function
=
n32
.
function
;
n
.
size
=
n32
.
size
;
if
(
n
.
size
>
65536
)
return
-
EINVAL
;
n
.
data
=
vmalloc
(
65536
);
/* 65536 must be same as NCP_PACKET_SIZE_INTERNAL in ncpfs */
if
(
!
n
.
data
)
return
-
ENOMEM
;
err
=
-
EFAULT
;
if
(
copy_from_user
(
n
.
data
,
A
(
n32
.
data
),
n
.
size
))
goto
out
;
old_fs
=
get_fs
();
set_fs
(
KERNEL_DS
);
err
=
sys_ioctl
(
fd
,
NCP_IOC_NCPREQUEST
,
(
unsigned
long
)
&
n
);
set_fs
(
old_fs
);
if
(
err
<=
0
)
goto
out
;
if
(
err
>
65536
)
{
err
=
-
EINVAL
;
goto
out
;
}
if
(
copy_to_user
(
A
(
n32
.
data
),
n
.
data
,
err
))
{
err
=
-
EFAULT
;
goto
out
;
}
out:
vfree
(
n
.
data
);
return
err
;
}
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
*
)
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
,
(
struct
ncp_fs_info_v2_32
*
)
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
((
struct
ncp_fs_info_v2_32
*
)
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
;
struct
ncp_objectname_ioctl
n
;
mm_segment_t
old_fs
;
int
err
;
size_t
tl
;
if
(
copy_from_user
(
&
n32
,
(
struct
ncp_objectname_ioctl_32
*
)
arg
,
sizeof
(
n32
)))
return
-
EFAULT
;
n
.
object_name_len
=
tl
=
n32
.
object_name_len
;
if
(
tl
)
{
n
.
object_name
=
kmalloc
(
tl
,
GFP_KERNEL
);
if
(
!
n
.
object_name
)
return
-
ENOMEM
;
}
else
{
n
.
object_name
=
NULL
;
}
old_fs
=
get_fs
();
set_fs
(
KERNEL_DS
);
err
=
sys_ioctl
(
fd
,
NCP_IOC_GETOBJECTNAME
,
(
unsigned
long
)
&
n
);
set_fs
(
old_fs
);
if
(
err
)
goto
out
;
if
(
tl
>
n
.
object_name_len
)
tl
=
n
.
object_name_len
;
err
=
-
EFAULT
;
if
(
tl
&&
copy_to_user
(
A
(
n32
.
object_name
),
n
.
object_name
,
tl
))
goto
out
;
n32
.
auth_type
=
n
.
auth_type
;
n32
.
object_name_len
=
n
.
object_name_len
;
if
(
copy_to_user
((
struct
ncp_objectname_ioctl_32
*
)
arg
,
&
n32
,
sizeof
(
n32
)))
goto
out
;
err
=
0
;
out:
if
(
n
.
object_name
)
kfree
(
n
.
object_name
);
return
err
;
}
static
int
do_ncp_setobjectname
(
unsigned
int
fd
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
ncp_objectname_ioctl_32
n32
;
struct
ncp_objectname_ioctl
n
;
mm_segment_t
old_fs
;
int
err
;
size_t
tl
;
if
(
copy_from_user
(
&
n32
,
(
struct
ncp_objectname_ioctl_32
*
)
arg
,
sizeof
(
n32
)))
return
-
EFAULT
;
n
.
auth_type
=
n32
.
auth_type
;
n
.
object_name_len
=
tl
=
n32
.
object_name_len
;
if
(
tl
)
{
n
.
object_name
=
kmalloc
(
tl
,
GFP_KERNEL
);
if
(
!
n
.
object_name
)
return
-
ENOMEM
;
err
=
-
EFAULT
;
if
(
copy_from_user
(
n
.
object_name
,
A
(
n32
.
object_name
),
tl
))
goto
out
;
}
else
{
n
.
object_name
=
NULL
;
}
old_fs
=
get_fs
();
set_fs
(
KERNEL_DS
);
err
=
sys_ioctl
(
fd
,
NCP_IOC_SETOBJECTNAME
,
(
unsigned
long
)
&
n
);
set_fs
(
old_fs
);
out:
if
(
n
.
object_name
)
kfree
(
n
.
object_name
);
return
err
;
}
static
int
do_ncp_getprivatedata
(
unsigned
int
fd
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
ncp_privatedata_ioctl_32
n32
;
struct
ncp_privatedata_ioctl
n
;
mm_segment_t
old_fs
;
int
err
;
size_t
tl
;
if
(
copy_from_user
(
&
n32
,
(
struct
ncp_privatedata_ioctl_32
*
)
arg
,
sizeof
(
n32
)))
return
-
EFAULT
;
n
.
len
=
tl
=
n32
.
len
;
if
(
tl
)
{
n
.
data
=
kmalloc
(
tl
,
GFP_KERNEL
);
if
(
!
n
.
data
)
return
-
ENOMEM
;
}
else
{
n
.
data
=
NULL
;
}
old_fs
=
get_fs
();
set_fs
(
KERNEL_DS
);
err
=
sys_ioctl
(
fd
,
NCP_IOC_GETPRIVATEDATA
,
(
unsigned
long
)
&
n
);
set_fs
(
old_fs
);
if
(
err
)
goto
out
;
if
(
tl
>
n
.
len
)
tl
=
n
.
len
;
err
=
-
EFAULT
;
if
(
tl
&&
copy_to_user
(
A
(
n32
.
data
),
n
.
data
,
tl
))
goto
out
;
n32
.
len
=
n
.
len
;
if
(
copy_to_user
((
struct
ncp_privatedata_ioctl_32
*
)
arg
,
&
n32
,
sizeof
(
n32
)))
goto
out
;
err
=
0
;
out:
if
(
n
.
data
)
kfree
(
n
.
data
);
return
err
;
}
static
int
do_ncp_setprivatedata
(
unsigned
int
fd
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
ncp_privatedata_ioctl_32
n32
;
struct
ncp_privatedata_ioctl
n
;
mm_segment_t
old_fs
;
int
err
;
size_t
tl
;
if
(
copy_from_user
(
&
n32
,
(
struct
ncp_privatedata_ioctl_32
*
)
arg
,
sizeof
(
n32
)))
return
-
EFAULT
;
n
.
len
=
tl
=
n32
.
len
;
if
(
tl
)
{
n
.
data
=
kmalloc
(
tl
,
GFP_KERNEL
);
if
(
!
n
.
data
)
return
-
ENOMEM
;
err
=
-
EFAULT
;
if
(
copy_from_user
(
n
.
data
,
A
(
n32
.
data
),
tl
))
goto
out
;
}
else
{
n
.
data
=
NULL
;
}
old_fs
=
get_fs
();
set_fs
(
KERNEL_DS
);
err
=
sys_ioctl
(
fd
,
NCP_IOC_SETPRIVATEDATA
,
(
unsigned
long
)
&
n
);
set_fs
(
old_fs
);
out:
if
(
n
.
data
)
kfree
(
n
.
data
);
return
err
;
}
struct
atmif_sioc32
{
int
number
;
int
length
;
...
...
@@ -4508,6 +4810,18 @@ COMPATIBLE_IOCTL(RAW_SETBIND)
COMPATIBLE_IOCTL
(
RAW_GETBIND
)
/* SMB ioctls which do not need any translations */
COMPATIBLE_IOCTL
(
SMB_IOC_NEWCONN
)
/* NCP ioctls which do not need any translations */
COMPATIBLE_IOCTL
(
NCP_IOC_CONN_LOGGED_IN
)
COMPATIBLE_IOCTL
(
NCP_IOC_SIGN_INIT
)
COMPATIBLE_IOCTL
(
NCP_IOC_SIGN_WANTED
)
COMPATIBLE_IOCTL
(
NCP_IOC_SET_SIGN_WANTED
)
COMPATIBLE_IOCTL
(
NCP_IOC_LOCKUNLOCK
)
COMPATIBLE_IOCTL
(
NCP_IOC_GETROOT
)
COMPATIBLE_IOCTL
(
NCP_IOC_SETROOT
)
COMPATIBLE_IOCTL
(
NCP_IOC_GETCHARSETS
)
COMPATIBLE_IOCTL
(
NCP_IOC_SETCHARSETS
)
COMPATIBLE_IOCTL
(
NCP_IOC_GETDENTRYTTL
)
COMPATIBLE_IOCTL
(
NCP_IOC_SETDENTRYTTL
)
/* Little a */
COMPATIBLE_IOCTL
(
ATMSIGD_CTRL
)
COMPATIBLE_IOCTL
(
ATMARPD_CTRL
)
...
...
@@ -4754,6 +5068,14 @@ HANDLE_IOCTL(VIDIOCSFREQ32, do_video_ioctl)
/* One SMB ioctl needs translations. */
#define SMB_IOC_GETMOUNTUID_32 _IOR('u', 1, __kernel_uid_t32)
HANDLE_IOCTL
(
SMB_IOC_GETMOUNTUID_32
,
do_smb_getmountuid
)
/* NCPFS */
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
)
HANDLE_IOCTL
(
ATM_GETLINKRATE32
,
do_atm_ioctl
)
HANDLE_IOCTL
(
ATM_GETNAMES32
,
do_atm_ioctl
)
HANDLE_IOCTL
(
ATM_GETTYPE32
,
do_atm_ioctl
)
...
...
arch/sparc64/kernel/sys_sparc32.c
View file @
f20bf018
...
...
@@ -1489,7 +1489,7 @@ asmlinkage int sys32_sysfs(int option, u32 arg1, u32 arg2)
return
sys_sysfs
(
option
,
arg1
,
arg2
);
}
struct
ncp_mount_data32
{
struct
ncp_mount_data32
_v3
{
int
version
;
unsigned
int
ncp_fd
;
__kernel_uid_t32
mounted_uid
;
...
...
@@ -1504,19 +1504,69 @@ struct ncp_mount_data32 {
__kernel_mode_t32
dir_mode
;
};
struct
ncp_mount_data32_v4
{
int
version
;
/* all members below are "long" in ABI ... i.e. 32bit on sparc32, while 64bits on sparc64 */
unsigned
int
flags
;
unsigned
int
mounted_uid
;
int
wdog_pid
;
unsigned
int
ncp_fd
;
unsigned
int
time_out
;
unsigned
int
retry_count
;
unsigned
int
uid
;
unsigned
int
gid
;
unsigned
int
file_mode
;
unsigned
int
dir_mode
;
};
static
void
*
do_ncp_super_data_conv
(
void
*
raw_data
)
{
struct
ncp_mount_data
news
,
*
n
=
&
news
;
struct
ncp_mount_data32
*
n32
=
(
struct
ncp_mount_data32
*
)
raw_data
;
n
->
dir_mode
=
n32
->
dir_mode
;
n
->
file_mode
=
n32
->
file_mode
;
n
->
gid
=
low2highgid
(
n32
->
gid
);
n
->
uid
=
low2highuid
(
n32
->
uid
);
memmove
(
n
->
mounted_vol
,
n32
->
mounted_vol
,
(
sizeof
(
n32
->
mounted_vol
)
+
3
*
sizeof
(
unsigned
int
)));
n
->
wdog_pid
=
n32
->
wdog_pid
;
n
->
mounted_uid
=
low2highuid
(
n32
->
mounted_uid
);
memcpy
(
raw_data
,
n
,
sizeof
(
struct
ncp_mount_data
));
switch
(
*
(
int
*
)
raw_data
)
{
case
NCP_MOUNT_VERSION
:
{
struct
ncp_mount_data
news
,
*
n
=
&
news
;
struct
ncp_mount_data32_v3
*
n32
=
(
struct
ncp_mount_data32_v3
*
)
raw_data
;
n
->
version
=
n32
->
version
;
n
->
ncp_fd
=
n32
->
ncp_fd
;
n
->
mounted_uid
=
low2highuid
(
n32
->
mounted_uid
);
n
->
wdog_pid
=
n32
->
wdog_pid
;
memmove
(
n
->
mounted_vol
,
n32
->
mounted_vol
,
sizeof
(
n32
->
mounted_vol
));
n
->
time_out
=
n32
->
time_out
;
n
->
retry_count
=
n32
->
retry_count
;
n
->
flags
=
n32
->
flags
;
n
->
uid
=
low2highuid
(
n32
->
uid
);
n
->
gid
=
low2highgid
(
n32
->
gid
);
n
->
file_mode
=
n32
->
file_mode
;
n
->
dir_mode
=
n32
->
dir_mode
;
memcpy
(
raw_data
,
n
,
sizeof
(
*
n
));
}
break
;
case
NCP_MOUNT_VERSION_V4
:
{
struct
ncp_mount_data_v4
news
,
*
n
=
&
news
;
struct
ncp_mount_data32_v4
*
n32
=
(
struct
ncp_mount_data32_v4
*
)
raw_data
;
n
->
version
=
n32
->
version
;
n
->
flags
=
n32
->
flags
;
n
->
mounted_uid
=
n32
->
mounted_uid
;
n
->
wdog_pid
=
n32
->
wdog_pid
;
n
->
ncp_fd
=
n32
->
ncp_fd
;
n
->
time_out
=
n32
->
time_out
;
n
->
retry_count
=
n32
->
retry_count
;
n
->
uid
=
n32
->
uid
;
n
->
gid
=
n32
->
gid
;
n
->
file_mode
=
n32
->
file_mode
;
n
->
dir_mode
=
n32
->
dir_mode
;
memcpy
(
raw_data
,
n
,
sizeof
(
*
n
));
}
break
;
default:
/* do not touch unknown structures */
break
;
}
return
raw_data
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment