From fd7d202362b699bce72a575435b0d0f5f5ede92c Mon Sep 17 00:00:00 2001 From: xushanpu123 <798304030@qq.com> Date: Fri, 21 Apr 2023 20:09:36 +0800 Subject: [PATCH] fix a panic problem in syscall/socket.rs If file is not a Socket type , `file.as_any().downcast_ref::()` will return None , so its unwrap() will cause a panic. This patch adds a check to return error when file.as_any().downcast_ref is not a Socket type. --- kernel/src/syscall/socket.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kernel/src/syscall/socket.rs b/kernel/src/syscall/socket.rs index 6463e374..66f0554a 100644 --- a/kernel/src/syscall/socket.rs +++ b/kernel/src/syscall/socket.rs @@ -116,7 +116,11 @@ pub fn sys_bind(fd: usize, addr: *const u8, addr_len: usize) -> SysResult { } let fd_manager = task.fd_manager.lock(); if let Ok(file) = fd_manager.get_file(fd) { - let sock = file.as_any().downcast_ref::().unwrap().clone(); + let sock_any = file.as_any(); + if !sock_any.is::(){ + return Err(ErrorNo::EFAULT); + } + let sock = sock_any.downcast_ref::().unwrap().clone(); if let Some(_p) = sock.set_endpoint(addr, false) { Ok(0) } else {