diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-18 02:49:50 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-18 02:49:50 +0000 |
commit | 9835e2ae736235810b4ea1c162ca5e65c547e770 (patch) | |
tree | 3fcebf40ed70e581d776a8a4c65923e8ec20e026 /vendor/nix/src/kmod.rs | |
parent | Releasing progress-linux version 1.70.0+dfsg2-1~progress7.99u1. (diff) | |
download | rustc-9835e2ae736235810b4ea1c162ca5e65c547e770.tar.xz rustc-9835e2ae736235810b4ea1c162ca5e65c547e770.zip |
Merging upstream version 1.71.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/nix/src/kmod.rs')
-rw-r--r-- | vendor/nix/src/kmod.rs | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/vendor/nix/src/kmod.rs b/vendor/nix/src/kmod.rs deleted file mode 100644 index 1fa6c170d..000000000 --- a/vendor/nix/src/kmod.rs +++ /dev/null @@ -1,128 +0,0 @@ -//! Load and unload kernel modules. -//! -//! For more details see - -use std::ffi::CStr; -use std::os::unix::io::AsRawFd; - -use crate::errno::Errno; -use crate::Result; - -/// Loads a kernel module from a buffer. -/// -/// It loads an ELF image into kernel space, -/// performs any necessary symbol relocations, -/// initializes module parameters to values provided by the caller, -/// and then runs the module's init function. -/// -/// This function requires `CAP_SYS_MODULE` privilege. -/// -/// The `module_image` argument points to a buffer containing the binary image -/// to be loaded. The buffer should contain a valid ELF image -/// built for the running kernel. -/// -/// The `param_values` argument is a string containing space-delimited specifications -/// of the values for module parameters. -/// Each of the parameter specifications has the form: -/// -/// `name[=value[,value...]]` -/// -/// # Example -/// -/// ```no_run -/// use std::fs::File; -/// use std::io::Read; -/// use std::ffi::CString; -/// use nix::kmod::init_module; -/// -/// let mut f = File::open("mykernel.ko").unwrap(); -/// let mut contents: Vec<u8> = Vec::new(); -/// f.read_to_end(&mut contents).unwrap(); -/// init_module(&mut contents, &CString::new("who=Rust when=Now,12").unwrap()).unwrap(); -/// ``` -/// -/// See [`man init_module(2)`](https://man7.org/linux/man-pages/man2/init_module.2.html) for more information. -pub fn init_module(module_image: &[u8], param_values: &CStr) -> Result<()> { - let res = unsafe { - libc::syscall( - libc::SYS_init_module, - module_image.as_ptr(), - module_image.len(), - param_values.as_ptr(), - ) - }; - - Errno::result(res).map(drop) -} - -libc_bitflags!( - /// Flags used by the `finit_module` function. - pub struct ModuleInitFlags: libc::c_uint { - /// Ignore symbol version hashes. - MODULE_INIT_IGNORE_MODVERSIONS; - /// Ignore kernel version magic. - MODULE_INIT_IGNORE_VERMAGIC; - } -); - -/// Loads a kernel module from a given file descriptor. -/// -/// # Example -/// -/// ```no_run -/// use std::fs::File; -/// use std::ffi::CString; -/// use nix::kmod::{finit_module, ModuleInitFlags}; -/// -/// let f = File::open("mymod.ko").unwrap(); -/// finit_module(&f, &CString::new("").unwrap(), ModuleInitFlags::empty()).unwrap(); -/// ``` -/// -/// See [`man init_module(2)`](https://man7.org/linux/man-pages/man2/init_module.2.html) for more information. -pub fn finit_module<T: AsRawFd>( - fd: &T, - param_values: &CStr, - flags: ModuleInitFlags, -) -> Result<()> { - let res = unsafe { - libc::syscall( - libc::SYS_finit_module, - fd.as_raw_fd(), - param_values.as_ptr(), - flags.bits(), - ) - }; - - Errno::result(res).map(drop) -} - -libc_bitflags!( - /// Flags used by `delete_module`. - /// - /// See [`man delete_module(2)`](https://man7.org/linux/man-pages/man2/delete_module.2.html) - /// for a detailed description how these flags work. - pub struct DeleteModuleFlags: libc::c_int { - O_NONBLOCK; - O_TRUNC; - } -); - -/// Unloads the kernel module with the given name. -/// -/// # Example -/// -/// ```no_run -/// use std::ffi::CString; -/// use nix::kmod::{delete_module, DeleteModuleFlags}; -/// -/// delete_module(&CString::new("mymod").unwrap(), DeleteModuleFlags::O_NONBLOCK).unwrap(); -/// ``` -/// -/// See [`man delete_module(2)`](https://man7.org/linux/man-pages/man2/delete_module.2.html) for more information. -pub fn delete_module(name: &CStr, flags: DeleteModuleFlags) -> Result<()> { - let res = unsafe { - libc::syscall(libc::SYS_delete_module, name.as_ptr(), flags.bits()) - }; - - Errno::result(res).map(drop) -} |