From c2296c13d2e32be92c8b62b07d213f072c4a19e7 Mon Sep 17 00:00:00 2001 From: ClawSeven Date: Mon, 29 Jan 2024 15:38:58 +0800 Subject: [PATCH] [libos] Fix sendfile with non-writable file --- src/libos/src/fs/file_ops/sendfile.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/libos/src/fs/file_ops/sendfile.rs b/src/libos/src/fs/file_ops/sendfile.rs index 3f261aec..90cc7d73 100644 --- a/src/libos/src/fs/file_ops/sendfile.rs +++ b/src/libos/src/fs/file_ops/sendfile.rs @@ -15,6 +15,17 @@ pub fn do_sendfile( let current = current!(); let in_file = current.file(in_fd)?; let out_file = current.file(out_fd)?; + + let in_file_access = in_file.access_mode()?; + if !in_file_access.readable() { + return_errno!(EBADF, "The in file is non-readable"); + } + + let out_file_access = out_file.access_mode()?; + if !out_file_access.writable() { + return_errno!(EBADF, "The out file is non-writable"); + } + let mut buffer: [u8; 1024 * 11] = unsafe { MaybeUninit::uninit().assume_init() }; let mut read_offset = match offset {