@@ -4803,20 +4803,6 @@ pub extern "C" fn symlinkat_syscall(
48034803
48044804 ret
48054805}
4806- "getrandom_syscall"
4807- ) ;
4808- }
4809-
4810- let ret = unsafe { getrandom ( buf as * mut c_void , buflen. try_into ( ) . unwrap ( ) , flags) } ;
4811- if ret < 0 {
4812- let errno = get_errno ( ) ;
4813- return handle_errno ( errno, "getrandom" ) ;
4814- }
4815-
4816- // convert isize to i32 safely, as ret shouldn't be larger than 32-bit
4817- // due to buflen being u32
4818- ret. try_into ( ) . unwrap ( )
4819- }
48204806
48214807/// Linux reference: https://man7.org/linux/man-pages/man2/setxattr.2.html
48224808///
@@ -4853,18 +4839,24 @@ pub extern "C" fn setxattr_syscall(
48534839 arg6 : u64 ,
48544840 arg6_cageid : u64 ,
48554841) -> i32 {
4856- // Type conversion
4842+ // Type conversion for path
48574843 let path = match sc_convert_path_to_host ( path_arg, path_cageid, cageid) {
48584844 Ok ( path) => path,
48594845 Err ( e) => return syscall_error ( e, "setxattr" , "path conversion failed" ) ,
48604846 } ;
48614847
4862- let name = match sc_convert_path_to_host ( name_arg, name_cageid, cageid) {
4863- Ok ( name) => name,
4864- Err ( e) => return syscall_error ( e, "setxattr" , "name conversion failed" ) ,
4848+ // Type conversion for name (attribute name, not a path - no path normalization needed)
4849+ let name_str = match get_cstr ( name_arg) {
4850+ Ok ( s) => s,
4851+ Err ( _) => return syscall_error ( Errno :: EFAULT , "setxattr" , "name conversion failed" ) ,
4852+ } ;
4853+ let name = match std:: ffi:: CString :: new ( name_str) {
4854+ Ok ( s) => s,
4855+ Err ( _) => return syscall_error ( Errno :: EINVAL , "setxattr" , "name contains null byte" ) ,
48654856 } ;
48664857
4867- let value = value_arg as * const libc:: c_void ;
4858+ // Type conversion for value buffer
4859+ let value = sc_convert_buf ( value_arg, value_cageid, cageid) as * const libc:: c_void ;
48684860 let size = sc_convert_sysarg_to_usize ( size_arg, size_cageid, cageid) ;
48694861 let flags = sc_convert_sysarg_to_i32 ( flags_arg, flags_cageid, cageid) ;
48704862
@@ -4919,16 +4911,17 @@ pub extern "C" fn listxattr_syscall(
49194911 arg6 : u64 ,
49204912 arg6_cageid : u64 ,
49214913) -> i32 {
4922- // Type conversion
4914+ // Type conversion for path
49234915 let path = match sc_convert_path_to_host ( path_arg, path_cageid, cageid) {
49244916 Ok ( path) => path,
49254917 Err ( e) => return syscall_error ( e, "listxattr" , "path conversion failed" ) ,
49264918 } ;
49274919
4920+ // Type conversion for list buffer (may be NULL)
49284921 let list = if list_arg == 0 {
49294922 std:: ptr:: null_mut ( )
49304923 } else {
4931- list_arg as * mut libc:: c_char
4924+ sc_convert_to_u8_mut ( list_arg, list_cageid , cageid ) as * mut libc:: c_char
49324925 } ;
49334926 let size = sc_convert_sysarg_to_usize ( size_arg, size_cageid, cageid) ;
49344927
0 commit comments