@@ -57,10 +57,10 @@ impl PollTable {
5757
5858 // SAFETY: `PollTable::ptr` is guaranteed to be valid by the type invariants and the null
5959 // check above.
60- let table = & * self . ptr ;
60+ let table = unsafe { & * self . ptr } ;
6161 if let Some ( proc) = table. _qproc {
6262 // SAFETY: All pointers are known to be valid.
63- proc ( file. ptr as _ , cv. wait_list . get ( ) , self . ptr )
63+ unsafe { proc ( file. ptr as _ , cv. wait_list . get ( ) , self . ptr ) }
6464 }
6565 }
6666}
@@ -84,9 +84,9 @@ unsafe extern "C" fn open_callback<A: FileOpenAdapter, T: FileOpener<A::Arg>>(
8484 file : * mut bindings:: file ,
8585) -> c_types:: c_int {
8686 from_kernel_result ! {
87- let arg = A :: convert( inode, file) ;
88- let ptr = T :: open( & * arg) ?. into_pointer( ) ;
89- ( * file) . private_data = ptr as * mut c_types:: c_void;
87+ let arg = unsafe { A :: convert( inode, file) } ;
88+ let ptr = T :: open( unsafe { & * arg } ) ?. into_pointer( ) ;
89+ unsafe { ( * file) . private_data = ptr as * mut c_types:: c_void } ;
9090 Ok ( 0 )
9191 }
9292}
@@ -98,12 +98,12 @@ unsafe extern "C" fn read_callback<T: FileOperations>(
9898 offset : * mut bindings:: loff_t ,
9999) -> c_types:: c_ssize_t {
100100 from_kernel_result ! {
101- let mut data = UserSlicePtr :: new( buf as * mut c_types:: c_void, len) . writer( ) ;
102- let f = & * ( ( * file) . private_data as * const T ) ;
101+ let mut data = unsafe { UserSlicePtr :: new( buf as * mut c_types:: c_void, len) . writer( ) } ;
102+ let f = unsafe { & * ( ( * file) . private_data as * const T ) } ;
103103 // No `FMODE_UNSIGNED_OFFSET` support, so `offset` must be in [0, 2^63).
104104 // See discussion in https://github.com/fishinabarrel/linux-kernel-module-rust/pull/113
105- let read = f. read( & FileRef :: from_ptr( file) , & mut data, ( * offset) . try_into( ) ?) ?;
106- ( * offset) += bindings:: loff_t:: try_from( read) . unwrap( ) ;
105+ let read = f. read( unsafe { & FileRef :: from_ptr( file) } , & mut data, unsafe { * offset } . try_into( ) ?) ?;
106+ unsafe { ( * offset) += bindings:: loff_t:: try_from( read) . unwrap( ) } ;
107107 Ok ( read as _)
108108 }
109109}
@@ -113,12 +113,12 @@ unsafe extern "C" fn read_iter_callback<T: FileOperations>(
113113 raw_iter : * mut bindings:: iov_iter ,
114114) -> isize {
115115 from_kernel_result ! {
116- let mut iter = IovIter :: from_ptr( raw_iter) ;
117- let file = ( * iocb) . ki_filp;
118- let offset = ( * iocb) . ki_pos;
119- let f = & * ( ( * file) . private_data as * const T ) ;
120- let read = f. read( & FileRef :: from_ptr( file) , & mut iter, offset. try_into( ) ?) ?;
121- ( * iocb) . ki_pos += bindings:: loff_t:: try_from( read) . unwrap( ) ;
116+ let mut iter = unsafe { IovIter :: from_ptr( raw_iter) } ;
117+ let file = unsafe { ( * iocb) . ki_filp } ;
118+ let offset = unsafe { ( * iocb) . ki_pos } ;
119+ let f = unsafe { & * ( ( * file) . private_data as * const T ) } ;
120+ let read = f. read( unsafe { & FileRef :: from_ptr( file) } , & mut iter, offset. try_into( ) ?) ?;
121+ unsafe { ( * iocb) . ki_pos += bindings:: loff_t:: try_from( read) . unwrap( ) } ;
122122 Ok ( read as _)
123123 }
124124}
@@ -130,12 +130,12 @@ unsafe extern "C" fn write_callback<T: FileOperations>(
130130 offset : * mut bindings:: loff_t ,
131131) -> c_types:: c_ssize_t {
132132 from_kernel_result ! {
133- let mut data = UserSlicePtr :: new( buf as * mut c_types:: c_void, len) . reader( ) ;
134- let f = & * ( ( * file) . private_data as * const T ) ;
133+ let mut data = unsafe { UserSlicePtr :: new( buf as * mut c_types:: c_void, len) . reader( ) } ;
134+ let f = unsafe { & * ( ( * file) . private_data as * const T ) } ;
135135 // No `FMODE_UNSIGNED_OFFSET` support, so `offset` must be in [0, 2^63).
136136 // See discussion in https://github.com/fishinabarrel/linux-kernel-module-rust/pull/113
137- let written = f. write( & FileRef :: from_ptr( file) , & mut data, ( * offset) . try_into( ) ?) ?;
138- ( * offset) += bindings:: loff_t:: try_from( written) . unwrap( ) ;
137+ let written = f. write( unsafe { & FileRef :: from_ptr( file) } , & mut data, unsafe { * offset } . try_into( ) ?) ?;
138+ unsafe { ( * offset) += bindings:: loff_t:: try_from( written) . unwrap( ) } ;
139139 Ok ( written as _)
140140 }
141141}
@@ -145,12 +145,12 @@ unsafe extern "C" fn write_iter_callback<T: FileOperations>(
145145 raw_iter : * mut bindings:: iov_iter ,
146146) -> isize {
147147 from_kernel_result ! {
148- let mut iter = IovIter :: from_ptr( raw_iter) ;
149- let file = ( * iocb) . ki_filp;
150- let offset = ( * iocb) . ki_pos;
151- let f = & * ( ( * file) . private_data as * const T ) ;
152- let written = f. write( & FileRef :: from_ptr( file) , & mut iter, offset. try_into( ) ?) ?;
153- ( * iocb) . ki_pos += bindings:: loff_t:: try_from( written) . unwrap( ) ;
148+ let mut iter = unsafe { IovIter :: from_ptr( raw_iter) } ;
149+ let file = unsafe { ( * iocb) . ki_filp } ;
150+ let offset = unsafe { ( * iocb) . ki_pos } ;
151+ let f = unsafe { & * ( ( * file) . private_data as * const T ) } ;
152+ let written = f. write( unsafe { & FileRef :: from_ptr( file) } , & mut iter, offset. try_into( ) ?) ?;
153+ unsafe { ( * iocb) . ki_pos += bindings:: loff_t:: try_from( written) . unwrap( ) } ;
154154 Ok ( written as _)
155155 }
156156}
@@ -159,8 +159,10 @@ unsafe extern "C" fn release_callback<T: FileOperations>(
159159 _inode : * mut bindings:: inode ,
160160 file : * mut bindings:: file ,
161161) -> c_types:: c_int {
162- let ptr = mem:: replace ( & mut ( * file) . private_data , ptr:: null_mut ( ) ) ;
163- T :: release ( T :: Wrapper :: from_pointer ( ptr as _ ) , & FileRef :: from_ptr ( file) ) ;
162+ let ptr = mem:: replace ( unsafe { & mut ( * file) . private_data } , ptr:: null_mut ( ) ) ;
163+ T :: release ( unsafe { T :: Wrapper :: from_pointer ( ptr as _ ) } , unsafe {
164+ & FileRef :: from_ptr ( file)
165+ } ) ;
164166 0
165167}
166168
@@ -176,8 +178,8 @@ unsafe extern "C" fn llseek_callback<T: FileOperations>(
176178 bindings:: SEEK_END => SeekFrom :: End ( offset) ,
177179 _ => return Err ( Error :: EINVAL ) ,
178180 } ;
179- let f = & * ( ( * file) . private_data as * const T ) ;
180- let off = f. seek( & FileRef :: from_ptr( file) , off) ?;
181+ let f = unsafe { & * ( ( * file) . private_data as * const T ) } ;
182+ let off = f. seek( unsafe { & FileRef :: from_ptr( file) } , off) ?;
181183 Ok ( off as bindings:: loff_t)
182184 }
183185}
@@ -188,10 +190,10 @@ unsafe extern "C" fn unlocked_ioctl_callback<T: FileOperations>(
188190 arg : c_types:: c_ulong ,
189191) -> c_types:: c_long {
190192 from_kernel_result ! {
191- let f = & * ( ( * file) . private_data as * const T ) ;
193+ let f = unsafe { & * ( ( * file) . private_data as * const T ) } ;
192194 // SAFETY: This function is called by the kernel, so it must set `fs` appropriately.
193195 let mut cmd = IoctlCommand :: new( cmd as _, arg as _) ;
194- let ret = f. ioctl( & FileRef :: from_ptr( file) , & mut cmd) ?;
196+ let ret = f. ioctl( unsafe { & FileRef :: from_ptr( file) } , & mut cmd) ?;
195197 Ok ( ret as _)
196198 }
197199}
@@ -202,10 +204,10 @@ unsafe extern "C" fn compat_ioctl_callback<T: FileOperations>(
202204 arg : c_types:: c_ulong ,
203205) -> c_types:: c_long {
204206 from_kernel_result ! {
205- let f = & * ( ( * file) . private_data as * const T ) ;
207+ let f = unsafe { & * ( ( * file) . private_data as * const T ) } ;
206208 // SAFETY: This function is called by the kernel, so it must set `fs` appropriately.
207209 let mut cmd = IoctlCommand :: new( cmd as _, arg as _) ;
208- let ret = f. compat_ioctl( & FileRef :: from_ptr( file) , & mut cmd) ?;
210+ let ret = f. compat_ioctl( unsafe { & FileRef :: from_ptr( file) } , & mut cmd) ?;
209211 Ok ( ret as _)
210212 }
211213}
@@ -215,8 +217,8 @@ unsafe extern "C" fn mmap_callback<T: FileOperations>(
215217 vma : * mut bindings:: vm_area_struct ,
216218) -> c_types:: c_int {
217219 from_kernel_result ! {
218- let f = & * ( ( * file) . private_data as * const T ) ;
219- f. mmap( & FileRef :: from_ptr( file) , & mut * vma) ?;
220+ let f = unsafe { & * ( ( * file) . private_data as * const T ) } ;
221+ f. mmap( unsafe { & FileRef :: from_ptr( file) } , unsafe { & mut * vma } ) ?;
220222 Ok ( 0 )
221223 }
222224}
@@ -231,8 +233,8 @@ unsafe extern "C" fn fsync_callback<T: FileOperations>(
231233 let start = start. try_into( ) ?;
232234 let end = end. try_into( ) ?;
233235 let datasync = datasync != 0 ;
234- let f = & * ( ( * file) . private_data as * const T ) ;
235- let res = f. fsync( & FileRef :: from_ptr( file) , start, end, datasync) ?;
236+ let f = unsafe { & * ( ( * file) . private_data as * const T ) } ;
237+ let res = f. fsync( unsafe { & FileRef :: from_ptr( file) } , start, end, datasync) ?;
236238 Ok ( res. try_into( ) . unwrap( ) )
237239 }
238240}
@@ -241,8 +243,10 @@ unsafe extern "C" fn poll_callback<T: FileOperations>(
241243 file : * mut bindings:: file ,
242244 wait : * mut bindings:: poll_table_struct ,
243245) -> bindings:: __poll_t {
244- let f = & * ( ( * file) . private_data as * const T ) ;
245- match f. poll ( & FileRef :: from_ptr ( file) , & PollTable :: from_ptr ( wait) ) {
246+ let f = unsafe { & * ( ( * file) . private_data as * const T ) } ;
247+ match f. poll ( unsafe { & FileRef :: from_ptr ( file) } , unsafe {
248+ & PollTable :: from_ptr ( wait)
249+ } ) {
246250 Ok ( v) => v,
247251 Err ( _) => bindings:: POLLERR ,
248252 }
0 commit comments