aboutsummaryrefslogtreecommitdiffstats
path: root/fs/compat_ioctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/compat_ioctl.c')
-rw-r--r--fs/compat_ioctl.c120
1 files changed, 8 insertions, 112 deletions
diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c
index 97dba0d92348..7b3a03c7c6a9 100644
--- a/fs/compat_ioctl.c
+++ b/fs/compat_ioctl.c
@@ -58,7 +58,6 @@
58#include <linux/syscalls.h> 58#include <linux/syscalls.h>
59#include <linux/i2c.h> 59#include <linux/i2c.h>
60#include <linux/i2c-dev.h> 60#include <linux/i2c-dev.h>
61#include <linux/wireless.h>
62#include <linux/atalk.h> 61#include <linux/atalk.h>
63#include <linux/loop.h> 62#include <linux/loop.h>
64 63
@@ -69,9 +68,11 @@
69#include <linux/capi.h> 68#include <linux/capi.h>
70#include <linux/gigaset_dev.h> 69#include <linux/gigaset_dev.h>
71 70
71#ifdef CONFIG_BLOCK
72#include <scsi/scsi.h> 72#include <scsi/scsi.h>
73#include <scsi/scsi_ioctl.h> 73#include <scsi/scsi_ioctl.h>
74#include <scsi/sg.h> 74#include <scsi/sg.h>
75#endif
75 76
76#include <asm/uaccess.h> 77#include <asm/uaccess.h>
77#include <linux/ethtool.h> 78#include <linux/ethtool.h>
@@ -1757,64 +1758,6 @@ static int do_i2c_smbus_ioctl(unsigned int fd, unsigned int cmd, unsigned long a
1757 return sys_ioctl(fd, cmd, (unsigned long)tdata); 1758 return sys_ioctl(fd, cmd, (unsigned long)tdata);
1758} 1759}
1759 1760
1760struct compat_iw_point {
1761 compat_caddr_t pointer;
1762 __u16 length;
1763 __u16 flags;
1764};
1765
1766static int do_wireless_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
1767{
1768 struct iwreq __user *iwr;
1769 struct iwreq __user *iwr_u;
1770 struct iw_point __user *iwp;
1771 struct compat_iw_point __user *iwp_u;
1772 compat_caddr_t pointer_u;
1773 void __user *pointer;
1774 __u16 length, flags;
1775 int ret;
1776
1777 iwr_u = compat_ptr(arg);
1778 iwp_u = (struct compat_iw_point __user *) &iwr_u->u.data;
1779 iwr = compat_alloc_user_space(sizeof(*iwr));
1780 if (iwr == NULL)
1781 return -ENOMEM;
1782
1783 iwp = &iwr->u.data;
1784
1785 if (!access_ok(VERIFY_WRITE, iwr, sizeof(*iwr)))
1786 return -EFAULT;
1787
1788 if (__copy_in_user(&iwr->ifr_ifrn.ifrn_name[0],
1789 &iwr_u->ifr_ifrn.ifrn_name[0],
1790 sizeof(iwr->ifr_ifrn.ifrn_name)))
1791 return -EFAULT;
1792
1793 if (__get_user(pointer_u, &iwp_u->pointer) ||
1794 __get_user(length, &iwp_u->length) ||
1795 __get_user(flags, &iwp_u->flags))
1796 return -EFAULT;
1797
1798 if (__put_user(compat_ptr(pointer_u), &iwp->pointer) ||
1799 __put_user(length, &iwp->length) ||
1800 __put_user(flags, &iwp->flags))
1801 return -EFAULT;
1802
1803 ret = sys_ioctl(fd, cmd, (unsigned long) iwr);
1804
1805 if (__get_user(pointer, &iwp->pointer) ||
1806 __get_user(length, &iwp->length) ||
1807 __get_user(flags, &iwp->flags))
1808 return -EFAULT;
1809
1810 if (__put_user(ptr_to_compat(pointer), &iwp_u->pointer) ||
1811 __put_user(length, &iwp_u->length) ||
1812 __put_user(flags, &iwp_u->flags))
1813 return -EFAULT;
1814
1815 return ret;
1816}
1817
1818/* Since old style bridge ioctl's endup using SIOCDEVPRIVATE 1761/* Since old style bridge ioctl's endup using SIOCDEVPRIVATE
1819 * for some operations; this forces use of the newer bridge-utils that 1762 * for some operations; this forces use of the newer bridge-utils that
1820 * use compatiable ioctls 1763 * use compatiable ioctls
@@ -2024,6 +1967,7 @@ COMPATIBLE_IOCTL(GIO_UNISCRNMAP)
2024COMPATIBLE_IOCTL(PIO_UNISCRNMAP) 1967COMPATIBLE_IOCTL(PIO_UNISCRNMAP)
2025COMPATIBLE_IOCTL(PIO_FONTRESET) 1968COMPATIBLE_IOCTL(PIO_FONTRESET)
2026COMPATIBLE_IOCTL(PIO_UNIMAPCLR) 1969COMPATIBLE_IOCTL(PIO_UNIMAPCLR)
1970#ifdef CONFIG_BLOCK
2027/* Big S */ 1971/* Big S */
2028COMPATIBLE_IOCTL(SCSI_IOCTL_GET_IDLUN) 1972COMPATIBLE_IOCTL(SCSI_IOCTL_GET_IDLUN)
2029COMPATIBLE_IOCTL(SCSI_IOCTL_DOORLOCK) 1973COMPATIBLE_IOCTL(SCSI_IOCTL_DOORLOCK)
@@ -2033,6 +1977,7 @@ COMPATIBLE_IOCTL(SCSI_IOCTL_GET_BUS_NUMBER)
2033COMPATIBLE_IOCTL(SCSI_IOCTL_SEND_COMMAND) 1977COMPATIBLE_IOCTL(SCSI_IOCTL_SEND_COMMAND)
2034COMPATIBLE_IOCTL(SCSI_IOCTL_PROBE_HOST) 1978COMPATIBLE_IOCTL(SCSI_IOCTL_PROBE_HOST)
2035COMPATIBLE_IOCTL(SCSI_IOCTL_GET_PCI) 1979COMPATIBLE_IOCTL(SCSI_IOCTL_GET_PCI)
1980#endif
2036/* Big T */ 1981/* Big T */
2037COMPATIBLE_IOCTL(TUNSETNOCSUM) 1982COMPATIBLE_IOCTL(TUNSETNOCSUM)
2038COMPATIBLE_IOCTL(TUNSETDEBUG) 1983COMPATIBLE_IOCTL(TUNSETDEBUG)
@@ -2103,6 +2048,7 @@ COMPATIBLE_IOCTL(SIOCGIFVLAN)
2103COMPATIBLE_IOCTL(SIOCSIFVLAN) 2048COMPATIBLE_IOCTL(SIOCSIFVLAN)
2104COMPATIBLE_IOCTL(SIOCBRADDBR) 2049COMPATIBLE_IOCTL(SIOCBRADDBR)
2105COMPATIBLE_IOCTL(SIOCBRDELBR) 2050COMPATIBLE_IOCTL(SIOCBRDELBR)
2051#ifdef CONFIG_BLOCK
2106/* SG stuff */ 2052/* SG stuff */
2107COMPATIBLE_IOCTL(SG_SET_TIMEOUT) 2053COMPATIBLE_IOCTL(SG_SET_TIMEOUT)
2108COMPATIBLE_IOCTL(SG_GET_TIMEOUT) 2054COMPATIBLE_IOCTL(SG_GET_TIMEOUT)
@@ -2127,6 +2073,7 @@ COMPATIBLE_IOCTL(SG_SCSI_RESET)
2127COMPATIBLE_IOCTL(SG_GET_REQUEST_TABLE) 2073COMPATIBLE_IOCTL(SG_GET_REQUEST_TABLE)
2128COMPATIBLE_IOCTL(SG_SET_KEEP_ORPHAN) 2074COMPATIBLE_IOCTL(SG_SET_KEEP_ORPHAN)
2129COMPATIBLE_IOCTL(SG_GET_KEEP_ORPHAN) 2075COMPATIBLE_IOCTL(SG_GET_KEEP_ORPHAN)
2076#endif
2130/* PPP stuff */ 2077/* PPP stuff */
2131COMPATIBLE_IOCTL(PPPIOCGFLAGS) 2078COMPATIBLE_IOCTL(PPPIOCGFLAGS)
2132COMPATIBLE_IOCTL(PPPIOCSFLAGS) 2079COMPATIBLE_IOCTL(PPPIOCSFLAGS)
@@ -2399,6 +2346,7 @@ COMPATIBLE_IOCTL(HCIGETDEVLIST)
2399COMPATIBLE_IOCTL(HCIGETDEVINFO) 2346COMPATIBLE_IOCTL(HCIGETDEVINFO)
2400COMPATIBLE_IOCTL(HCIGETCONNLIST) 2347COMPATIBLE_IOCTL(HCIGETCONNLIST)
2401COMPATIBLE_IOCTL(HCIGETCONNINFO) 2348COMPATIBLE_IOCTL(HCIGETCONNINFO)
2349COMPATIBLE_IOCTL(HCIGETAUTHINFO)
2402COMPATIBLE_IOCTL(HCISETRAW) 2350COMPATIBLE_IOCTL(HCISETRAW)
2403COMPATIBLE_IOCTL(HCISETSCAN) 2351COMPATIBLE_IOCTL(HCISETSCAN)
2404COMPATIBLE_IOCTL(HCISETAUTH) 2352COMPATIBLE_IOCTL(HCISETAUTH)
@@ -2495,36 +2443,6 @@ COMPATIBLE_IOCTL(I2C_TENBIT)
2495COMPATIBLE_IOCTL(I2C_PEC) 2443COMPATIBLE_IOCTL(I2C_PEC)
2496COMPATIBLE_IOCTL(I2C_RETRIES) 2444COMPATIBLE_IOCTL(I2C_RETRIES)
2497COMPATIBLE_IOCTL(I2C_TIMEOUT) 2445COMPATIBLE_IOCTL(I2C_TIMEOUT)
2498/* wireless */
2499COMPATIBLE_IOCTL(SIOCSIWCOMMIT)
2500COMPATIBLE_IOCTL(SIOCGIWNAME)
2501COMPATIBLE_IOCTL(SIOCSIWNWID)
2502COMPATIBLE_IOCTL(SIOCGIWNWID)
2503COMPATIBLE_IOCTL(SIOCSIWFREQ)
2504COMPATIBLE_IOCTL(SIOCGIWFREQ)
2505COMPATIBLE_IOCTL(SIOCSIWMODE)
2506COMPATIBLE_IOCTL(SIOCGIWMODE)
2507COMPATIBLE_IOCTL(SIOCSIWSENS)
2508COMPATIBLE_IOCTL(SIOCGIWSENS)
2509COMPATIBLE_IOCTL(SIOCSIWRANGE)
2510COMPATIBLE_IOCTL(SIOCSIWPRIV)
2511COMPATIBLE_IOCTL(SIOCSIWSTATS)
2512COMPATIBLE_IOCTL(SIOCSIWAP)
2513COMPATIBLE_IOCTL(SIOCGIWAP)
2514COMPATIBLE_IOCTL(SIOCSIWRATE)
2515COMPATIBLE_IOCTL(SIOCGIWRATE)
2516COMPATIBLE_IOCTL(SIOCSIWRTS)
2517COMPATIBLE_IOCTL(SIOCGIWRTS)
2518COMPATIBLE_IOCTL(SIOCSIWFRAG)
2519COMPATIBLE_IOCTL(SIOCGIWFRAG)
2520COMPATIBLE_IOCTL(SIOCSIWTXPOW)
2521COMPATIBLE_IOCTL(SIOCGIWTXPOW)
2522COMPATIBLE_IOCTL(SIOCSIWRETRY)
2523COMPATIBLE_IOCTL(SIOCGIWRETRY)
2524COMPATIBLE_IOCTL(SIOCSIWPOWER)
2525COMPATIBLE_IOCTL(SIOCGIWPOWER)
2526COMPATIBLE_IOCTL(SIOCSIWAUTH)
2527COMPATIBLE_IOCTL(SIOCGIWAUTH)
2528/* hiddev */ 2446/* hiddev */
2529COMPATIBLE_IOCTL(HIDIOCGVERSION) 2447COMPATIBLE_IOCTL(HIDIOCGVERSION)
2530COMPATIBLE_IOCTL(HIDIOCAPPLICATION) 2448COMPATIBLE_IOCTL(HIDIOCAPPLICATION)
@@ -2755,29 +2673,7 @@ COMPATIBLE_IOCTL(USBDEVFS_IOCTL32)
2755HANDLE_IOCTL(I2C_FUNCS, w_long) 2673HANDLE_IOCTL(I2C_FUNCS, w_long)
2756HANDLE_IOCTL(I2C_RDWR, do_i2c_rdwr_ioctl) 2674HANDLE_IOCTL(I2C_RDWR, do_i2c_rdwr_ioctl)
2757HANDLE_IOCTL(I2C_SMBUS, do_i2c_smbus_ioctl) 2675HANDLE_IOCTL(I2C_SMBUS, do_i2c_smbus_ioctl)
2758/* wireless */ 2676/* bridge */
2759HANDLE_IOCTL(SIOCGIWRANGE, do_wireless_ioctl)
2760HANDLE_IOCTL(SIOCGIWPRIV, do_wireless_ioctl)
2761HANDLE_IOCTL(SIOCGIWSTATS, do_wireless_ioctl)
2762HANDLE_IOCTL(SIOCSIWSPY, do_wireless_ioctl)
2763HANDLE_IOCTL(SIOCGIWSPY, do_wireless_ioctl)
2764HANDLE_IOCTL(SIOCSIWTHRSPY, do_wireless_ioctl)
2765HANDLE_IOCTL(SIOCGIWTHRSPY, do_wireless_ioctl)
2766HANDLE_IOCTL(SIOCSIWMLME, do_wireless_ioctl)
2767HANDLE_IOCTL(SIOCGIWAPLIST, do_wireless_ioctl)
2768HANDLE_IOCTL(SIOCSIWSCAN, do_wireless_ioctl)
2769HANDLE_IOCTL(SIOCGIWSCAN, do_wireless_ioctl)
2770HANDLE_IOCTL(SIOCSIWESSID, do_wireless_ioctl)
2771HANDLE_IOCTL(SIOCGIWESSID, do_wireless_ioctl)
2772HANDLE_IOCTL(SIOCSIWNICKN, do_wireless_ioctl)
2773HANDLE_IOCTL(SIOCGIWNICKN, do_wireless_ioctl)
2774HANDLE_IOCTL(SIOCSIWENCODE, do_wireless_ioctl)
2775HANDLE_IOCTL(SIOCGIWENCODE, do_wireless_ioctl)
2776HANDLE_IOCTL(SIOCSIWGENIE, do_wireless_ioctl)
2777HANDLE_IOCTL(SIOCGIWGENIE, do_wireless_ioctl)
2778HANDLE_IOCTL(SIOCSIWENCODEEXT, do_wireless_ioctl)
2779HANDLE_IOCTL(SIOCGIWENCODEEXT, do_wireless_ioctl)
2780HANDLE_IOCTL(SIOCSIWPMKSA, do_wireless_ioctl)
2781HANDLE_IOCTL(SIOCSIFBR, old_bridge_ioctl) 2677HANDLE_IOCTL(SIOCSIFBR, old_bridge_ioctl)
2782HANDLE_IOCTL(SIOCGIFBR, old_bridge_ioctl) 2678HANDLE_IOCTL(SIOCGIFBR, old_bridge_ioctl)
2783/* Not implemented in the native kernel */ 2679/* Not implemented in the native kernel */