aboutsummaryrefslogtreecommitdiffstats
path: root/fs/compat.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2011-06-21 01:27:43 -0400
committerJ. Bruce Fields <bfields@redhat.com>2011-07-15 18:58:42 -0400
commit49b28684fdba2c84a3b8e54aaa0faa9ce2e4f140 (patch)
treec64ee1e754e291d5a917417b25026e681d8a3d0d /fs/compat.c
parent094b5d74f4005ae1cc90688f2c814e00937809a8 (diff)
nfsd: Remove deprecated nfsctl system call and related code.
As promised in feature-removal-schedule.txt it is time to remove the nfsctl system call. Userspace has perferred to not use this call throughout 2.6 and it has been excluded in the default configuration since 2.6.36 (9 months ago). So this patch removes all the code that was being compiled out. There are still references to sys_nfsctl in various arch systemcall tables and related code. These should be cleaned out too, probably in the next merge window. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/compat.c')
-rw-r--r--fs/compat.c246
1 files changed, 0 insertions, 246 deletions
diff --git a/fs/compat.c b/fs/compat.c
index 0ea00832de23..0b48d018e38a 100644
--- a/fs/compat.c
+++ b/fs/compat.c
@@ -1675,256 +1675,10 @@ asmlinkage long compat_sys_ppoll(struct pollfd __user *ufds,
1675} 1675}
1676#endif /* HAVE_SET_RESTORE_SIGMASK */ 1676#endif /* HAVE_SET_RESTORE_SIGMASK */
1677 1677
1678#if (defined(CONFIG_NFSD) || defined(CONFIG_NFSD_MODULE)) && !defined(CONFIG_NFSD_DEPRECATED)
1679/* Stuff for NFS server syscalls... */
1680struct compat_nfsctl_svc {
1681 u16 svc32_port;
1682 s32 svc32_nthreads;
1683};
1684
1685struct compat_nfsctl_client {
1686 s8 cl32_ident[NFSCLNT_IDMAX+1];
1687 s32 cl32_naddr;
1688 struct in_addr cl32_addrlist[NFSCLNT_ADDRMAX];
1689 s32 cl32_fhkeytype;
1690 s32 cl32_fhkeylen;
1691 u8 cl32_fhkey[NFSCLNT_KEYMAX];
1692};
1693
1694struct compat_nfsctl_export {
1695 char ex32_client[NFSCLNT_IDMAX+1];
1696 char ex32_path[NFS_MAXPATHLEN+1];
1697 compat_dev_t ex32_dev;
1698 compat_ino_t ex32_ino;
1699 compat_int_t ex32_flags;
1700 __compat_uid_t ex32_anon_uid;
1701 __compat_gid_t ex32_anon_gid;
1702};
1703
1704struct compat_nfsctl_fdparm {
1705 struct sockaddr gd32_addr;
1706 s8 gd32_path[NFS_MAXPATHLEN+1];
1707 compat_int_t gd32_version;
1708};
1709
1710struct compat_nfsctl_fsparm {
1711 struct sockaddr gd32_addr;
1712 s8 gd32_path[NFS_MAXPATHLEN+1];
1713 compat_int_t gd32_maxlen;
1714};
1715
1716struct compat_nfsctl_arg {
1717 compat_int_t ca32_version; /* safeguard */
1718 union {
1719 struct compat_nfsctl_svc u32_svc;
1720 struct compat_nfsctl_client u32_client;
1721 struct compat_nfsctl_export u32_export;
1722 struct compat_nfsctl_fdparm u32_getfd;
1723 struct compat_nfsctl_fsparm u32_getfs;
1724 } u;
1725#define ca32_svc u.u32_svc
1726#define ca32_client u.u32_client
1727#define ca32_export u.u32_export
1728#define ca32_getfd u.u32_getfd
1729#define ca32_getfs u.u32_getfs
1730};
1731
1732union compat_nfsctl_res {
1733 __u8 cr32_getfh[NFS_FHSIZE];
1734 struct knfsd_fh cr32_getfs;
1735};
1736
1737static int compat_nfs_svc_trans(struct nfsctl_arg *karg,
1738 struct compat_nfsctl_arg __user *arg)
1739{
1740 if (!access_ok(VERIFY_READ, &arg->ca32_svc, sizeof(arg->ca32_svc)) ||
1741 get_user(karg->ca_version, &arg->ca32_version) ||
1742 __get_user(karg->ca_svc.svc_port, &arg->ca32_svc.svc32_port) ||
1743 __get_user(karg->ca_svc.svc_nthreads,
1744 &arg->ca32_svc.svc32_nthreads))
1745 return -EFAULT;
1746 return 0;
1747}
1748
1749static int compat_nfs_clnt_trans(struct nfsctl_arg *karg,
1750 struct compat_nfsctl_arg __user *arg)
1751{
1752 if (!access_ok(VERIFY_READ, &arg->ca32_client,
1753 sizeof(arg->ca32_client)) ||
1754 get_user(karg->ca_version, &arg->ca32_version) ||
1755 __copy_from_user(&karg->ca_client.cl_ident[0],
1756 &arg->ca32_client.cl32_ident[0],
1757 NFSCLNT_IDMAX) ||
1758 __get_user(karg->ca_client.cl_naddr,
1759 &arg->ca32_client.cl32_naddr) ||
1760 __copy_from_user(&karg->ca_client.cl_addrlist[0],
1761 &arg->ca32_client.cl32_addrlist[0],
1762 (sizeof(struct in_addr) * NFSCLNT_ADDRMAX)) ||
1763 __get_user(karg->ca_client.cl_fhkeytype,
1764 &arg->ca32_client.cl32_fhkeytype) ||
1765 __get_user(karg->ca_client.cl_fhkeylen,
1766 &arg->ca32_client.cl32_fhkeylen) ||
1767 __copy_from_user(&karg->ca_client.cl_fhkey[0],
1768 &arg->ca32_client.cl32_fhkey[0],
1769 NFSCLNT_KEYMAX))
1770 return -EFAULT;
1771
1772 return 0;
1773}
1774
1775static int compat_nfs_exp_trans(struct nfsctl_arg *karg,
1776 struct compat_nfsctl_arg __user *arg)
1777{
1778 if (!access_ok(VERIFY_READ, &arg->ca32_export,
1779 sizeof(arg->ca32_export)) ||
1780 get_user(karg->ca_version, &arg->ca32_version) ||
1781 __copy_from_user(&karg->ca_export.ex_client[0],
1782 &arg->ca32_export.ex32_client[0],
1783 NFSCLNT_IDMAX) ||
1784 __copy_from_user(&karg->ca_export.ex_path[0],
1785 &arg->ca32_export.ex32_path[0],
1786 NFS_MAXPATHLEN) ||
1787 __get_user(karg->ca_export.ex_dev,
1788 &arg->ca32_export.ex32_dev) ||
1789 __get_user(karg->ca_export.ex_ino,
1790 &arg->ca32_export.ex32_ino) ||
1791 __get_user(karg->ca_export.ex_flags,
1792 &arg->ca32_export.ex32_flags) ||
1793 __get_user(karg->ca_export.ex_anon_uid,
1794 &arg->ca32_export.ex32_anon_uid) ||
1795 __get_user(karg->ca_export.ex_anon_gid,
1796 &arg->ca32_export.ex32_anon_gid))
1797 return -EFAULT;
1798 SET_UID(karg->ca_export.ex_anon_uid, karg->ca_export.ex_anon_uid);
1799 SET_GID(karg->ca_export.ex_anon_gid, karg->ca_export.ex_anon_gid);
1800
1801 return 0;
1802}
1803
1804static int compat_nfs_getfd_trans(struct nfsctl_arg *karg,
1805 struct compat_nfsctl_arg __user *arg)
1806{
1807 if (!access_ok(VERIFY_READ, &arg->ca32_getfd,
1808 sizeof(arg->ca32_getfd)) ||
1809 get_user(karg->ca_version, &arg->ca32_version) ||
1810 __copy_from_user(&karg->ca_getfd.gd_addr,
1811 &arg->ca32_getfd.gd32_addr,
1812 (sizeof(struct sockaddr))) ||
1813 __copy_from_user(&karg->ca_getfd.gd_path,
1814 &arg->ca32_getfd.gd32_path,
1815 (NFS_MAXPATHLEN+1)) ||
1816 __get_user(karg->ca_getfd.gd_version,
1817 &arg->ca32_getfd.gd32_version))
1818 return -EFAULT;
1819
1820 return 0;
1821}
1822
1823static int compat_nfs_getfs_trans(struct nfsctl_arg *karg,
1824 struct compat_nfsctl_arg __user *arg)
1825{
1826 if (!access_ok(VERIFY_READ,&arg->ca32_getfs,sizeof(arg->ca32_getfs)) ||
1827 get_user(karg->ca_version, &arg->ca32_version) ||
1828 __copy_from_user(&karg->ca_getfs.gd_addr,
1829 &arg->ca32_getfs.gd32_addr,
1830 (sizeof(struct sockaddr))) ||
1831 __copy_from_user(&karg->ca_getfs.gd_path,
1832 &arg->ca32_getfs.gd32_path,
1833 (NFS_MAXPATHLEN+1)) ||
1834 __get_user(karg->ca_getfs.gd_maxlen,
1835 &arg->ca32_getfs.gd32_maxlen))
1836 return -EFAULT;
1837
1838 return 0;
1839}
1840
1841/* This really doesn't need translations, we are only passing
1842 * back a union which contains opaque nfs file handle data.
1843 */
1844static int compat_nfs_getfh_res_trans(union nfsctl_res *kres,
1845 union compat_nfsctl_res __user *res)
1846{
1847 int err;
1848
1849 err = copy_to_user(res, kres, sizeof(*res));
1850
1851 return (err) ? -EFAULT : 0;
1852}
1853
1854asmlinkage long compat_sys_nfsservctl(int cmd,
1855 struct compat_nfsctl_arg __user *arg,
1856 union compat_nfsctl_res __user *res)
1857{
1858 struct nfsctl_arg *karg;
1859 union nfsctl_res *kres;
1860 mm_segment_t oldfs;
1861 int err;
1862
1863 karg = kmalloc(sizeof(*karg), GFP_USER);
1864 kres = kmalloc(sizeof(*kres), GFP_USER);
1865 if(!karg || !kres) {
1866 err = -ENOMEM;
1867 goto done;
1868 }
1869
1870 switch(cmd) {
1871 case NFSCTL_SVC:
1872 err = compat_nfs_svc_trans(karg, arg);
1873 break;
1874
1875 case NFSCTL_ADDCLIENT:
1876 err = compat_nfs_clnt_trans(karg, arg);
1877 break;
1878
1879 case NFSCTL_DELCLIENT:
1880 err = compat_nfs_clnt_trans(karg, arg);
1881 break;
1882
1883 case NFSCTL_EXPORT:
1884 case NFSCTL_UNEXPORT:
1885 err = compat_nfs_exp_trans(karg, arg);
1886 break;
1887
1888 case NFSCTL_GETFD:
1889 err = compat_nfs_getfd_trans(karg, arg);
1890 break;
1891
1892 case NFSCTL_GETFS:
1893 err = compat_nfs_getfs_trans(karg, arg);
1894 break;
1895
1896 default:
1897 err = -EINVAL;
1898 break;
1899 }
1900
1901 if (err)
1902 goto done;
1903
1904 oldfs = get_fs();
1905 set_fs(KERNEL_DS);
1906 /* The __user pointer casts are valid because of the set_fs() */
1907 err = sys_nfsservctl(cmd, (void __user *) karg, (void __user *) kres);
1908 set_fs(oldfs);
1909
1910 if (err)
1911 goto done;
1912
1913 if((cmd == NFSCTL_GETFD) ||
1914 (cmd == NFSCTL_GETFS))
1915 err = compat_nfs_getfh_res_trans(kres, res);
1916
1917done:
1918 kfree(karg);
1919 kfree(kres);
1920 return err;
1921}
1922#else /* !NFSD */
1923long asmlinkage compat_sys_nfsservctl(int cmd, void *notused, void *notused2) 1678long asmlinkage compat_sys_nfsservctl(int cmd, void *notused, void *notused2)
1924{ 1679{
1925 return sys_ni_syscall(); 1680 return sys_ni_syscall();
1926} 1681}
1927#endif
1928 1682
1929#ifdef CONFIG_EPOLL 1683#ifdef CONFIG_EPOLL
1930 1684