Deleted Added
full compact
linux_misc.c (165689) linux_misc.c (165867)
1/*-
2 * Copyright (c) 2002 Doug Rabson
3 * Copyright (c) 1994-1995 S�ren Schmidt
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 14 unchanged lines hidden (view full) ---

23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2002 Doug Rabson
3 * Copyright (c) 1994-1995 S�ren Schmidt
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 14 unchanged lines hidden (view full) ---

23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30#include <sys/cdefs.h>
31__FBSDID("$FreeBSD: head/sys/compat/linux/linux_misc.c 165689 2006-12-31 13:16:00Z netchild $");
31__FBSDID("$FreeBSD: head/sys/compat/linux/linux_misc.c 165867 2007-01-07 19:00:38Z netchild $");
32
33#include "opt_compat.h"
34#include "opt_mac.h"
35
36#include <sys/param.h>
37#include <sys/blist.h>
38#include <sys/fcntl.h>
39#if defined(__i386__)

--- 1394 unchanged lines hidden (view full) ---

1434 struct linux_emuldata *em;
1435
1436#ifdef DEBUG
1437 if (ldebug(getpid))
1438 printf(ARGS(getpid, ""));
1439#endif
1440
1441 if (linux_use26(td)) {
32
33#include "opt_compat.h"
34#include "opt_mac.h"
35
36#include <sys/param.h>
37#include <sys/blist.h>
38#include <sys/fcntl.h>
39#if defined(__i386__)

--- 1394 unchanged lines hidden (view full) ---

1434 struct linux_emuldata *em;
1435
1436#ifdef DEBUG
1437 if (ldebug(getpid))
1438 printf(ARGS(getpid, ""));
1439#endif
1440
1441 if (linux_use26(td)) {
1442 em = em_find(td->td_proc, EMUL_UNLOCKED);
1442 em = em_find(td->td_proc, EMUL_DOLOCK);
1443 KASSERT(em != NULL, ("getpid: emuldata not found.\n"));
1444 td->td_retval[0] = em->shared->group_pid;
1445 EMUL_UNLOCK(&emul_lock);
1446 } else {
1447 td->td_retval[0] = td->td_proc->p_pid;
1448 }
1449
1450 return (0);

--- 25 unchanged lines hidden (view full) ---

1476
1477 if (!linux_use26(td)) {
1478 PROC_LOCK(td->td_proc);
1479 td->td_retval[0] = td->td_proc->p_pptr->p_pid;
1480 PROC_UNLOCK(td->td_proc);
1481 return (0);
1482 }
1483
1443 KASSERT(em != NULL, ("getpid: emuldata not found.\n"));
1444 td->td_retval[0] = em->shared->group_pid;
1445 EMUL_UNLOCK(&emul_lock);
1446 } else {
1447 td->td_retval[0] = td->td_proc->p_pid;
1448 }
1449
1450 return (0);

--- 25 unchanged lines hidden (view full) ---

1476
1477 if (!linux_use26(td)) {
1478 PROC_LOCK(td->td_proc);
1479 td->td_retval[0] = td->td_proc->p_pptr->p_pid;
1480 PROC_UNLOCK(td->td_proc);
1481 return (0);
1482 }
1483
1484 em = em_find(td->td_proc, EMUL_UNLOCKED);
1484 em = em_find(td->td_proc, EMUL_DOLOCK);
1485
1486 KASSERT(em != NULL, ("getppid: process emuldata not found.\n"));
1487
1488 /* find the group leader */
1489 p = pfind(em->shared->group_pid);
1490
1491 if (p == NULL) {
1492#ifdef DEBUG
1493 printf(LMSG("parent process not found.\n"));
1494#endif
1495 return (0);
1496 }
1497
1498 pp = p->p_pptr; /* switch to parent */
1499 PROC_LOCK(pp);
1500 PROC_UNLOCK(p);
1501
1502 /* if its also linux process */
1503 if (pp->p_sysent == &elf_linux_sysvec) {
1485
1486 KASSERT(em != NULL, ("getppid: process emuldata not found.\n"));
1487
1488 /* find the group leader */
1489 p = pfind(em->shared->group_pid);
1490
1491 if (p == NULL) {
1492#ifdef DEBUG
1493 printf(LMSG("parent process not found.\n"));
1494#endif
1495 return (0);
1496 }
1497
1498 pp = p->p_pptr; /* switch to parent */
1499 PROC_LOCK(pp);
1500 PROC_UNLOCK(p);
1501
1502 /* if its also linux process */
1503 if (pp->p_sysent == &elf_linux_sysvec) {
1504 em = em_find(pp, EMUL_LOCKED);
1504 em = em_find(pp, EMUL_DONTLOCK);
1505 KASSERT(em != NULL, ("getppid: parent emuldata not found.\n"));
1506
1507 td->td_retval[0] = em->shared->group_pid;
1508 } else
1509 td->td_retval[0] = pp->p_pid;
1510
1511 EMUL_UNLOCK(&emul_lock);
1512 PROC_UNLOCK(pp);

--- 90 unchanged lines hidden (view full) ---

1603 struct proc *sp;
1604
1605#ifdef DEBUG
1606 if (ldebug(exit_group))
1607 printf(ARGS(exit_group, "%i"), args->error_code);
1608#endif
1609
1610 if (linux_use26(td)) {
1505 KASSERT(em != NULL, ("getppid: parent emuldata not found.\n"));
1506
1507 td->td_retval[0] = em->shared->group_pid;
1508 } else
1509 td->td_retval[0] = pp->p_pid;
1510
1511 EMUL_UNLOCK(&emul_lock);
1512 PROC_UNLOCK(pp);

--- 90 unchanged lines hidden (view full) ---

1603 struct proc *sp;
1604
1605#ifdef DEBUG
1606 if (ldebug(exit_group))
1607 printf(ARGS(exit_group, "%i"), args->error_code);
1608#endif
1609
1610 if (linux_use26(td)) {
1611 td_em = em_find(td->td_proc, EMUL_UNLOCKED);
1611 td_em = em_find(td->td_proc, EMUL_DOLOCK);
1612
1613 KASSERT(td_em != NULL, ("exit_group: emuldata not found.\n"));
1614
1615 EMUL_SHARED_RLOCK(&emul_shared_lock);
1616 LIST_FOREACH_SAFE(em, &td_em->shared->threads, threads, tmp_em) {
1617 if (em->pid == td_em->pid)
1618 continue;
1619

--- 31 unchanged lines hidden (view full) ---

1651 printf(ARGS(prctl, "%d, %d, %d, %d, %d"), args->option,
1652 args->arg2, args->arg3, args->arg4, args->arg5);
1653#endif
1654
1655 switch (args->option) {
1656 case LINUX_PR_SET_PDEATHSIG:
1657 if (!LINUX_SIG_VALID(args->arg2))
1658 return (EINVAL);
1612
1613 KASSERT(td_em != NULL, ("exit_group: emuldata not found.\n"));
1614
1615 EMUL_SHARED_RLOCK(&emul_shared_lock);
1616 LIST_FOREACH_SAFE(em, &td_em->shared->threads, threads, tmp_em) {
1617 if (em->pid == td_em->pid)
1618 continue;
1619

--- 31 unchanged lines hidden (view full) ---

1651 printf(ARGS(prctl, "%d, %d, %d, %d, %d"), args->option,
1652 args->arg2, args->arg3, args->arg4, args->arg5);
1653#endif
1654
1655 switch (args->option) {
1656 case LINUX_PR_SET_PDEATHSIG:
1657 if (!LINUX_SIG_VALID(args->arg2))
1658 return (EINVAL);
1659 em = em_find(p, EMUL_UNLOCKED);
1659 em = em_find(p, EMUL_DOLOCK);
1660 KASSERT(em != NULL, ("prctl: emuldata not found.\n"));
1661 em->pdeath_signal = args->arg2;
1662 EMUL_UNLOCK(&emul_lock);
1663 break;
1664 case LINUX_PR_GET_PDEATHSIG:
1660 KASSERT(em != NULL, ("prctl: emuldata not found.\n"));
1661 em->pdeath_signal = args->arg2;
1662 EMUL_UNLOCK(&emul_lock);
1663 break;
1664 case LINUX_PR_GET_PDEATHSIG:
1665 em = em_find(p, EMUL_UNLOCKED);
1665 em = em_find(p, EMUL_DOLOCK);
1666 KASSERT(em != NULL, ("prctl: emuldata not found.\n"));
1667 error = copyout(&em->pdeath_signal,
1668 (void *)(register_t)args->arg2,
1669 sizeof(em->pdeath_signal));
1670 EMUL_UNLOCK(&emul_lock);
1671 break;
1672 case LINUX_PR_SET_NAME:
1673 /*

--- 42 unchanged lines hidden ---
1666 KASSERT(em != NULL, ("prctl: emuldata not found.\n"));
1667 error = copyout(&em->pdeath_signal,
1668 (void *)(register_t)args->arg2,
1669 sizeof(em->pdeath_signal));
1670 EMUL_UNLOCK(&emul_lock);
1671 break;
1672 case LINUX_PR_SET_NAME:
1673 /*

--- 42 unchanged lines hidden ---