From owner-svn-src-all@freebsd.org Sun Apr 28 14:16:04 2019 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 60EC9157F994; Sun, 28 Apr 2019 14:16:04 +0000 (UTC) (envelope-from dchagin@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 0BB5595527; Sun, 28 Apr 2019 14:16:04 +0000 (UTC) (envelope-from dchagin@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D9889BD51; Sun, 28 Apr 2019 14:16:03 +0000 (UTC) (envelope-from dchagin@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x3SEG3J7044905; Sun, 28 Apr 2019 14:16:03 GMT (envelope-from dchagin@FreeBSD.org) Received: (from dchagin@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x3SEG1NP044893; Sun, 28 Apr 2019 14:16:01 GMT (envelope-from dchagin@FreeBSD.org) Message-Id: <201904281416.x3SEG1NP044893@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dchagin set sender to dchagin@FreeBSD.org using -f From: Dmitry Chagin Date: Sun, 28 Apr 2019 14:16:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r346838 - in stable/11/sys: amd64/linux amd64/linux32 compat/linux i386/linux X-SVN-Group: stable-11 X-SVN-Commit-Author: dchagin X-SVN-Commit-Paths: in stable/11/sys: amd64/linux amd64/linux32 compat/linux i386/linux X-SVN-Commit-Revision: 346838 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 0BB5595527 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.98 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.997,0]; NEURAL_HAM_SHORT(-0.98)[-0.983,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Apr 2019 14:16:04 -0000 Author: dchagin Date: Sun Apr 28 14:16:00 2019 New Revision: 346838 URL: https://svnweb.freebsd.org/changeset/base/346838 Log: MFC r345469, r345470: Linux between 4.18 and 5.0 split IPC system calls. In preparation for doing this in the Linuxulator modify our linux_shmat() to match actual Linux shmat() system call. Modified: stable/11/sys/amd64/linux/linux_proto.h stable/11/sys/amd64/linux/linux_systrace_args.c stable/11/sys/amd64/linux32/linux32_machdep.c stable/11/sys/amd64/linux32/linux32_proto.h stable/11/sys/amd64/linux32/linux32_systrace_args.c stable/11/sys/amd64/linux32/syscalls.master stable/11/sys/compat/linux/linux_ipc.c stable/11/sys/compat/linux/linux_ipc.h stable/11/sys/i386/linux/linux_machdep.c stable/11/sys/i386/linux/linux_proto.h stable/11/sys/i386/linux/linux_systrace_args.c stable/11/sys/i386/linux/syscalls.master Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/amd64/linux/linux_proto.h ============================================================================== --- stable/11/sys/amd64/linux/linux_proto.h Sun Apr 28 14:11:21 2019 (r346837) +++ stable/11/sys/amd64/linux/linux_proto.h Sun Apr 28 14:16:00 2019 (r346838) @@ -66,8 +66,8 @@ struct linux_mmap2_args { }; struct linux_mprotect_args { char addr_l_[PADL_(caddr_t)]; caddr_t addr; char addr_r_[PADR_(caddr_t)]; - char len_l_[PADL_(int)]; int len; char len_r_[PADR_(int)]; - char prot_l_[PADL_(int)]; int prot; char prot_r_[PADR_(int)]; + char len_l_[PADL_(l_int)]; l_int len; char len_r_[PADR_(l_int)]; + char prot_l_[PADL_(l_int)]; l_int prot; char prot_r_[PADR_(l_int)]; }; struct linux_brk_args { char dsend_l_[PADL_(l_ulong)]; l_ulong dsend; char dsend_r_[PADR_(l_ulong)]; @@ -173,8 +173,8 @@ struct linux_getpid_args { register_t dummy; }; struct linux_sendfile_args { - char out_l_[PADL_(int)]; int out; char out_r_[PADR_(int)]; - char in_l_[PADL_(int)]; int in; char in_r_[PADR_(int)]; + char out_l_[PADL_(l_int)]; l_int out; char out_r_[PADR_(l_int)]; + char in_l_[PADL_(l_int)]; l_int in; char in_r_[PADR_(l_int)]; char offset_l_[PADL_(l_long *)]; l_long * offset; char offset_r_[PADR_(l_long *)]; char count_l_[PADL_(l_size_t)]; l_size_t count; char count_r_[PADR_(l_size_t)]; }; @@ -281,7 +281,7 @@ struct linux_execve_args { char envp_l_[PADL_(char **)]; char ** envp; char envp_r_[PADR_(char **)]; }; struct linux_exit_args { - char rval_l_[PADL_(int)]; int rval; char rval_r_[PADR_(int)]; + char rval_l_[PADL_(l_int)]; l_int rval; char rval_r_[PADR_(l_int)]; }; struct linux_wait4_args { char pid_l_[PADL_(l_pid_t)]; l_pid_t pid; char pid_r_[PADR_(l_pid_t)]; @@ -518,8 +518,8 @@ struct linux_sysfs_args { char arg2_l_[PADL_(l_ulong)]; l_ulong arg2; char arg2_r_[PADR_(l_ulong)]; }; struct linux_getpriority_args { - char which_l_[PADL_(int)]; int which; char which_r_[PADR_(int)]; - char who_l_[PADL_(int)]; int who; char who_r_[PADR_(int)]; + char which_l_[PADL_(l_int)]; l_int which; char which_r_[PADR_(l_int)]; + char who_l_[PADL_(l_int)]; l_int who; char who_r_[PADR_(l_int)]; }; struct linux_sched_setparam_args { char pid_l_[PADL_(l_pid_t)]; l_pid_t pid; char pid_r_[PADR_(l_pid_t)]; @@ -654,19 +654,19 @@ struct linux_fremovexattr_args { register_t dummy; }; struct linux_tkill_args { - char tid_l_[PADL_(int)]; int tid; char tid_r_[PADR_(int)]; - char sig_l_[PADL_(int)]; int sig; char sig_r_[PADR_(int)]; + char tid_l_[PADL_(l_int)]; l_int tid; char tid_r_[PADR_(l_int)]; + char sig_l_[PADL_(l_int)]; l_int sig; char sig_r_[PADR_(l_int)]; }; struct linux_time_args { char tm_l_[PADL_(l_time_t *)]; l_time_t * tm; char tm_r_[PADR_(l_time_t *)]; }; struct linux_sys_futex_args { char uaddr_l_[PADL_(void *)]; void * uaddr; char uaddr_r_[PADR_(void *)]; - char op_l_[PADL_(int)]; int op; char op_r_[PADR_(int)]; - char val_l_[PADL_(int)]; int val; char val_r_[PADR_(int)]; + char op_l_[PADL_(l_int)]; l_int op; char op_r_[PADR_(l_int)]; + char val_l_[PADL_(l_int)]; l_int val; char val_r_[PADR_(l_int)]; char timeout_l_[PADL_(struct l_timespec *)]; struct l_timespec * timeout; char timeout_r_[PADR_(struct l_timespec *)]; char uaddr2_l_[PADL_(void *)]; void * uaddr2; char uaddr2_r_[PADR_(void *)]; - char val3_l_[PADL_(int)]; int val3; char val3_r_[PADR_(int)]; + char val3_l_[PADL_(l_int)]; l_int val3; char val3_r_[PADR_(l_int)]; }; struct linux_sched_setaffinity_args { char pid_l_[PADL_(l_pid_t)]; l_pid_t pid; char pid_r_[PADR_(l_pid_t)]; @@ -693,16 +693,16 @@ struct linux_getdents64_args { char count_l_[PADL_(l_uint)]; l_uint count; char count_r_[PADR_(l_uint)]; }; struct linux_set_tid_address_args { - char tidptr_l_[PADL_(int *)]; int * tidptr; char tidptr_r_[PADR_(int *)]; + char tidptr_l_[PADL_(l_int *)]; l_int * tidptr; char tidptr_r_[PADR_(l_int *)]; }; struct linux_semtimedop_args { register_t dummy; }; struct linux_fadvise64_args { - char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)]; + char fd_l_[PADL_(l_int)]; l_int fd; char fd_r_[PADR_(l_int)]; char offset_l_[PADL_(l_loff_t)]; l_loff_t offset; char offset_r_[PADR_(l_loff_t)]; char len_l_[PADL_(l_size_t)]; l_size_t len; char len_r_[PADR_(l_size_t)]; - char advice_l_[PADL_(int)]; int advice; char advice_r_[PADR_(int)]; + char advice_l_[PADL_(l_int)]; l_int advice; char advice_r_[PADR_(l_int)]; }; struct linux_timer_create_args { char clock_id_l_[PADL_(clockid_t)]; clockid_t clock_id; char clock_id_r_[PADR_(clockid_t)]; @@ -744,7 +744,7 @@ struct linux_clock_nanosleep_args { char rmtp_l_[PADL_(struct l_timespec *)]; struct l_timespec * rmtp; char rmtp_r_[PADR_(struct l_timespec *)]; }; struct linux_exit_group_args { - char error_code_l_[PADL_(int)]; int error_code; char error_code_r_[PADR_(int)]; + char error_code_l_[PADL_(l_int)]; l_int error_code; char error_code_r_[PADR_(l_int)]; }; struct linux_epoll_wait_args { char epfd_l_[PADL_(l_int)]; l_int epfd; char epfd_r_[PADR_(l_int)]; @@ -759,9 +759,9 @@ struct linux_epoll_ctl_args { char event_l_[PADL_(struct epoll_event *)]; struct epoll_event * event; char event_r_[PADR_(struct epoll_event *)]; }; struct linux_tgkill_args { - char tgid_l_[PADL_(int)]; int tgid; char tgid_r_[PADR_(int)]; - char pid_l_[PADL_(int)]; int pid; char pid_r_[PADR_(int)]; - char sig_l_[PADL_(int)]; int sig; char sig_r_[PADR_(int)]; + char tgid_l_[PADL_(l_int)]; l_int tgid; char tgid_r_[PADR_(l_int)]; + char pid_l_[PADL_(l_int)]; l_int pid; char pid_r_[PADR_(l_int)]; + char sig_l_[PADL_(l_int)]; l_int sig; char sig_r_[PADR_(l_int)]; }; struct linux_utimes_args { char fname_l_[PADL_(char *)]; char * fname; char fname_r_[PADR_(char *)]; @@ -798,10 +798,10 @@ struct linux_kexec_load_args { register_t dummy; }; struct linux_waitid_args { - char idtype_l_[PADL_(int)]; int idtype; char idtype_r_[PADR_(int)]; + char idtype_l_[PADL_(l_int)]; l_int idtype; char idtype_r_[PADR_(l_int)]; char id_l_[PADL_(l_pid_t)]; l_pid_t id; char id_r_[PADR_(l_pid_t)]; char info_l_[PADL_(l_siginfo_t *)]; l_siginfo_t * info; char info_r_[PADR_(l_siginfo_t *)]; - char options_l_[PADL_(int)]; int options; char options_r_[PADR_(int)]; + char options_l_[PADL_(l_int)]; l_int options; char options_r_[PADR_(l_int)]; char rusage_l_[PADL_(struct rusage *)]; struct rusage * rusage; char rusage_r_[PADR_(struct rusage *)]; }; struct linux_add_key_args { Modified: stable/11/sys/amd64/linux/linux_systrace_args.c ============================================================================== --- stable/11/sys/amd64/linux/linux_systrace_args.c Sun Apr 28 14:11:21 2019 (r346837) +++ stable/11/sys/amd64/linux/linux_systrace_args.c Sun Apr 28 14:16:00 2019 (r346838) @@ -104,8 +104,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg case 10: { struct linux_mprotect_args *p = params; uarg[0] = (intptr_t) p->addr; /* caddr_t */ - iarg[1] = p->len; /* int */ - iarg[2] = p->prot; /* int */ + iarg[1] = p->len; /* l_int */ + iarg[2] = p->prot; /* l_int */ *n_args = 3; break; } @@ -354,8 +354,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg /* linux_sendfile */ case 40: { struct linux_sendfile_args *p = params; - iarg[0] = p->out; /* int */ - iarg[1] = p->in; /* int */ + iarg[0] = p->out; /* l_int */ + iarg[1] = p->in; /* l_int */ uarg[2] = (intptr_t) p->offset; /* l_long * */ iarg[3] = p->count; /* l_size_t */ *n_args = 4; @@ -538,7 +538,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg /* linux_exit */ case 60: { struct linux_exit_args *p = params; - iarg[0] = p->rval; /* int */ + iarg[0] = p->rval; /* l_int */ *n_args = 1; break; } @@ -1160,8 +1160,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg /* linux_getpriority */ case 140: { struct linux_getpriority_args *p = params; - iarg[0] = p->which; /* int */ - iarg[1] = p->who; /* int */ + iarg[0] = p->which; /* l_int */ + iarg[1] = p->who; /* l_int */ *n_args = 2; break; } @@ -1479,8 +1479,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg /* linux_tkill */ case 200: { struct linux_tkill_args *p = params; - iarg[0] = p->tid; /* int */ - iarg[1] = p->sig; /* int */ + iarg[0] = p->tid; /* l_int */ + iarg[1] = p->sig; /* l_int */ *n_args = 2; break; } @@ -1495,11 +1495,11 @@ systrace_args(int sysnum, void *params, uint64_t *uarg case 202: { struct linux_sys_futex_args *p = params; uarg[0] = (intptr_t) p->uaddr; /* void * */ - iarg[1] = p->op; /* int */ - iarg[2] = p->val; /* int */ + iarg[1] = p->op; /* l_int */ + iarg[2] = p->val; /* l_int */ uarg[3] = (intptr_t) p->timeout; /* struct l_timespec * */ uarg[4] = (intptr_t) p->uaddr2; /* void * */ - iarg[5] = p->val3; /* int */ + iarg[5] = p->val3; /* l_int */ *n_args = 6; break; } @@ -1550,7 +1550,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg /* linux_set_tid_address */ case 218: { struct linux_set_tid_address_args *p = params; - uarg[0] = (intptr_t) p->tidptr; /* int * */ + uarg[0] = (intptr_t) p->tidptr; /* l_int * */ *n_args = 1; break; } @@ -1562,10 +1562,10 @@ systrace_args(int sysnum, void *params, uint64_t *uarg /* linux_fadvise64 */ case 221: { struct linux_fadvise64_args *p = params; - iarg[0] = p->fd; /* int */ + iarg[0] = p->fd; /* l_int */ iarg[1] = p->offset; /* l_loff_t */ iarg[2] = p->len; /* l_size_t */ - iarg[3] = p->advice; /* int */ + iarg[3] = p->advice; /* l_int */ *n_args = 4; break; } @@ -1647,7 +1647,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg /* linux_exit_group */ case 231: { struct linux_exit_group_args *p = params; - iarg[0] = p->error_code; /* int */ + iarg[0] = p->error_code; /* l_int */ *n_args = 1; break; } @@ -1674,9 +1674,9 @@ systrace_args(int sysnum, void *params, uint64_t *uarg /* linux_tgkill */ case 234: { struct linux_tgkill_args *p = params; - iarg[0] = p->tgid; /* int */ - iarg[1] = p->pid; /* int */ - iarg[2] = p->sig; /* int */ + iarg[0] = p->tgid; /* l_int */ + iarg[1] = p->pid; /* l_int */ + iarg[2] = p->sig; /* l_int */ *n_args = 3; break; } @@ -1741,10 +1741,10 @@ systrace_args(int sysnum, void *params, uint64_t *uarg /* linux_waitid */ case 247: { struct linux_waitid_args *p = params; - iarg[0] = p->idtype; /* int */ + iarg[0] = p->idtype; /* l_int */ iarg[1] = p->id; /* l_pid_t */ uarg[2] = (intptr_t) p->info; /* l_siginfo_t * */ - iarg[3] = p->options; /* int */ + iarg[3] = p->options; /* l_int */ uarg[4] = (intptr_t) p->rusage; /* struct rusage * */ *n_args = 5; break; @@ -2619,10 +2619,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d p = "caddr_t"; break; case 1: - p = "int"; + p = "l_int"; break; case 2: - p = "int"; + p = "l_int"; break; default: break; @@ -3036,10 +3036,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d case 40: switch(ndx) { case 0: - p = "int"; + p = "l_int"; break; case 1: - p = "int"; + p = "l_int"; break; case 2: p = "l_long *"; @@ -3366,7 +3366,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d case 60: switch(ndx) { case 0: - p = "int"; + p = "l_int"; break; default: break; @@ -4356,10 +4356,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d case 140: switch(ndx) { case 0: - p = "int"; + p = "l_int"; break; case 1: - p = "int"; + p = "l_int"; break; default: break; @@ -4763,10 +4763,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d case 200: switch(ndx) { case 0: - p = "int"; + p = "l_int"; break; case 1: - p = "int"; + p = "l_int"; break; default: break; @@ -4789,10 +4789,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d p = "void *"; break; case 1: - p = "int"; + p = "l_int"; break; case 2: - p = "int"; + p = "l_int"; break; case 3: p = "struct l_timespec *"; @@ -4801,7 +4801,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d p = "void *"; break; case 5: - p = "int"; + p = "l_int"; break; default: break; @@ -4875,7 +4875,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d case 218: switch(ndx) { case 0: - p = "int *"; + p = "l_int *"; break; default: break; @@ -4888,7 +4888,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d case 221: switch(ndx) { case 0: - p = "int"; + p = "l_int"; break; case 1: p = "l_loff_t"; @@ -4897,7 +4897,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d p = "l_size_t"; break; case 3: - p = "int"; + p = "l_int"; break; default: break; @@ -5033,7 +5033,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d case 231: switch(ndx) { case 0: - p = "int"; + p = "l_int"; break; default: break; @@ -5081,13 +5081,13 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d case 234: switch(ndx) { case 0: - p = "int"; + p = "l_int"; break; case 1: - p = "int"; + p = "l_int"; break; case 2: - p = "int"; + p = "l_int"; break; default: break; @@ -5140,7 +5140,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d case 247: switch(ndx) { case 0: - p = "int"; + p = "l_int"; break; case 1: p = "l_pid_t"; @@ -5149,7 +5149,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d p = "l_siginfo_t *"; break; case 3: - p = "int"; + p = "l_int"; break; case 4: p = "struct rusage *"; Modified: stable/11/sys/amd64/linux32/linux32_machdep.c ============================================================================== --- stable/11/sys/amd64/linux32/linux32_machdep.c Sun Apr 28 14:11:21 2019 (r346837) +++ stable/11/sys/amd64/linux32/linux32_machdep.c Sun Apr 28 14:16:00 2019 (r346838) @@ -255,7 +255,7 @@ linux_ipc(struct thread *td, struct linux_ipc_args *ar struct linux_semop_args a; a.semid = args->arg1; - a.tsops = args->ptr; + a.tsops = PTRIN(args->ptr); a.nsops = args->arg2; return (linux_semop(td, &a)); } @@ -274,7 +274,7 @@ linux_ipc(struct thread *td, struct linux_ipc_args *ar a.semid = args->arg1; a.semnum = args->arg2; a.cmd = args->arg3; - error = copyin(args->ptr, &a.arg, sizeof(a.arg)); + error = copyin(PTRIN(args->ptr), &a.arg, sizeof(a.arg)); if (error) return (error); return (linux_semctl(td, &a)); @@ -283,7 +283,7 @@ linux_ipc(struct thread *td, struct linux_ipc_args *ar struct linux_msgsnd_args a; a.msqid = args->arg1; - a.msgp = args->ptr; + a.msgp = PTRIN(args->ptr); a.msgsz = args->arg2; a.msgflg = args->arg3; return (linux_msgsnd(td, &a)); @@ -300,13 +300,13 @@ linux_ipc(struct thread *td, struct linux_ipc_args *ar if (args->ptr == 0) return (EINVAL); - error = copyin(args->ptr, &tmp, sizeof(tmp)); + error = copyin(PTRIN(args->ptr), &tmp, sizeof(tmp)); if (error) return (error); a.msgp = PTRIN(tmp.msgp); a.msgtyp = tmp.msgtyp; } else { - a.msgp = args->ptr; + a.msgp = PTRIN(args->ptr); a.msgtyp = args->arg5; } return (linux_msgrcv(td, &a)); @@ -323,22 +323,29 @@ linux_ipc(struct thread *td, struct linux_ipc_args *ar a.msqid = args->arg1; a.cmd = args->arg2; - a.buf = args->ptr; + a.buf = PTRIN(args->ptr); return (linux_msgctl(td, &a)); } case LINUX_SHMAT: { struct linux_shmat_args a; + l_uintptr_t addr; + int error; a.shmid = args->arg1; - a.shmaddr = args->ptr; + a.shmaddr = PTRIN(args->ptr); a.shmflg = args->arg2; - a.raddr = PTRIN((l_uint)args->arg3); - return (linux_shmat(td, &a)); + error = linux_shmat(td, &a); + if (error != 0) + return (error); + addr = td->td_retval[0]; + error = copyout(&addr, PTRIN(args->arg3), sizeof(addr)); + td->td_retval[0] = 0; + return (error); } case LINUX_SHMDT: { struct linux_shmdt_args a; - a.shmaddr = args->ptr; + a.shmaddr = PTRIN(args->ptr); return (linux_shmdt(td, &a)); } case LINUX_SHMGET: { @@ -354,7 +361,7 @@ linux_ipc(struct thread *td, struct linux_ipc_args *ar a.shmid = args->arg1; a.cmd = args->arg2; - a.buf = args->ptr; + a.buf = PTRIN(args->ptr); return (linux_shmctl(td, &a)); } default: Modified: stable/11/sys/amd64/linux32/linux32_proto.h ============================================================================== --- stable/11/sys/amd64/linux32/linux32_proto.h Sun Apr 28 14:11:21 2019 (r346837) +++ stable/11/sys/amd64/linux32/linux32_proto.h Sun Apr 28 14:16:00 2019 (r346838) @@ -368,9 +368,9 @@ struct linux_ipc_args { char what_l_[PADL_(l_uint)]; l_uint what; char what_r_[PADR_(l_uint)]; char arg1_l_[PADL_(l_int)]; l_int arg1; char arg1_r_[PADR_(l_int)]; char arg2_l_[PADL_(l_int)]; l_int arg2; char arg2_r_[PADR_(l_int)]; - char arg3_l_[PADL_(l_int)]; l_int arg3; char arg3_r_[PADR_(l_int)]; - char ptr_l_[PADL_(void *)]; void * ptr; char ptr_r_[PADR_(void *)]; - char arg5_l_[PADL_(l_long)]; l_long arg5; char arg5_r_[PADR_(l_long)]; + char arg3_l_[PADL_(l_uint)]; l_uint arg3; char arg3_r_[PADR_(l_uint)]; + char ptr_l_[PADL_(l_uintptr_t)]; l_uintptr_t ptr; char ptr_r_[PADR_(l_uintptr_t)]; + char arg5_l_[PADL_(l_uint)]; l_uint arg5; char arg5_r_[PADR_(l_uint)]; }; struct linux_sigreturn_args { char sfp_l_[PADL_(struct l_sigframe *)]; struct l_sigframe * sfp; char sfp_r_[PADR_(struct l_sigframe *)]; Modified: stable/11/sys/amd64/linux32/linux32_systrace_args.c ============================================================================== --- stable/11/sys/amd64/linux32/linux32_systrace_args.c Sun Apr 28 14:11:21 2019 (r346837) +++ stable/11/sys/amd64/linux32/linux32_systrace_args.c Sun Apr 28 14:16:00 2019 (r346838) @@ -785,9 +785,9 @@ systrace_args(int sysnum, void *params, uint64_t *uarg iarg[0] = p->what; /* l_uint */ iarg[1] = p->arg1; /* l_int */ iarg[2] = p->arg2; /* l_int */ - iarg[3] = p->arg3; /* l_int */ - uarg[4] = (intptr_t) p->ptr; /* void * */ - iarg[5] = p->arg5; /* l_long */ + iarg[3] = p->arg3; /* l_uint */ + iarg[4] = p->ptr; /* l_uintptr_t */ + iarg[5] = p->arg5; /* l_uint */ *n_args = 6; break; } @@ -3894,13 +3894,13 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d p = "l_int"; break; case 3: - p = "l_int"; + p = "l_uint"; break; case 4: - p = "void *"; + p = "l_uintptr_t"; break; case 5: - p = "l_long"; + p = "l_uint"; break; default: break; Modified: stable/11/sys/amd64/linux32/syscalls.master ============================================================================== --- stable/11/sys/amd64/linux32/syscalls.master Sun Apr 28 14:11:21 2019 (r346837) +++ stable/11/sys/amd64/linux32/syscalls.master Sun Apr 28 14:16:00 2019 (r346838) @@ -213,8 +213,8 @@ 115 AUE_SWAPOFF STD { int linux_swapoff(void); } 116 AUE_NULL STD { int linux_sysinfo(struct l_sysinfo *info); } 117 AUE_NULL STD { int linux_ipc(l_uint what, l_int arg1, \ - l_int arg2, l_int arg3, void *ptr, \ - l_long arg5); } + l_int arg2, l_uint arg3, l_uintptr_t ptr, \ + l_uint arg5); } 118 AUE_FSYNC NOPROTO { int fsync(int fd); } 119 AUE_SIGRETURN STD { int linux_sigreturn( \ struct l_sigframe *sfp); } Modified: stable/11/sys/compat/linux/linux_ipc.c ============================================================================== --- stable/11/sys/compat/linux/linux_ipc.c Sun Apr 28 14:11:21 2019 (r346837) +++ stable/11/sys/compat/linux/linux_ipc.c Sun Apr 28 14:16:00 2019 (r346838) @@ -785,23 +785,11 @@ linux_shmat(struct thread *td, struct linux_shmat_args void *shmaddr; int shmflg; } */ bsd_args; - int error; -#if defined(__i386__) || (defined(__amd64__) && defined(COMPAT_LINUX32)) - l_uintptr_t addr; -#endif bsd_args.shmid = args->shmid; bsd_args.shmaddr = PTRIN(args->shmaddr); bsd_args.shmflg = args->shmflg; - if ((error = sys_shmat(td, &bsd_args))) - return (error); -#if defined(__i386__) || (defined(__amd64__) && defined(COMPAT_LINUX32)) - addr = td->td_retval[0]; - if ((error = copyout(&addr, PTRIN(args->raddr), sizeof(addr)))) - return (error); - td->td_retval[0] = 0; -#endif - return (0); + return (sys_shmat(td, &bsd_args)); } int Modified: stable/11/sys/compat/linux/linux_ipc.h ============================================================================== --- stable/11/sys/compat/linux/linux_ipc.h Sun Apr 28 14:11:21 2019 (r346837) +++ stable/11/sys/compat/linux/linux_ipc.h Sun Apr 28 14:16:00 2019 (r346838) @@ -141,7 +141,6 @@ struct linux_shmat_args l_int shmid; char *shmaddr; l_int shmflg; - l_ulong *raddr; }; struct linux_shmctl_args Modified: stable/11/sys/i386/linux/linux_machdep.c ============================================================================== --- stable/11/sys/i386/linux/linux_machdep.c Sun Apr 28 14:11:21 2019 (r346837) +++ stable/11/sys/i386/linux/linux_machdep.c Sun Apr 28 14:16:00 2019 (r346838) @@ -133,7 +133,7 @@ linux_ipc(struct thread *td, struct linux_ipc_args *ar struct linux_semop_args a; a.semid = args->arg1; - a.tsops = args->ptr; + a.tsops = PTRIN(args->ptr); a.nsops = args->arg2; return (linux_semop(td, &a)); } @@ -152,7 +152,7 @@ linux_ipc(struct thread *td, struct linux_ipc_args *ar a.semid = args->arg1; a.semnum = args->arg2; a.cmd = args->arg3; - error = copyin(args->ptr, &a.arg, sizeof(a.arg)); + error = copyin(PTRIN(args->ptr), &a.arg, sizeof(a.arg)); if (error) return (error); return (linux_semctl(td, &a)); @@ -161,7 +161,7 @@ linux_ipc(struct thread *td, struct linux_ipc_args *ar struct linux_msgsnd_args a; a.msqid = args->arg1; - a.msgp = args->ptr; + a.msgp = PTRIN(args->ptr); a.msgsz = args->arg2; a.msgflg = args->arg3; return (linux_msgsnd(td, &a)); @@ -176,15 +176,15 @@ linux_ipc(struct thread *td, struct linux_ipc_args *ar struct l_ipc_kludge tmp; int error; - if (args->ptr == NULL) + if (args->ptr == 0) return (EINVAL); - error = copyin(args->ptr, &tmp, sizeof(tmp)); + error = copyin(PTRIN(args->ptr), &tmp, sizeof(tmp)); if (error) return (error); - a.msgp = tmp.msgp; + a.msgp = PTRIN(tmp.msgp); a.msgtyp = tmp.msgtyp; } else { - a.msgp = args->ptr; + a.msgp = PTRIN(args->ptr); a.msgtyp = args->arg5; } return (linux_msgrcv(td, &a)); @@ -201,22 +201,29 @@ linux_ipc(struct thread *td, struct linux_ipc_args *ar a.msqid = args->arg1; a.cmd = args->arg2; - a.buf = args->ptr; + a.buf = PTRIN(args->ptr); return (linux_msgctl(td, &a)); } case LINUX_SHMAT: { struct linux_shmat_args a; + l_uintptr_t addr; + int error; a.shmid = args->arg1; - a.shmaddr = args->ptr; + a.shmaddr = PTRIN(args->ptr); a.shmflg = args->arg2; - a.raddr = (l_ulong *)args->arg3; - return (linux_shmat(td, &a)); + error = linux_shmat(td, &a); + if (error != 0) + return (error); + addr = td->td_retval[0]; + error = copyout(&addr, PTRIN(args->arg3), sizeof(addr)); + td->td_retval[0] = 0; + return (error); } case LINUX_SHMDT: { struct linux_shmdt_args a; - a.shmaddr = args->ptr; + a.shmaddr = PTRIN(args->ptr); return (linux_shmdt(td, &a)); } case LINUX_SHMGET: { @@ -232,7 +239,7 @@ linux_ipc(struct thread *td, struct linux_ipc_args *ar a.shmid = args->arg1; a.cmd = args->arg2; - a.buf = args->ptr; + a.buf = PTRIN(args->ptr); return (linux_shmctl(td, &a)); } default: Modified: stable/11/sys/i386/linux/linux_proto.h ============================================================================== --- stable/11/sys/i386/linux/linux_proto.h Sun Apr 28 14:11:21 2019 (r346837) +++ stable/11/sys/i386/linux/linux_proto.h Sun Apr 28 14:16:00 2019 (r346838) @@ -371,9 +371,9 @@ struct linux_ipc_args { char what_l_[PADL_(l_uint)]; l_uint what; char what_r_[PADR_(l_uint)]; char arg1_l_[PADL_(l_int)]; l_int arg1; char arg1_r_[PADR_(l_int)]; char arg2_l_[PADL_(l_int)]; l_int arg2; char arg2_r_[PADR_(l_int)]; - char arg3_l_[PADL_(l_int)]; l_int arg3; char arg3_r_[PADR_(l_int)]; - char ptr_l_[PADL_(void *)]; void * ptr; char ptr_r_[PADR_(void *)]; - char arg5_l_[PADL_(l_long)]; l_long arg5; char arg5_r_[PADR_(l_long)]; + char arg3_l_[PADL_(l_uint)]; l_uint arg3; char arg3_r_[PADR_(l_uint)]; + char ptr_l_[PADL_(l_uintptr_t)]; l_uintptr_t ptr; char ptr_r_[PADR_(l_uintptr_t)]; + char arg5_l_[PADL_(l_uint)]; l_uint arg5; char arg5_r_[PADR_(l_uint)]; }; struct linux_sigreturn_args { char sfp_l_[PADL_(struct l_sigframe *)]; struct l_sigframe * sfp; char sfp_r_[PADR_(struct l_sigframe *)]; Modified: stable/11/sys/i386/linux/linux_systrace_args.c ============================================================================== --- stable/11/sys/i386/linux/linux_systrace_args.c Sun Apr 28 14:11:21 2019 (r346837) +++ stable/11/sys/i386/linux/linux_systrace_args.c Sun Apr 28 14:16:00 2019 (r346838) @@ -814,9 +814,9 @@ systrace_args(int sysnum, void *params, uint64_t *uarg iarg[0] = p->what; /* l_uint */ iarg[1] = p->arg1; /* l_int */ iarg[2] = p->arg2; /* l_int */ - iarg[3] = p->arg3; /* l_int */ - uarg[4] = (intptr_t) p->ptr; /* void * */ - iarg[5] = p->arg5; /* l_long */ + iarg[3] = p->arg3; /* l_uint */ + iarg[4] = p->ptr; /* l_uintptr_t */ + iarg[5] = p->arg5; /* l_uint */ *n_args = 6; break; } @@ -4012,13 +4012,13 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d p = "l_int"; break; case 3: - p = "l_int"; + p = "l_uint"; break; case 4: - p = "void *"; + p = "l_uintptr_t"; break; case 5: - p = "l_long"; + p = "l_uint"; break; default: break; Modified: stable/11/sys/i386/linux/syscalls.master ============================================================================== --- stable/11/sys/i386/linux/syscalls.master Sun Apr 28 14:11:21 2019 (r346837) +++ stable/11/sys/i386/linux/syscalls.master Sun Apr 28 14:16:00 2019 (r346838) @@ -214,8 +214,8 @@ 115 AUE_SWAPOFF STD { int linux_swapoff(void); } 116 AUE_NULL STD { int linux_sysinfo(struct l_sysinfo *info); } 117 AUE_NULL STD { int linux_ipc(l_uint what, l_int arg1, \ - l_int arg2, l_int arg3, void *ptr, \ - l_long arg5); } + l_int arg2, l_uint arg3, l_uintptr_t ptr, \ + l_uint arg5); } 118 AUE_FSYNC NOPROTO { int fsync(int fd); } 119 AUE_SIGRETURN STD { int linux_sigreturn( \ struct l_sigframe *sfp); }