Skip to content

Conversation

@wdcui
Copy link
Member

@wdcui wdcui commented Feb 2, 2026

Summary

Implements the msync syscall as a no-op that validates arguments and returns success.

Background

Since litebox only supports MAP_PRIVATE mappings (not MAP_SHARED), changes to memory-mapped regions are never written back to the underlying file. Therefore, msync is implemented as a no-op - this is correct per Linux semantics where msync on private mappings has implementation-defined behavior.

This approach is consistent with other advisory syscalls in litebox like readahead and fadvise64 which are also implemented as no-ops.

Implementation

New Types

  • MsyncFlags bitflags with MS_ASYNC, MS_INVALIDATE, MS_SYNC

Files Modified

  • litebox_common_linux/src/lib.rs: Added MsyncFlags, Msync variant, and dispatch
  • litebox_common_linux/src/mm.rs: Implemented sys_msync with validation logic
  • litebox_shim_linux/src/lib.rs: Added dispatch case
  • litebox_shim_linux/src/syscalls/mm.rs: Added sys_msync wrapper and unit tests

Validation (per Linux semantics)

  • addr must be page-aligned → EINVAL
  • MS_ASYNC and MS_SYNC are mutually exclusive → EINVAL
  • Invalid flags → EINVAL
  • Overflow in addr + lenENOMEM

Tests

  • test_msync_basic: Validates MS_SYNC, MS_ASYNC, MS_INVALIDATE, combinations, and zero length
  • test_msync_invalid_flags: Validates MS_ASYNC | MS_SYNC returns EINVAL
  • test_msync_unaligned_addr: Validates unaligned address returns EINVAL

References

  • Linux msync(2) man page
  • Linux kernel source: mm/msync.c

wdcui added 2 commits February 2, 2026 04:42
Since litebox only supports MAP_PRIVATE mappings (not MAP_SHARED), changes
to memory-mapped regions are never written back to the underlying file.
Therefore, msync is implemented as a no-op that validates arguments and
returns success.

Implementation:
- Add MsyncFlags bitflags (MS_ASYNC, MS_INVALIDATE, MS_SYNC)
- Add Msync variant to SyscallRequest enum
- Add Sysno::msync dispatch in try_from_raw
- Implement sys_msync in litebox_shim_linux and litebox_common_linux

Validation per Linux semantics:
- addr must be page-aligned (EINVAL)
- MS_ASYNC and MS_SYNC are mutually exclusive (EINVAL)
- Invalid flags return EINVAL
- Overflow in addr+len returns ENOMEM

Tests:
- test_msync_basic: validates MS_SYNC, MS_ASYNC, MS_INVALIDATE, and combinations
- test_msync_invalid_flags: validates MS_ASYNC|MS_SYNC returns EINVAL
- test_msync_unaligned_addr: validates unaligned address returns EINVAL
- Remove Clone, Copy derives from MsyncFlags to match other memory flags
- Add test for MS_ASYNC | MS_INVALIDATE combination
- Add test for invalid flag bits (undefined bits return EINVAL)
@github-actions
Copy link

github-actions bot commented Feb 2, 2026

🤖 SemverChecks 🤖 ⚠️ Potential breaking API changes detected ⚠️

Click for details
--- failure enum_no_repr_variant_discriminant_changed: enum variant had its discriminant change value ---

Description:
The enum's variant had its discriminant value change. This breaks downstream code that used its value via a numeric cast like `as isize`.
        ref: https://doc.rust-lang.org/reference/items/enumerations.html#assigning-discriminant-values
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_no_repr_variant_discriminant_changed.ron

Failed in:
  variant SyscallRequest::Dup 29 -> 30 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1990
  variant SyscallRequest::Socket 30 -> 31 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1995
  variant SyscallRequest::Socketpair 31 -> 32 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2005
  variant SyscallRequest::Connect 32 -> 33 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2011
  variant SyscallRequest::Accept 33 -> 34 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2016
  variant SyscallRequest::Sendto 34 -> 35 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2022
  variant SyscallRequest::Sendmsg 35 -> 36 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2030
  variant SyscallRequest::Recvfrom 36 -> 37 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2035
  variant SyscallRequest::Bind 37 -> 38 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2043
  variant SyscallRequest::Listen 38 -> 39 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2048
  variant SyscallRequest::Setsockopt 39 -> 40 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2052
  variant SyscallRequest::Getsockopt 40 -> 41 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2059
  variant SyscallRequest::Getsockname 41 -> 42 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2066
  variant SyscallRequest::Getpeername 42 -> 43 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2071
  variant SyscallRequest::Uname 43 -> 44 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2076
  variant SyscallRequest::Fcntl 44 -> 45 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2079
  variant SyscallRequest::Getcwd 45 -> 46 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2083
  variant SyscallRequest::EpollCtl 46 -> 47 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2087
  variant SyscallRequest::EpollPwait 47 -> 48 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2093
  variant SyscallRequest::EpollCreate 48 -> 49 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2101
  variant SyscallRequest::Ppoll 49 -> 50 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2105
  variant SyscallRequest::Pselect 50 -> 51 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2112
  variant SyscallRequest::ArchPrctl 51 -> 52 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2120
  variant SyscallRequest::Readlink 52 -> 53 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2123
  variant SyscallRequest::Readlinkat 53 -> 54 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2128
  variant SyscallRequest::Openat 54 -> 55 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2134
  variant SyscallRequest::Ftruncate 55 -> 56 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2140
  variant SyscallRequest::Unlinkat 56 -> 57 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2144
  variant SyscallRequest::Newfstatat 57 -> 58 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2150
  variant SyscallRequest::Eventfd2 58 -> 59 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2163
  variant SyscallRequest::Pipe2 59 -> 60 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2167
  variant SyscallRequest::Clone 60 -> 61 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2171
  variant SyscallRequest::Clone3 61 -> 62 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2174
  variant SyscallRequest::SetThreadArea 62 -> 63 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2179
  variant SyscallRequest::ClockGettime 63 -> 64 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2182
  variant SyscallRequest::ClockGetres 64 -> 65 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2186
  variant SyscallRequest::ClockNanosleep 65 -> 66 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2190
  variant SyscallRequest::Gettimeofday 66 -> 67 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2196
  variant SyscallRequest::Time 67 -> 68 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2200
  variant SyscallRequest::Getrlimit 68 -> 69 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2203
  variant SyscallRequest::Setrlimit 69 -> 70 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2207
  variant SyscallRequest::Prlimit 70 -> 71 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2211
  variant SyscallRequest::SetTidAddress 71 -> 72 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2222
  variant SyscallRequest::Gettid 72 -> 73 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2225
  variant SyscallRequest::SetRobustList 73 -> 74 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2226
  variant SyscallRequest::GetRobustList 74 -> 75 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2229
  variant SyscallRequest::GetRandom 75 -> 76 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2234
  variant SyscallRequest::Getpid 76 -> 77 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2239
  variant SyscallRequest::Getppid 77 -> 78 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2240
  variant SyscallRequest::Getuid 78 -> 79 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2241
  variant SyscallRequest::Geteuid 79 -> 80 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2242
  variant SyscallRequest::Getgid 80 -> 81 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2243
  variant SyscallRequest::Getegid 81 -> 82 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2244
  variant SyscallRequest::Sysinfo 82 -> 83 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2245
  variant SyscallRequest::CapGet 83 -> 84 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2248
  variant SyscallRequest::GetDirent64 84 -> 85 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2252
  variant SyscallRequest::SchedGetAffinity 85 -> 86 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2257
  variant SyscallRequest::SchedYield 86 -> 87 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2262
  variant SyscallRequest::Futex 87 -> 88 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2263
  variant SyscallRequest::Execve 88 -> 89 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2266
  variant SyscallRequest::Umask 89 -> 90 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2271
  variant SyscallRequest::Prctl 90 -> 91 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2274
  variant SyscallRequest::Alarm 91 -> 92 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2277
  variant SyscallRequest::SetITimer 92 -> 93 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2280

@wdcui wdcui closed this Feb 2, 2026
@wdcui wdcui deleted the wdcui/msync branch February 2, 2026 22:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants