Skip to content
This repository was archived by the owner on Mar 7, 2021. It is now read-only.

Commit 5f2be73

Browse files
authored
Require KernelModule to be Sync (#54)
1 parent 1d3caa2 commit 5f2be73

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ macro_rules! kernel_module {
6666
};
6767
}
6868

69-
pub trait KernelModule: Sized {
69+
pub trait KernelModule: Sized + Sync {
7070
fn init() -> KernelResult<Self>;
7171
}
7272

src/sysctl.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,6 @@ use error;
99
use types;
1010
use user_ptr::{UserSlicePtr, UserSlicePtrWriter};
1111

12-
pub struct Sysctl<T: SysctlStorage> {
13-
inner: Box<T>,
14-
table: Box<[bindings::ctl_table]>,
15-
header: *mut bindings::ctl_table_header,
16-
}
17-
1812
pub trait SysctlStorage: Sync {
1913
fn store_value(&self, data: &[u8]) -> (usize, error::KernelResult<()>);
2014
fn read_value(&self, data: &mut UserSlicePtrWriter) -> (usize, error::KernelResult<()>);
@@ -60,6 +54,16 @@ impl SysctlStorage for atomic::AtomicBool {
6054
}
6155
}
6256

57+
pub struct Sysctl<T: SysctlStorage> {
58+
inner: Box<T>,
59+
table: Box<[bindings::ctl_table]>,
60+
header: *mut bindings::ctl_table_header,
61+
}
62+
63+
// This is safe because the only public method we have is get(), which returns
64+
// &T, and T: Sync. Any new methods must adhere to this requirement.
65+
unsafe impl<T: SysctlStorage> Sync for Sysctl<T> {}
66+
6367
unsafe extern "C" fn proc_handler<T: SysctlStorage>(
6468
ctl: *mut bindings::ctl_table,
6569
write: c_types::c_int,

0 commit comments

Comments
 (0)