~ubuntu-branches/ubuntu/trusty/procps/trusty-proposed

« back to all changes in this revision

Viewing changes to proc/readproc.c

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2014-01-06 15:28:04 UTC
  • mfrom: (2.1.27 sid)
  • Revision ID: package-import@ubuntu.com-20140106152804-ryhqa7ee39xock4f
Tags: 1:3.3.9-1ubuntu1
* Merge with Debian; remaining changes:
  - debian/sysctl.d (Ubuntu-specific):
    + 10-console-messages.conf: stop low-level kernel messages on console.
    + 10-kernel-hardening.conf: add the kptr_restrict setting
    + 10-keyboard.conf.powerpc: mouse button emulation on PowerPC.
    + 10-ipv6-privacy.conf: add a file to sysctl.d to apply the defaults
      for IPv6 privacy extensions for interfaces. (LP: #176125, #841353)
    + 10-link-restrictions.conf: even though the Ubuntu
      kernel is built with these defaults in place, we want to make sure
      that people running stock kernels don't miss out.
    + 10-magic-sysrq.conf: Disable most magic sysrq by default, allowing
      critical sync, remount, reboot functions. (LP: #194676, LP: #1025467)
    + 10-network-security.conf: enable rp_filter and SYN-flood protection.
    + 10-ptrace.conf: describe new PTRACE setting.
    + 10-zeropage.conf: safe mmap_min_addr value for graceful fall-back.
    + README: describe how this directory is supposed to work.
  - debian/upstart (Ubuntu-specific): upstart configuration to replace old
    style sysv init script
  - Fix cross build
  - ignore_eaccess.patch: If we get eaccess when opening a sysctl file for
    writing, don't error out.  Otherwise package upgrades can fail,
    especially in containers.  (LP: #1157643)
  - Build using dh-autoreconf, update libtool.m4.
  - Build-depend on pkg-config.

Show diffs side-by-side

added added

removed removed

Lines of Context:
457
457
#endif
458
458
///////////////////////////////////////////////////////////////////////
459
459
 
 
460
static const char *ns_names[] = {
 
461
    [IPCNS] = "ipc",
 
462
    [MNTNS] = "mnt",
 
463
    [NETNS] = "net",
 
464
    [PIDNS] = "pid",
 
465
    [USERNS] = "user",
 
466
    [UTSNS] = "uts",
 
467
};
 
468
 
 
469
const char *get_ns_name(int id) {
 
470
    if (id >= NUM_NS)
 
471
        return NULL;
 
472
    return ns_names[id];
 
473
}
 
474
 
 
475
int get_ns_id(const char *name) {
 
476
    int i;
 
477
 
 
478
    for (i = 0; i < NUM_NS; i++)
 
479
        if (!strcmp(ns_names[i], name))
 
480
            return i;
 
481
    return -1;
 
482
}
 
483
 
 
484
static void ns2proc(const char *directory, proc_t *restrict p) {
 
485
    char path[PROCPATHLEN];
 
486
    struct stat sb;
 
487
    int i;
 
488
 
 
489
    for (i = 0; i < NUM_NS; i++) {
 
490
        snprintf(path, sizeof(path), "%s/ns/%s", directory, ns_names[i]);
 
491
        if (0 == stat(path, &sb))
 
492
            p->ns[i] = (long)sb.st_ino;
 
493
#if 0
 
494
        else                           // this allows a caller to distinguish
 
495
            p->ns[i] = -errno;         // between the ENOENT or EACCES errors
 
496
#endif
 
497
    }
 
498
}
 
499
///////////////////////////////////////////////////////////////////////
 
500
 
460
501
 
461
502
// Reads /proc/*/stat files, being careful not to trip over processes with
462
503
// names like ":-) 1 2 3 4 5 6".
844
885
    }
845
886
#endif
846
887
 
 
888
    if (unlikely(flags & PROC_FILLNS))          // read /proc/#/ns/*
 
889
        ns2proc(path, p);
 
890
 
847
891
    return p;
848
892
next_proc:
849
893
    return NULL;
975
1019
    }
976
1020
#endif
977
1021
 
 
1022
    if (unlikely(flags & PROC_FILLNS))                  // read /proc/#/task/#/ns/*
 
1023
        ns2proc(path, t);
 
1024
 
978
1025
    return t;
979
1026
next_task:
980
1027
    return NULL;