Print this page
OS-3820 lxbrand ptrace(2): the next generation
OS-3685 lxbrand PTRACE_O_TRACEFORK race condition
OS-3834 lxbrand 64-bit strace(1) reports 64-bit process as using x32 ABI
OS-3794 lxbrand panic on init signal death
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Bryan Cantrill <bryan@joyent.com>
OS-3280 need a way to specify the root of a native system in the lx brand
OS-3279 lx brand should allow delegated datasets
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libproc/common/Pcontrol.c
          +++ new/usr/src/lib/libproc/common/Pcontrol.c
↓ open down ↓ 330 lines elided ↑ open up ↑
 331  331  #endif
 332  332  };
 333  333  
 334  334  /*
 335  335   * This is the library's .init handler.
 336  336   */
 337  337  #pragma init(_libproc_init)
 338  338  void
 339  339  _libproc_init(void)
 340  340  {
      341 +        const char *root;
      342 +
 341  343          _libproc_debug = getenv("LIBPROC_DEBUG") != NULL;
 342  344          _libproc_no_qsort = getenv("LIBPROC_NO_QSORT") != NULL;
 343  345          _libproc_incore_elf = getenv("LIBPROC_INCORE_ELF") != NULL;
 344  346  
      347 +        if ((root = zone_get_nroot()) != NULL)
      348 +                (void) snprintf(procfs_path, sizeof (procfs_path), "%s/proc",
      349 +                    root);
      350 +
 345  351          (void) sigfillset(&blockable_sigs);
 346  352          (void) sigdelset(&blockable_sigs, SIGKILL);
 347  353          (void) sigdelset(&blockable_sigs, SIGSTOP);
 348  354  }
 349  355  
 350  356  void
 351  357  Pset_procfs_path(const char *path)
 352  358  {
 353  359          (void) snprintf(procfs_path, sizeof (procfs_path), "%s", path);
 354  360  }
↓ open down ↓ 1398 lines elided ↑ open up ↑
1753 1759                  dprintf("%s: SYSEXIT %s\n", caller,
1754 1760                      proc_sysname(lsp->pr_what, name, sizeof (name)));
1755 1761                  break;
1756 1762          case PR_JOBCONTROL:
1757 1763                  dprintf("%s: JOBCONTROL %s\n", caller,
1758 1764                      proc_signame(lsp->pr_what, name, sizeof (name)));
1759 1765                  break;
1760 1766          case PR_SUSPENDED:
1761 1767                  dprintf("%s: SUSPENDED\n", caller);
1762 1768                  break;
     1769 +        case PR_BRAND:
     1770 +                dprintf("%s: BRANDPRIVATE (%d)\n", caller, lsp->pr_what);
     1771 +                break;
1763 1772          default:
1764 1773                  dprintf("%s: Unknown\n", caller);
1765 1774                  break;
1766 1775          }
1767 1776  
1768 1777          if (lsp->pr_cursig)
1769 1778                  dprintf("%s: p_cursig  = %d\n", caller, lsp->pr_cursig);
1770 1779  
1771 1780          bits = *((uint32_t *)&lsp->pr_lwppend);
1772 1781          if (bits)
↓ open down ↓ 159 lines elided ↑ open up ↑
1932 1941          case PR_SYSEXIT:
1933 1942                  if (Pissyscall_prev(P, P->status.pr_lwp.pr_reg[R_PC],
1934 1943                      &P->sysaddr) == 0)
1935 1944                          P->sysaddr = P->status.pr_lwp.pr_reg[R_PC];
1936 1945                  break;
1937 1946          case PR_REQUESTED:
1938 1947          case PR_SIGNALLED:
1939 1948          case PR_FAULTED:
1940 1949          case PR_JOBCONTROL:
1941 1950          case PR_SUSPENDED:
     1951 +        case PR_BRAND:
1942 1952                  break;
1943 1953          default:
1944 1954                  errno = EPROTO;
1945 1955                  return (-1);
1946 1956          }
1947 1957  
1948 1958          return (0);
1949 1959  }
1950 1960  
1951 1961  /*
↓ open down ↓ 1554 lines elided ↑ open up ↑
3506 3516                  prldump("Lstopstatus", &L->lwp_status);
3507 3517  
3508 3518          switch (L->lwp_status.pr_why) {
3509 3519          case PR_SYSENTRY:
3510 3520          case PR_SYSEXIT:
3511 3521          case PR_REQUESTED:
3512 3522          case PR_SIGNALLED:
3513 3523          case PR_FAULTED:
3514 3524          case PR_JOBCONTROL:
3515 3525          case PR_SUSPENDED:
     3526 +        case PR_BRAND:
3516 3527                  break;
3517 3528          default:
3518 3529                  errno = EPROTO;
3519 3530                  return (-1);
3520 3531          }
3521 3532  
3522 3533          return (0);
3523 3534  }
3524 3535  
3525 3536  /*
↓ open down ↓ 400 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX