Module Name: src Committed By: christos Date: Fri Oct 1 17:13:44 UTC 2021
Modified Files: src/lib/libc/sys: Makefile.inc src/lib/libpthread: pthread_cancelstub.c Log Message: PR/56424: Clay Mayers: recvfrom() is not a cancelation point as documented in pthread_setcanceltype.3 To generate a diff of this commit: cvs rdiff -u -r1.246 -r1.247 src/lib/libc/sys/Makefile.inc cvs rdiff -u -r1.38 -r1.39 src/lib/libpthread/pthread_cancelstub.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libc/sys/Makefile.inc diff -u src/lib/libc/sys/Makefile.inc:1.246 src/lib/libc/sys/Makefile.inc:1.247 --- src/lib/libc/sys/Makefile.inc:1.246 Sun Sep 19 11:51:28 2021 +++ src/lib/libc/sys/Makefile.inc Fri Oct 1 13:13:44 2021 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.inc,v 1.246 2021/09/19 15:51:28 thorpej Exp $ +# $NetBSD: Makefile.inc,v 1.247 2021/10/01 17:13:44 christos Exp $ # @(#)Makefile.inc 8.3 (Berkeley) 10/24/94 # sys sources @@ -97,7 +97,7 @@ ASM=\ __acl_aclcheck_file.S __acl_aclcheck_fd.S \ access.S acct.S \ bind.S \ - chdir.S chflags.S chmod.S chown.S chroot.S clock_nanosleep.S \ + chdir.S chflags.S chmod.S chown.S chroot.S \ clock_getcpuclockid2.S \ __clock_getres50.S __clock_gettime50.S \ dup.S dup2.S dup3.S \ @@ -137,15 +137,14 @@ ASM=\ mprotect.S __msgctl50.S msgget.S munlock.S munlockall.S \ munmap.S \ nfssvc.S __ntp_gettime50.S \ - openat.S \ pathconf.S pipe2.S \ __posix_chown.S __posix_fchown.S __posix_lchown.S \ __posix_rename.S profil.S \ __quotactl.S \ - rasctl.S readlinkat.S reboot.S recvfrom.S recvmmsg.S recvmsg.S \ + rasctl.S readlinkat.S reboot.S \ rename.S renameat.S revoke.S rmdir.S \ semconfig.S semget.S semop.S \ - sendmmsg.S sendmsg.S sendto.S setegid.S seteuid.S \ + setegid.S seteuid.S \ setgid.S setgroups.S __setitimer50.S __setlogin.S setpgid.S \ setpriority.S \ setregid.S setreuid.S setrlimit.S setsid.S setsockopt.S \ @@ -175,15 +174,19 @@ ASM_MD= _lwp_getprivate.S mremap.S . endif .endfor -WEAKASM= accept.S __aio_suspend50.S close.S connect.S execve.S \ +WEAKASM= accept.S __aio_suspend50.S clock_nanosleep.S close.S connect.S \ + execve.S \ fcntl.S fdatasync.S fsync.S \ fsync_range.S __kevent50.S \ kill.S mq_receive.S mq_send.S __mq_timedreceive50.S __mq_timedsend50.S \ - msgrcv.S msgsnd.S __msync13.S __nanosleep50.S open.S paccept.S poll.S \ + msgrcv.S msgsnd.S __msync13.S __nanosleep50.S open.S openat.S \ + paccept.S poll.S \ __pollts50.S __pselect50.S read.S readlink.S \ - readv.S _sched_setparam.S _sched_getparam.S _sched_setaffinity.S \ + readv.S recvfrom.S recvmmsg.S recvmsg.S \ + _sched_setparam.S _sched_getparam.S _sched_setaffinity.S \ _sched_getaffinity.S sched_yield.S _sched_protect.S \ - __select50.S setcontext.S __sigprocmask14.S __sigsuspend14.S sysarch.S \ + __select50.S sendmmsg.S sendmsg.S sendto.S \ + setcontext.S __sigprocmask14.S __sigsuspend14.S sysarch.S \ __wait450.S wait6.S write.S writev.S NOERR= getegid.S geteuid.S getgid.S getpid.S getppid.S getuid.S \ Index: src/lib/libpthread/pthread_cancelstub.c diff -u src/lib/libpthread/pthread_cancelstub.c:1.38 src/lib/libpthread/pthread_cancelstub.c:1.39 --- src/lib/libpthread/pthread_cancelstub.c:1.38 Thu Mar 21 12:49:12 2013 +++ src/lib/libpthread/pthread_cancelstub.c Fri Oct 1 13:13:44 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: pthread_cancelstub.c,v 1.38 2013/03/21 16:49:12 christos Exp $ */ +/* $NetBSD: pthread_cancelstub.c,v 1.39 2021/10/01 17:13:44 christos Exp $ */ /*- * Copyright (c) 2002, 2007 The NetBSD Foundation, Inc. @@ -33,7 +33,7 @@ #undef _FORTIFY_SOURCE #include <sys/cdefs.h> -__RCSID("$NetBSD: pthread_cancelstub.c,v 1.38 2013/03/21 16:49:12 christos Exp $"); +__RCSID("$NetBSD: pthread_cancelstub.c,v 1.39 2021/10/01 17:13:44 christos Exp $"); #ifndef lint @@ -90,6 +90,8 @@ int _sys___aio_suspend50(const struct ai const struct timespec *); int __aio_suspend50(const struct aiocb * const [], int, const struct timespec *); +int _sys_clock_nanosleep(clockid_t clock_id, int flags, + const struct timespec *rqtp, struct timespec *rmtp); int _sys_close(int); int _sys_connect(int, const struct sockaddr *, socklen_t); int _sys_fcntl(int, int, ...); @@ -110,6 +112,7 @@ int _sys___msync13(void *, size_t, int); int _sys___nanosleep50(const struct timespec *, struct timespec *); int __nanosleep50(const struct timespec *, struct timespec *); int _sys_open(const char *, int, ...); +int _sys_openat(int, const char *, int, ...); int _sys_poll(struct pollfd *, nfds_t, int); int _sys___pollts50(struct pollfd *, nfds_t, const struct timespec *, const sigset_t *); @@ -119,6 +122,16 @@ int _sys___pselect50(int, fd_set *, fd_s ssize_t _sys_pwrite(int, const void *, size_t, off_t); ssize_t _sys_read(int, void *, size_t); ssize_t _sys_readv(int, const struct iovec *, int); +ssize_t _sys_recvfrom(int, void * restrict, size_t, int, + struct sockaddr * restrict, socklen_t * restrict); +ssize_t _sys_recvmsg(int, struct msghdr *, int); +int _sys_recvmmsg(int, struct mmsghdr *, unsigned int, unsigned int, + struct timespec *); +ssize_t _sys_sendto(int s, const void *msg, size_t len, int flags, + const struct sockaddr *to, socklen_t tolen); +ssize_t _sys_sendmsg(int s, const struct msghdr *msg, int flags); +int _sys_sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, + unsigned int flags); int _sys___select50(int, fd_set *, fd_set *, fd_set *, struct timeval *); int _sys___wait450(pid_t, int *, int, struct rusage *); ssize_t _sys_write(int, const void *, size_t); @@ -180,6 +193,21 @@ __kevent50(int fd, const struct kevent * } int +clock_nanosleep(clockid_t clock_id, int flags, + const struct timespec *rqtp, struct timespec *rmtp) +{ + int retval; + pthread_t self; + + self = pthread__self(); + TESTCANCEL(self); + retval = _sys_clock_nanosleep(clock_id, flags, rqtp, rmtp); + TESTCANCEL(self); + + return retval; +} + +int close(int d) { int retval; @@ -384,6 +412,23 @@ open(const char *path, int flags, ...) } int +openat(int fd, const char *path, int flags, ...) +{ + int retval; + pthread_t self; + va_list ap; + + self = pthread__self(); + TESTCANCEL(self); + va_start(ap, flags); + retval = _sys_openat(fd, path, flags, va_arg(ap, mode_t)); + va_end(ap); + TESTCANCEL(self); + + return retval; +} + +int __nanosleep50(const struct timespec *rqtp, struct timespec *rmtp) { int retval; @@ -502,6 +547,50 @@ readv(int d, const struct iovec *iov, in return retval; } +ssize_t +recvfrom(int s, void * restrict buf, size_t len, int flags, + struct sockaddr * restrict from, socklen_t * restrict fromlen) +{ + ssize_t retval; + pthread_t self; + + self = pthread__self(); + TESTCANCEL(self); + retval = _sys_recvfrom(s, buf, len, flags, from, fromlen); + TESTCANCEL(self); + + return retval; +} + +ssize_t +recvmsg(int s, struct msghdr *msg, int flags) +{ + ssize_t retval; + pthread_t self; + + self = pthread__self(); + TESTCANCEL(self); + retval = _sys_recvmsg(s, msg, flags); + TESTCANCEL(self); + + return retval; +} + +int +recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, + unsigned int flags, struct timespec *timeout) +{ + ssize_t retval; + pthread_t self; + + self = pthread__self(); + TESTCANCEL(self); + retval = _sys_recvmmsg(s, mmsg, vlen, flags, timeout); + TESTCANCEL(self); + + return retval; +} + int __select50(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) @@ -517,6 +606,51 @@ __select50(int nfds, fd_set *readfds, fd return retval; } +ssize_t +sendto(int s, const void *msg, size_t len, int flags, + const struct sockaddr *to, socklen_t tolen) +{ + int retval; + pthread_t self; + + self = pthread__self(); + TESTCANCEL(self); + retval = _sys_sendto(s, msg, len, flags, to, tolen); + TESTCANCEL(self); + + return retval; +} + +ssize_t +sendmsg(int s, const struct msghdr *msg, int flags) +{ + int retval; + pthread_t self; + + self = pthread__self(); + TESTCANCEL(self); + retval = _sys_sendmsg(s, msg, flags); + TESTCANCEL(self); + + return retval; +} + +int +sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, + unsigned int flags) +{ + int retval; + pthread_t self; + + self = pthread__self(); + TESTCANCEL(self); + retval = _sys_sendmmsg(s, mmsg, vlen, flags); + TESTCANCEL(self); + + return retval; +} + + pid_t __wait450(pid_t wpid, int *status, int options, struct rusage *rusage) { @@ -618,6 +752,7 @@ sigwait(const sigset_t * __restrict set, } __strong_alias(_close, close) +__strong_alias(_clock_nanosleep, clock_nanosleep) __strong_alias(_fcntl, fcntl) __strong_alias(_fdatasync, fdatasync) __strong_alias(_fsync, fsync) @@ -629,11 +764,18 @@ __strong_alias(_msgsnd, msgsnd) __strong_alias(___msync13, __msync13) __strong_alias(___nanosleep50, __nanosleep50) __strong_alias(_open, open) +__strong_alias(_openat, openat) __strong_alias(_poll, poll) __strong_alias(_pread, pread) __strong_alias(_pwrite, pwrite) __strong_alias(_read, read) __strong_alias(_readv, readv) +__strong_alias(_recvfrom, recvfrom) +__strong_alias(_recvmsg, recvmsg) +__strong_alias(_recvmmsg, recvmmsg) +__strong_alias(_sendmsg, sendmsg) +__strong_alias(_sendmmsg, sendmmsg) +__strong_alias(_sendto, sendto) __strong_alias(_sigwait, sigwait) __strong_alias(_write, write) __strong_alias(_writev, writev)