Skip to content

Commit e3c4e9d

Browse files
authored
Merge pull request #3846 from jbaublitz/permissions
Set permissions to root-only on keys set in the keyring
2 parents 95ea443 + 48eceeb commit e3c4e9d

1 file changed

Lines changed: 7 additions & 4 deletions

File tree

src/engine/strat_engine/keys.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
use std::{ffi::CString, io, mem::size_of, os::unix::io::RawFd, str};
66

7-
use libc::{syscall, SYS_add_key, SYS_keyctl};
7+
use libc::{syscall, SYS_add_key, SYS_keyctl, KEYCTL_SETPERM};
88

99
use libcryptsetup_rs::SafeMemHandle;
1010

@@ -161,7 +161,7 @@ fn set_key(
161161
let key_desc_cstring = CString::new(key_desc.to_system_string())
162162
.map_err(|_| StratisError::Msg("Invalid key description provided".to_string()))?;
163163
// Add a key to the kernel keyring
164-
if unsafe {
164+
let serial = match unsafe {
165165
libc::syscall(
166166
SYS_add_key,
167167
concat!("user", "\0").as_ptr(),
@@ -170,8 +170,11 @@ fn set_key(
170170
key_data.as_ref().len(),
171171
keyring_id,
172172
)
173-
} < 0
174-
{
173+
} {
174+
i if i < 0 => return Err(io::Error::last_os_error().into()),
175+
i => i,
176+
};
177+
if unsafe { libc::syscall(SYS_keyctl, KEYCTL_SETPERM, serial, 0x003f_0000) } < 0 {
175178
Err(io::Error::last_os_error().into())
176179
} else {
177180
Ok(())

0 commit comments

Comments
 (0)