This repository was archived by the owner on Mar 7, 2021. It is now read-only.
File tree 4 files changed +28
-14
lines changed
4 files changed +28
-14
lines changed Original file line number Diff line number Diff line change @@ -69,7 +69,16 @@ fn handle_kernel_version_cfg(bindings_path: &PathBuf) {
69
69
}
70
70
let version = version. expect ( "Couldn't find kernel version" ) ;
71
71
if version >= kernel_version_code ( 4 , 15 , 0 ) {
72
- println ! ( "cargo:rustc-cfg=kernel_4_15_0_or_greataer" )
72
+ println ! ( "cargo:rustc-cfg=kernel_4_15_0_or_greater" )
73
+ }
74
+ if version >= kernel_version_code ( 4 , 19 , 0 ) {
75
+ println ! ( "cargo:rustc-cfg=kernel_4_19_0_or_greater" )
76
+ }
77
+ if version >= kernel_version_code ( 4 , 20 , 0 ) {
78
+ println ! ( "cargo:rustc-cfg=kernel_4_20_0_or_greater" )
79
+ }
80
+ if version >= kernel_version_code ( 5 , 1 , 0 ) {
81
+ println ! ( "cargo:rustc-cfg=kernel_5_1_0_or_greater" )
73
82
}
74
83
}
75
84
Original file line number Diff line number Diff line change @@ -152,26 +152,34 @@ impl FileOperationsVtable {
152
152
release : Some ( release_callback :: < T > ) ,
153
153
154
154
check_flags : None ,
155
+ #[ cfg( not( kernel_4_20_0_or_greater) ) ]
155
156
clone_file_range : None ,
156
157
compat_ioctl : None ,
157
158
copy_file_range : None ,
159
+ #[ cfg( not( kernel_4_20_0_or_greater) ) ]
158
160
dedupe_file_range : None ,
159
161
fallocate : None ,
162
+ #[ cfg( kernel_4_19_0_or_greater) ]
163
+ fadvise : None ,
160
164
fasync : None ,
161
165
flock : None ,
162
166
flush : None ,
163
167
fsync : None ,
164
168
get_unmapped_area : None ,
165
169
iterate : None ,
166
170
iterate_shared : None ,
171
+ #[ cfg( kernel_5_1_0_or_greater) ]
172
+ iopoll : None ,
167
173
llseek : None ,
168
174
lock : None ,
169
175
mmap : None ,
170
- #[ cfg( kernel_4_15_0_or_greataer ) ]
176
+ #[ cfg( kernel_4_15_0_or_greater ) ]
171
177
mmap_supported_flags : 0 ,
172
178
owner : ptr:: null_mut ( ) ,
173
179
poll : None ,
174
180
read_iter : None ,
181
+ #[ cfg( kernel_4_20_0_or_greater) ]
182
+ remap_file_range : None ,
175
183
sendpage : None ,
176
184
setfl : None ,
177
185
setlease : None ,
Original file line number Diff line number Diff line change 1
1
#include <linux/bug.h>
2
2
#include <linux/printk.h>
3
3
#include <linux/uaccess.h>
4
+ #include <linux/version.h>
4
5
5
6
6
7
int printk_helper (const unsigned char * s , int len )
@@ -13,7 +14,11 @@ void bug_helper(void)
13
14
BUG ();
14
15
}
15
16
16
- int access_ok_helper (unsigned int mode , const void __user * addr , unsigned long n )
17
+ int access_ok_helper (const void __user * addr , unsigned long n )
17
18
{
18
- return access_ok (mode , addr , n );
19
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION (5 , 0 , 0 ) /* v5.0-rc1~46 */
20
+ return access_ok (addr , n );
21
+ #else
22
+ return access_ok (0 , addr , n );
23
+ #endif
19
24
}
Original file line number Diff line number Diff line change @@ -7,11 +7,7 @@ use crate::c_types;
7
7
use crate :: error;
8
8
9
9
extern "C" {
10
- fn access_ok_helper (
11
- mode : c_types:: c_uint ,
12
- addr : * const c_types:: c_void ,
13
- len : c_types:: c_ulong ,
14
- ) -> c_types:: c_int ;
10
+ fn access_ok_helper ( addr : * const c_types:: c_void , len : c_types:: c_ulong ) -> c_types:: c_int ;
15
11
}
16
12
17
13
/// A reference to an area in userspace memory, which can be either
@@ -53,11 +49,7 @@ impl UserSlicePtr {
53
49
ptr : * mut c_types:: c_void ,
54
50
length : usize ,
55
51
) -> error:: KernelResult < UserSlicePtr > {
56
- // No current access_ok implementation actually distinguishes
57
- // between VERIFY_READ and VERIFY_WRITE, so passing VERIFY_WRITE
58
- // is fine in practice and fails safe if a future implementation
59
- // bothers.
60
- if access_ok_helper ( bindings:: VERIFY_WRITE , ptr, length as c_types:: c_ulong ) == 0 {
52
+ if access_ok_helper ( ptr, length as c_types:: c_ulong ) == 0 {
61
53
return Err ( error:: Error :: EFAULT ) ;
62
54
}
63
55
Ok ( UserSlicePtr ( ptr, length) )
You can’t perform that action at this time.
0 commit comments