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 --- |