Date: Tue, 3 Sep 2019 19:55:45 +0000 (UTC) From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r351787 - stable/12/sys/kern Message-ID: <201909031955.x83JtjQC076214@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kib Date: Tue Sep 3 19:55:44 2019 New Revision: 351787 URL: https://svnweb.freebsd.org/changeset/base/351787 Log: MFC r350862: Only enable COMPAT_43 changes for syscalls ABI for a.out processes. Modified: stable/12/sys/kern/kern_prot.c stable/12/sys/kern/kern_sig.c stable/12/sys/kern/uipc_syscalls.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/kern/kern_prot.c ============================================================================== --- stable/12/sys/kern/kern_prot.c Tue Sep 3 19:52:28 2019 (r351786) +++ stable/12/sys/kern/kern_prot.c Tue Sep 3 19:55:44 2019 (r351787) @@ -62,6 +62,7 @@ __FBSDID("$FreeBSD$"); #include <sys/sx.h> #include <sys/priv.h> #include <sys/proc.h> +#include <sys/sysent.h> #include <sys/sysproto.h> #include <sys/jail.h> #include <sys/pioctl.h> @@ -101,7 +102,8 @@ sys_getpid(struct thread *td, struct getpid_args *uap) td->td_retval[0] = p->p_pid; #if defined(COMPAT_43) - td->td_retval[1] = kern_getppid(td); + if (SV_PROC_FLAG(p, SV_AOUT)) + td->td_retval[1] = kern_getppid(td); #endif return (0); } Modified: stable/12/sys/kern/kern_sig.c ============================================================================== --- stable/12/sys/kern/kern_sig.c Tue Sep 3 19:52:28 2019 (r351786) +++ stable/12/sys/kern/kern_sig.c Tue Sep 3 19:55:44 2019 (r351787) @@ -630,7 +630,7 @@ sigonstack(size_t sp) if ((td->td_pflags & TDP_ALTSTACK) == 0) return (0); #if defined(COMPAT_43) - if (td->td_sigstk.ss_size == 0) + if (SV_PROC_FLAG(td->td_proc, SV_AOUT) && td->td_sigstk.ss_size == 0) return ((td->td_sigstk.ss_flags & SS_ONSTACK) != 0); #endif return (sp >= (size_t)td->td_sigstk.ss_sp && Modified: stable/12/sys/kern/uipc_syscalls.c ============================================================================== --- stable/12/sys/kern/uipc_syscalls.c Tue Sep 3 19:52:28 2019 (r351786) +++ stable/12/sys/kern/uipc_syscalls.c Tue Sep 3 19:55:44 2019 (r351787) @@ -57,6 +57,7 @@ __FBSDID("$FreeBSD$"); #include <sys/socket.h> #include <sys/socketvar.h> #include <sys/syscallsubr.h> +#include <sys/sysent.h> #include <sys/uio.h> #include <sys/un.h> #include <sys/unpcb.h> @@ -292,7 +293,8 @@ accept1(td, s, uname, anamelen, flags) if (error == 0 && uname != NULL) { #ifdef COMPAT_OLDSOCK - if (flags & ACCEPT4_COMPAT) + if (SV_PROC_FLAG(td->td_proc, SV_AOUT) && + (flags & ACCEPT4_COMPAT) != 0) ((struct osockaddr *)name)->sa_family = name->sa_family; #endif @@ -693,7 +695,8 @@ sendit(struct thread *td, int s, struct msghdr *mp, in if (mp->msg_control) { if (mp->msg_controllen < sizeof(struct cmsghdr) #ifdef COMPAT_OLDSOCK - && mp->msg_flags != MSG_COMPAT + && (mp->msg_flags != MSG_COMPAT || + !SV_PROC_FLAG(td->td_proc, SV_AOUT)) #endif ) { error = EINVAL; @@ -704,7 +707,8 @@ sendit(struct thread *td, int s, struct msghdr *mp, in if (error != 0) goto bad; #ifdef COMPAT_OLDSOCK - if (mp->msg_flags == MSG_COMPAT) { + if (mp->msg_flags == MSG_COMPAT && + SV_PROC_FLAG(td->td_proc, SV_AOUT)) { struct cmsghdr *cm; M_PREPEND(control, sizeof(*cm), M_WAITOK); @@ -831,7 +835,8 @@ sys_sendto(struct thread *td, struct sendto_args *uap) msg.msg_iovlen = 1; msg.msg_control = 0; #ifdef COMPAT_OLDSOCK - msg.msg_flags = 0; + if (SV_PROC_FLAG(td->td_proc, SV_AOUT)) + msg.msg_flags = 0; #endif aiov.iov_base = uap->buf; aiov.iov_len = uap->len; @@ -892,7 +897,8 @@ sys_sendmsg(struct thread *td, struct sendmsg_args *ua return (error); msg.msg_iov = iov; #ifdef COMPAT_OLDSOCK - msg.msg_flags = 0; + if (SV_PROC_FLAG(td->td_proc, SV_AOUT)) + msg.msg_flags = 0; #endif error = sendit(td, uap->s, &msg, uap->flags); free(iov, M_IOV); @@ -981,7 +987,8 @@ kern_recvit(struct thread *td, int s, struct msghdr *m /* save sa_len before it is destroyed by MSG_COMPAT */ len = MIN(len, fromsa->sa_len); #ifdef COMPAT_OLDSOCK - if (mp->msg_flags & MSG_COMPAT) + if ((mp->msg_flags & MSG_COMPAT) != 0 && + SV_PROC_FLAG(td->td_proc, SV_AOUT)) ((struct osockaddr *)fromsa)->sa_family = fromsa->sa_family; #endif @@ -1004,7 +1011,8 @@ kern_recvit(struct thread *td, int s, struct msghdr *m * If we receive rights, trim the cmsghdr; anything else * is tossed. */ - if (control && mp->msg_flags & MSG_COMPAT) { + if (control && (mp->msg_flags & MSG_COMPAT) != 0 && + SV_PROC_FLAG(td->td_proc, SV_AOUT)) { if (mtod(control, struct cmsghdr *)->cmsg_level != SOL_SOCKET || mtod(control, struct cmsghdr *)->cmsg_type != @@ -1063,7 +1071,8 @@ recvit(struct thread *td, int s, struct msghdr *mp, vo if (namelenp != NULL) { error = copyout(&mp->msg_namelen, namelenp, sizeof (socklen_t)); #ifdef COMPAT_OLDSOCK - if (mp->msg_flags & MSG_COMPAT) + if ((mp->msg_flags & MSG_COMPAT) != 0 && + SV_PROC_FLAG(td->td_proc, SV_AOUT)) error = 0; /* old recvfrom didn't check */ #endif } @@ -1169,7 +1178,8 @@ sys_recvmsg(struct thread *td, struct recvmsg_args *ua return (error); msg.msg_flags = uap->flags; #ifdef COMPAT_OLDSOCK - msg.msg_flags &= ~MSG_COMPAT; + if (SV_PROC_FLAG(td->td_proc, SV_AOUT)) + msg.msg_flags &= ~MSG_COMPAT; #endif uiov = msg.msg_iov; msg.msg_iov = iov; @@ -1351,7 +1361,7 @@ getsockname1(struct thread *td, struct getsockname_arg if (len != 0) { #ifdef COMPAT_OLDSOCK - if (compat) + if (compat && SV_PROC_FLAG(td->td_proc, SV_AOUT)) ((struct osockaddr *)sa)->sa_family = sa->sa_family; #endif error = copyout(sa, uap->asa, (u_int)len); @@ -1437,7 +1447,7 @@ getpeername1(struct thread *td, struct getpeername_arg if (len != 0) { #ifdef COMPAT_OLDSOCK - if (compat) + if (compat && SV_PROC_FLAG(td->td_proc, SV_AOUT)) ((struct osockaddr *)sa)->sa_family = sa->sa_family; #endif error = copyout(sa, uap->asa, (u_int)len); @@ -1518,7 +1528,8 @@ sockargs(struct mbuf **mp, char *buf, socklen_t buflen if (buflen > MLEN) { #ifdef COMPAT_OLDSOCK - if (type == MT_SONAME && buflen <= 112) + if (type == MT_SONAME && buflen <= 112 && + SV_CURPROC_FLAG(SV_AOUT)) buflen = MLEN; /* unix domain compat. hack */ else #endif @@ -1536,7 +1547,8 @@ sockargs(struct mbuf **mp, char *buf, socklen_t buflen sa = mtod(m, struct sockaddr *); #if defined(COMPAT_OLDSOCK) && BYTE_ORDER != BIG_ENDIAN - if (sa->sa_family == 0 && sa->sa_len < AF_MAX) + if (sa->sa_family == 0 && sa->sa_len < AF_MAX && + SV_CURPROC_FLAG(SV_AOUT)) sa->sa_family = sa->sa_len; #endif sa->sa_len = buflen; @@ -1561,7 +1573,8 @@ getsockaddr(struct sockaddr **namp, caddr_t uaddr, siz free(sa, M_SONAME); } else { #if defined(COMPAT_OLDSOCK) && BYTE_ORDER != BIG_ENDIAN - if (sa->sa_family == 0 && sa->sa_len < AF_MAX) + if (sa->sa_family == 0 && sa->sa_len < AF_MAX && + SV_CURPROC_FLAG(SV_AOUT)) sa->sa_family = sa->sa_len; #endif sa->sa_len = len;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201909031955.x83JtjQC076214>