Date: Tue, 19 Sep 2000 21:31:42 +0200 (CEST) From: Christian Weisgerber <naddy@mips.inka.de> To: FreeBSD-gnats-submit@freebsd.org Subject: kern/21402: Linuxulator: getpgid(0) fails Message-ID: <200009191931.e8JJVg208733@ganerc.mips.inka.de>
index | next in thread | raw e-mail
>Number: 21402
>Category: kern
>Synopsis: Linuxulator: getpgid(0) fails
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Tue Sep 19 13:00:01 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator: Christian Weisgerber
>Release: FreeBSD 5.0-CURRENT i386
>Organization:
>Environment:
COMPAT_LINUX
>Description:
Under the Linux syscall compatibility layer, getpgid(0) fails with
ESRCH rather than returning the process group ID of the current
process.
This can be fixed easily in sys/compat/linux/linux_misc.c:linux_getpgid().
However, as far as I can tell, the semantics of getpgid() are
exactly the same for BSD, Linux, and POSIX. The only functional
difference between our native getpgid() and linux_getpgid() I can
detect is that the latter fails to handle being called with 0.
Therefore I suggest that linux_getpgid() is dropped entirely and
the Linux system call #132 passed on directly to getpgid(), which is
both simpler and more correct.
>How-To-Repeat:
>Fix:
--- sys/compat/linux/linux_misc.c.orig Tue Sep 19 14:10:58 2000
+++ sys/compat/linux/linux_misc.c Tue Sep 19 14:11:37 2000
@@ -524,24 +524,6 @@
return error;
}
-int
-linux_getpgid(struct proc *p, struct linux_getpgid_args *args)
-{
- struct proc *curp;
-
-#ifdef DEBUG
- printf("Linux-emul(%ld): getpgid(%d)\n", (long)p->p_pid, args->pid);
-#endif
- if (args->pid != p->p_pid) {
- if (!(curp = pfind(args->pid)))
- return ESRCH;
- }
- else
- curp = p;
- p->p_retval[0] = curp->p_pgid;
- return 0;
-}
-
int
linux_mremap(struct proc *p, struct linux_mremap_args *args)
{
--- sys/i386/linux/syscalls.master.orig Tue Sep 19 14:14:31 2000
+++ sys/i386/linux/syscalls.master Tue Sep 19 14:16:24 2000
@@ -196,7 +196,7 @@
129 STD LINUX { int linux_delete_module(void); }
130 STD LINUX { int linux_get_kernel_syms(void); }
131 STD LINUX { int linux_quotactl(void); }
-132 STD LINUX { int linux_getpgid(int pid); }
+132 NOPROTO LINUX { int getpgid(int pid); }
133 NOPROTO LINUX { int fchdir(int fd); }
134 STD LINUX { int linux_bdflush(void); }
135 STD LINUX { int linux_sysfs(int option, u_long arg1, \
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200009191931.e8JJVg208733>
