Skip to content

Commit 9ab07dc

Browse files
mmap non-zero length
1 parent 2ad2f48 commit 9ab07dc

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ This project adheres to [Semantic Versioning](https://semver.org/).
3535

3636
- The MSRV is now 1.56.1
3737
([#1792](https://github.com/nix-rust/nix/pull/1792))
38+
- Passes `length` to `sys::mmap` as `NonZeroUsize` from `size_t`.
39+
([#1873](https://github.com/nix-rust/nix/pull/1873))
3840

3941
### Fixed
4042

src/sys/mman.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use crate::Result;
88
#[cfg(feature = "fs")]
99
use crate::{fcntl::OFlag, sys::stat::Mode};
1010
use libc::{self, c_int, c_void, off_t, size_t};
11-
use std::os::unix::io::RawFd;
11+
use std::{os::unix::io::RawFd, num::NonZeroUsize};
1212

1313
libc_bitflags! {
1414
/// Desired memory protection of a memory mapping.
@@ -418,13 +418,13 @@ pub fn munlockall() -> Result<()> {
418418
/// [`mmap(2)`]: https://man7.org/linux/man-pages/man2/mmap.2.html
419419
pub unsafe fn mmap(
420420
addr: *mut c_void,
421-
length: size_t,
421+
length: NonZeroUsize,
422422
prot: ProtFlags,
423423
flags: MapFlags,
424424
fd: RawFd,
425425
offset: off_t,
426426
) -> Result<*mut c_void> {
427-
let ret = libc::mmap(addr, length, prot.bits(), flags.bits(), fd, offset);
427+
let ret = libc::mmap(addr, length.into(), prot.bits(), flags.bits(), fd, offset);
428428

429429
if ret == libc::MAP_FAILED {
430430
Err(Errno::last())
@@ -515,8 +515,9 @@ pub unsafe fn madvise(
515515
/// # use nix::sys::mman::{mmap, mprotect, MapFlags, ProtFlags};
516516
/// # use std::ptr;
517517
/// const ONE_K: size_t = 1024;
518+
/// let one_k_non_zero = std::num::NonZeroUsize::new(ONE_K).unwrap();
518519
/// let mut slice: &mut [u8] = unsafe {
519-
/// let mem = mmap(ptr::null_mut(), ONE_K, ProtFlags::PROT_NONE,
520+
/// let mem = mmap(ptr::null_mut(), one_k_non_zero, ProtFlags::PROT_NONE,
520521
/// MapFlags::MAP_ANON | MapFlags::MAP_PRIVATE, -1, 0).unwrap();
521522
/// mprotect(mem, ONE_K, ProtFlags::PROT_READ | ProtFlags::PROT_WRITE).unwrap();
522523
/// std::slice::from_raw_parts_mut(mem as *mut u8, ONE_K)

test/sys/test_mman.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
use nix::sys::mman::{mmap, MapFlags, ProtFlags};
2+
use std::num::NonZeroUsize;
23

34
#[test]
45
fn test_mmap_anonymous() {
56
unsafe {
67
let ptr = mmap(
78
std::ptr::null_mut(),
8-
1,
9+
NonZeroUsize::new(1).unwrap(),
910
ProtFlags::PROT_READ | ProtFlags::PROT_WRITE,
1011
MapFlags::MAP_PRIVATE | MapFlags::MAP_ANONYMOUS,
1112
-1,
@@ -25,10 +26,12 @@ fn test_mremap_grow() {
2526
use nix::sys::mman::{mremap, MRemapFlags};
2627

2728
const ONE_K: size_t = 1024;
29+
let one_k_non_zero = NonZeroUsize::new(ONE_K).unwrap();
30+
2831
let slice: &mut [u8] = unsafe {
2932
let mem = mmap(
3033
std::ptr::null_mut(),
31-
ONE_K,
34+
one_k_non_zero,
3235
ProtFlags::PROT_READ | ProtFlags::PROT_WRITE,
3336
MapFlags::MAP_ANONYMOUS | MapFlags::MAP_PRIVATE,
3437
-1,
@@ -79,12 +82,14 @@ fn test_mremap_grow() {
7982
fn test_mremap_shrink() {
8083
use nix::libc::{c_void, size_t};
8184
use nix::sys::mman::{mremap, MRemapFlags};
85+
use std::num::NonZeroUsize;
8286

8387
const ONE_K: size_t = 1024;
88+
let ten_one_k = NonZeroUsize::new(10 * ONE_K).unwrap();
8489
let slice: &mut [u8] = unsafe {
8590
let mem = mmap(
8691
std::ptr::null_mut(),
87-
10 * ONE_K,
92+
ten_one_k,
8893
ProtFlags::PROT_READ | ProtFlags::PROT_WRITE,
8994
MapFlags::MAP_ANONYMOUS | MapFlags::MAP_PRIVATE,
9095
-1,
@@ -100,7 +105,7 @@ fn test_mremap_shrink() {
100105
let slice: &mut [u8] = unsafe {
101106
let mem = mremap(
102107
slice.as_mut_ptr() as *mut c_void,
103-
10 * ONE_K,
108+
ten_one_k.into(),
104109
ONE_K,
105110
MRemapFlags::empty(),
106111
None,

0 commit comments

Comments
 (0)