@@ -1675,256 +1675,10 @@ asmlinkage long compat_sys_ppoll(struct pollfd __user *ufds,
1675
1675
}
1676
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... */
1680
- struct compat_nfsctl_svc {
1681
- u16 svc32_port ;
1682
- s32 svc32_nthreads ;
1683
- };
1684
-
1685
- struct 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
-
1694
- struct 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
-
1704
- struct compat_nfsctl_fdparm {
1705
- struct sockaddr gd32_addr ;
1706
- s8 gd32_path [NFS_MAXPATHLEN + 1 ];
1707
- compat_int_t gd32_version ;
1708
- };
1709
-
1710
- struct compat_nfsctl_fsparm {
1711
- struct sockaddr gd32_addr ;
1712
- s8 gd32_path [NFS_MAXPATHLEN + 1 ];
1713
- compat_int_t gd32_maxlen ;
1714
- };
1715
-
1716
- struct 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
-
1732
- union compat_nfsctl_res {
1733
- __u8 cr32_getfh [NFS_FHSIZE ];
1734
- struct knfsd_fh cr32_getfs ;
1735
- };
1736
-
1737
- static 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
-
1749
- static 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
-
1775
- static 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
-
1804
- static 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
-
1823
- static 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
- */
1844
- static 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
-
1854
- asmlinkage 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
-
1917
- done :
1918
- kfree (karg );
1919
- kfree (kres );
1920
- return err ;
1921
- }
1922
- #else /* !NFSD */
1923
1678
long asmlinkage compat_sys_nfsservctl (int cmd , void * notused , void * notused2 )
1924
1679
{
1925
1680
return sys_ni_syscall ();
1926
1681
}
1927
- #endif
1928
1682
1929
1683
#ifdef CONFIG_EPOLL
1930
1684
0 commit comments