From 0c96b26c23ae61f590e4726edc55d4d37e2fbe82 Mon Sep 17 00:00:00 2001 From: rcitachi Date: Fri, 26 Jan 2024 22:14:02 +0800 Subject: [PATCH] [sys_bind] [signalfd] update (#8507) --- components/libc/posix/io/signalfd/SConscript | 5 ++--- components/lwp/lwp_syscall.c | 17 ++++++++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/components/libc/posix/io/signalfd/SConscript b/components/libc/posix/io/signalfd/SConscript index 98edd63725..724453b099 100644 --- a/components/libc/posix/io/signalfd/SConscript +++ b/components/libc/posix/io/signalfd/SConscript @@ -6,9 +6,8 @@ cwd = GetCurrentDir() src = [] CPPPATH = [cwd] -if GetDepend('RT_USING_DFS'): - if GetDepend('RT_USING_MUSLLIBC'): - src += ['signalfd.c'] +if GetDepend('RT_USING_POSIX_SIGNALFD'): + src += ['signalfd.c'] group = DefineGroup('POSIX', src, depend = ['RT_USING_SMART','RT_USING_POSIX_SIGNALFD'], CPPPATH = CPPPATH) diff --git a/components/lwp/lwp_syscall.c b/components/lwp/lwp_syscall.c index 657dd01b89..ef3084c22b 100644 --- a/components/lwp/lwp_syscall.c +++ b/components/lwp/lwp_syscall.c @@ -3292,6 +3292,7 @@ sysret_t sys_bind(int socket, const struct musl_sockaddr *name, socklen_t namele { rt_err_t ret = 0; struct sockaddr sa; + struct sockaddr_un un_addr; struct musl_sockaddr kname; rt_uint16_t family = 0; @@ -3301,14 +3302,24 @@ sysret_t sys_bind(int socket, const struct musl_sockaddr *name, socklen_t namele } lwp_get_from_user(&family, (void *)name, 2); - if ((family == AF_UNIX) || (family == AF_NETLINK)) + if (family == AF_UNIX) { - if (!lwp_user_accessable((void *)name, sizeof(struct sockaddr))) + if (!lwp_user_accessable((void *)name, sizeof(struct sockaddr_un))) { return -EFAULT; } - lwp_get_from_user(&sa, (void *)name, sizeof(struct sockaddr)); + lwp_get_from_user(&un_addr, (void *)name, sizeof(struct sockaddr_un)); + ret = bind(socket, (struct sockaddr *)&un_addr, namelen); + } + else if (family == AF_NETLINK) + { + if (!lwp_user_accessable((void *)name, namelen)) + { + return -EFAULT; + } + + lwp_get_from_user(&sa, (void *)name, namelen); ret = bind(socket, &sa, namelen); }