Skip to content

Commit

Permalink
Change alignment of virtiofs structs to be based on the first field.
Browse files Browse the repository at this point in the history
Alignment of the virtiofs struct was previously based on the alignment
of the largest field in fuse_in_header/fuse_out_header. Switched to
explicitly align on u32, the type of the first field in the header.

Fixes #691

Signed-off-by: joannejchen <chenjjoanne@gmail.com>
  • Loading branch information
joannejchen committed Apr 15, 2023
1 parent 7f7ef30 commit dd021d4
Showing 1 changed file with 18 additions and 18 deletions.
36 changes: 18 additions & 18 deletions src/fs/fuse.rs
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ where

fn create_init() -> (Box<Cmd<fuse_init_in>>, Box<Rsp<fuse_init_out>>) {
let len = core::mem::size_of::<fuse_in_header>() + core::mem::size_of::<fuse_init_in>();
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_in_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let cmd = unsafe {
let data = alloc(layout.unwrap());
let raw = core::ptr::slice_from_raw_parts_mut(data, 0) as *mut Cmd<fuse_init_in>;
Expand All @@ -348,7 +348,7 @@ fn create_init() -> (Box<Cmd<fuse_init_in>>, Box<Rsp<fuse_init_out>>) {
};

let len = core::mem::size_of::<fuse_out_header>() + core::mem::size_of::<fuse_init_out>();
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_out_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let rsp = unsafe {
let data = alloc(layout.unwrap());
let raw = core::ptr::slice_from_raw_parts_mut(data, 0) as *mut Rsp<fuse_init_out>;
Expand All @@ -369,7 +369,7 @@ fn create_lookup(name: &str) -> (Box<Cmd<fuse_lookup_in>>, Box<Rsp<fuse_entry_ou
+ core::mem::size_of::<fuse_lookup_in>()
+ slice.len()
+ 1;
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_in_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let cmd = unsafe {
let data = alloc(layout.unwrap());
let raw =
Expand All @@ -383,7 +383,7 @@ fn create_lookup(name: &str) -> (Box<Cmd<fuse_lookup_in>>, Box<Rsp<fuse_entry_ou
};

let len = core::mem::size_of::<fuse_out_header>() + core::mem::size_of::<fuse_entry_out>();
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_out_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let rsp = unsafe {
let data = alloc(layout.unwrap());
let raw = core::ptr::slice_from_raw_parts_mut(data, 0) as *mut Rsp<fuse_entry_out>;
Expand Down Expand Up @@ -471,7 +471,7 @@ fn create_read(
offset: u64,
) -> (Box<Cmd<fuse_read_in>>, Box<Rsp<fuse_read_out>>) {
let len = core::mem::size_of::<fuse_in_header>() + core::mem::size_of::<fuse_read_in>();
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_in_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let cmd = unsafe {
let data = alloc(layout.unwrap());
let raw = core::ptr::slice_from_raw_parts_mut(data, 0) as *mut Cmd<fuse_read_in>;
Expand All @@ -489,7 +489,7 @@ fn create_read(
let len = core::mem::size_of::<fuse_out_header>()
+ core::mem::size_of::<fuse_read_out>()
+ usize::try_from(size).unwrap();
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_out_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let rsp = unsafe {
let data = alloc(layout.unwrap());
let raw = core::ptr::slice_from_raw_parts_mut(data, size.try_into().unwrap())
Expand Down Expand Up @@ -529,7 +529,7 @@ fn create_lseek(
whence: SeekWhence,
) -> (Box<Cmd<fuse_lseek_in>>, Box<Rsp<fuse_lseek_out>>) {
let len = core::mem::size_of::<fuse_in_header>() + core::mem::size_of::<fuse_lseek_in>();
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_in_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let cmd = unsafe {
let data = alloc(layout.unwrap());
let raw = core::ptr::slice_from_raw_parts_mut(data, 0) as *mut Cmd<fuse_lseek_in>;
Expand All @@ -551,7 +551,7 @@ fn create_lseek(
};

let len = core::mem::size_of::<fuse_out_header>() + core::mem::size_of::<fuse_lseek_out>();
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_out_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let rsp = unsafe {
let data = alloc(layout.unwrap());
let raw = core::ptr::slice_from_raw_parts_mut(data, 0) as *mut Rsp<fuse_lseek_out>;
Expand Down Expand Up @@ -596,7 +596,7 @@ fn create_write(
) -> (Box<Cmd<fuse_write_in>>, Box<Rsp<fuse_write_out>>) {
let len =
core::mem::size_of::<fuse_in_header>() + core::mem::size_of::<fuse_write_in>() + buf.len();
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_in_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let cmd = unsafe {
let data = alloc(layout.unwrap());
let raw = core::ptr::slice_from_raw_parts_mut(data, buf.len()) as *mut Cmd<fuse_write_in>;
Expand All @@ -619,7 +619,7 @@ fn create_write(
};

let len = core::mem::size_of::<fuse_out_header>() + core::mem::size_of::<fuse_write_out>();
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_out_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let rsp = unsafe {
let data = alloc(layout.unwrap());
let raw = core::ptr::slice_from_raw_parts_mut(data, 0) as *mut Rsp<fuse_write_out>;
Expand Down Expand Up @@ -655,7 +655,7 @@ unsafe impl FuseOut for fuse_open_out {}

fn create_open(nid: u64, flags: u32) -> (Box<Cmd<fuse_open_in>>, Box<Rsp<fuse_open_out>>) {
let len = core::mem::size_of::<fuse_in_header>() + core::mem::size_of::<fuse_open_in>();
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_in_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let cmd = unsafe {
let data = alloc(layout.unwrap());
let raw = core::ptr::slice_from_raw_parts_mut(data, 0) as *mut Cmd<fuse_open_in>;
Expand All @@ -669,7 +669,7 @@ fn create_open(nid: u64, flags: u32) -> (Box<Cmd<fuse_open_in>>, Box<Rsp<fuse_op
};

let len = core::mem::size_of::<fuse_out_header>() + core::mem::size_of::<fuse_open_out>();
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_out_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let rsp = unsafe {
let data = alloc(layout.unwrap());
let raw = core::ptr::slice_from_raw_parts_mut(data, 0) as *mut Rsp<fuse_open_out>;
Expand Down Expand Up @@ -702,7 +702,7 @@ unsafe impl FuseOut for fuse_release_out {}

fn create_release(nid: u64, fh: u64) -> (Box<Cmd<fuse_release_in>>, Box<Rsp<fuse_release_out>>) {
let len = core::mem::size_of::<fuse_in_header>() + core::mem::size_of::<fuse_release_in>();
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_in_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let cmd = unsafe {
let data = alloc(layout.unwrap());
let raw = core::ptr::slice_from_raw_parts_mut(data, 0) as *mut Cmd<fuse_release_in>;
Expand All @@ -716,7 +716,7 @@ fn create_release(nid: u64, fh: u64) -> (Box<Cmd<fuse_release_in>>, Box<Rsp<fuse
};

let len = core::mem::size_of::<fuse_out_header>() + core::mem::size_of::<fuse_release_out>();
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_out_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let rsp = unsafe {
let data = alloc(layout.unwrap());
let raw = core::ptr::slice_from_raw_parts_mut(data, 0) as *mut Rsp<fuse_release_out>;
Expand Down Expand Up @@ -787,7 +787,7 @@ fn create_unlink(name: &str) -> (Box<Cmd<fuse_unlink_in>>, Box<Rsp<fuse_unlink_o
+ core::mem::size_of::<fuse_unlink_in>()
+ slice.len()
+ 1;
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_in_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let cmd = unsafe {
let data = alloc(layout.unwrap());
let raw =
Expand All @@ -801,7 +801,7 @@ fn create_unlink(name: &str) -> (Box<Cmd<fuse_unlink_in>>, Box<Rsp<fuse_unlink_o
};

let len = core::mem::size_of::<fuse_out_header>() + core::mem::size_of::<fuse_unlink_out>();
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_out_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let rsp = unsafe {
let data = alloc(layout.unwrap());
let raw = core::ptr::slice_from_raw_parts_mut(data, 0) as *mut Rsp<fuse_unlink_out>;
Expand Down Expand Up @@ -845,7 +845,7 @@ fn create_create(
+ core::mem::size_of::<fuse_create_in>()
+ slice.len()
+ 1;
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_in_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let cmd = unsafe {
let data = alloc(layout.unwrap());
let raw =
Expand All @@ -864,7 +864,7 @@ fn create_create(
};

let len = core::mem::size_of::<fuse_out_header>() + core::mem::size_of::<fuse_create_out>();
let layout = Layout::from_size_align(len, core::mem::align_of::<fuse_out_header>());
let layout = Layout::from_size_align(len, core::mem::align_of::<u32>());
let rsp = unsafe {
let data = alloc(layout.unwrap());
let raw = core::ptr::slice_from_raw_parts_mut(data, 0) as *mut Rsp<fuse_create_out>;
Expand Down

0 comments on commit dd021d4

Please sign in to comment.