Pass pointers, not slices, to libc::ioctl #2181
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Slices are not FFI-safe.
&[u8] and &mut [u8] are wide pointers, which means that at the moment, we're getting lucky because they're passed via the "ScalarPair" ABI, and this means that passing a
&[u8]
results in passing two arguments,*const u8
andusize
for pointer and length. This passes an extra argument to ioctl, which happens to work because the extra vararg is skipped. We're getting lucky right now, and we should explicitly pass the pointer we meant to pass instead.This is normally checked on
extern "C"
functions, butioctl
in particular uses varargs which prevents the compiler check from reporting.What does this PR do
Passes the buffer pointer to
libc::ioctl
rather than trying to pass slices across FFI.Checklist:
CONTRIBUTING.md