]> git.ipfire.org Git - thirdparty/man-pages.git/log
thirdparty/man-pages.git
4 years agoseccomp_user_notif.2: Remove FIXME asking about usefulness of POLLOUT/EPOLLOT seccomp_user_notif
Michael Kerrisk [Tue, 27 Oct 2020 06:17:01 +0000 (07:17 +0100)] 
seccomp_user_notif.2: Remove FIXME asking about usefulness of POLLOUT/EPOLLOT

According to Tycho Andersen, he had no particular use case
in mind when building this detail into tha API.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: srcfix: Add a further FIXME relating to SA_RESTART behavior
Michael Kerrisk [Mon, 26 Oct 2020 09:45:24 +0000 (10:45 +0100)] 
seccomp_user_notif.2: srcfix: Add a further FIXME relating to SA_RESTART behavior

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoman_show_fixme.sh: Don't hyphenate or justify the manual page
Michael Kerrisk [Mon, 26 Oct 2020 09:34:01 +0000 (10:34 +0100)] 
man_show_fixme.sh: Don't hyphenate or justify the manual page

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: Various fixes after review comments from Kees Cook
Michael Kerrisk [Mon, 26 Oct 2020 09:11:09 +0000 (10:11 +0100)] 
seccomp_user_notif.2: Various fixes after review comments from Kees Cook

Reported-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: Update a FIXME
Michael Kerrisk [Sun, 25 Oct 2020 14:02:54 +0000 (15:02 +0100)] 
seccomp_user_notif.2: Update a FIXME

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: srcfix: add FIXME
Michael Kerrisk [Sun, 25 Oct 2020 13:56:42 +0000 (14:56 +0100)] 
seccomp_user_notif.2: srcfix: add FIXME

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agocmsg.3, unix.7: Refer to seccomp_user_notif(2) for an example of SCM_RIGHTS usage
Michael Kerrisk [Sun, 25 Oct 2020 12:54:05 +0000 (13:54 +0100)] 
cmsg.3, unix.7: Refer to seccomp_user_notif(2) for an example of SCM_RIGHTS usage

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosignal.7: Add reference to seccomp_user_notif(2)
Michael Kerrisk [Sat, 24 Oct 2020 10:54:11 +0000 (12:54 +0200)] 
signal.7: Add reference to seccomp_user_notif(2)

The seccomp user-space notification feature can cause changes in
the semantics of SA_RESTART with respect to system calls that
would never normally be restarted. Point the reader to the page
that provide further details.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: Describe the interaction with SA_RESTART signal handlers
Michael Kerrisk [Sat, 24 Oct 2020 12:29:11 +0000 (14:29 +0200)] 
seccomp_user_notif.2: Describe the interaction with SA_RESTART signal handlers

And, as noted by Jann Horn, note how the user-space notification
mechanism causes a small breakage in the user-space API with
respect to nonrestartable system calls.

====

From the email discussion with Jann Horn

> >> So, I partially demonstrated what you describe here, for two example
> >> system calls (epoll_wait() and pause()). But I could not exactly
> >> demonstrate things as I understand you to be describing them. (So,
> >> I'm not sure whether I have not understood you correctly, or
> >> if things are not exactly as you describe them.)
> >>
> >> Here's a scenario (A) that I tested:
> >>
> >> 1. Target installs seccomp filters for a blocking syscall
> >>    (epoll_wait() or pause(), both of which should never restart,
> >>    regardless of SA_RESTART)
> >> 2. Target installs SIGINT handler with SA_RESTART
> >> 3. Supervisor is sleeping (i.e., is not blocked in
> >>    SECCOMP_IOCTL_NOTIF_RECV operation).
> >> 4. Target makes a blocking system call (epoll_wait() or pause()).
> >> 5. SIGINT gets delivered to target; handler gets called;
> >>    ***and syscall gets restarted by the kernel***
> >>
> >> That last should never happen, of course, and is a result of the
> >> combination of both the user-notify filter and the SA_RESTART flag.
> >> If one or other is not present, then the system call is not
> >> restarted.
> >>
> >> So, as you note below, the UAPI gets broken a little.
> >>
> >> However, from your description above I had understood that
> >> something like the following scenario (B) could occur:
> >>
> >> 1. Target installs seccomp filters for a blocking syscall
> >>    (epoll_wait() or pause(), both of which should never restart,
> >>    regardless of SA_RESTART)
> >> 2. Target installs SIGINT handler with SA_RESTART
> >> 3. Supervisor performs SECCOMP_IOCTL_NOTIF_RECV operation (which
> >>    blocks).
> >> 4. Target makes a blocking system call (epoll_wait() or pause()).
> >> 5. Supervisor gets seccomp user-space notification (i.e.,
> >>    SECCOMP_IOCTL_NOTIF_RECV ioctl() returns
> >> 6. SIGINT gets delivered to target; handler gets called;
> >>    and syscall gets restarted by the kernel
> >> 7. Supervisor performs another SECCOMP_IOCTL_NOTIF_RECV operation
> >>    which gets another notification for the restarted system call.
> >>
> >> However, I don't observe such behavior. In step 6, the syscall
> >> does not get restarted by the kernel, but instead returns -1/EINTR.
> >> Perhaps I have misconstructed my experiment in the second case, or
> >> perhaps I've misunderstood what you meant, or is it possibly the
> >> case that things are not quite as you said?
>
> Thanks for the code, Jann (including the demo of the CLONE_FILES
> technique to pass the notification FD to the supervisor).
>
> But I think your code just demonstrates what I described in
> scenario A. So, it seems that I both understood what you
> meant (because my code demonstrates the same thing) and
> also misunderstood what you said (because I thought you
> were meaning something more like scenario B).

Ahh, sorry, I should've read your mail more carefully. Indeed, that
testcase only shows scenario A. But the following shows scenario B...

[Below, two pieces of code from Jann, with a lot of
cosmetic changes by mtk.]

====

[And from a follow-up in the same email thread:]

> If userspace relies on non-restarting behavior, it should be using
> something like epoll_pwait(). And that stuff only unblocks signals
> after we've already past the seccomp checks on entry.
Thanks for elaborating that detail, since as soon as you talked
about "enlarging a preexisting race" above, I immediately wondered
sigsuspend(), pselect(), etc.

(Mind you, I still wonder about the effect on system calls that
are normally nonrestartable because they have timeouts. My
understanding is that the kernel doesn't restart those system
calls because it's impossible for the kernel to restart the call
with the right timeout value. I wonder what happens when those
system calls are restarted in the scenario we're discussing.)

Anyway, returning to your point... So, to be clear (and to
quickly remind myself in case I one day reread this thread),
there is not a problem with sigsuspend(), pselect(), ppoll(),
and epoll_pwait() since:

* Before the syscall, signals are blocked in the target.
* Inside the syscall, signals are still blocked at the time
  the check is made for seccomp filters.
* If a seccomp user-space notification  event kicks, the target
  is put to sleep with the signals still blocked.
* The signal will only get delivered after the supervisor either
  triggers a spoofed success/failure return in the target or the
  supervisor sends a CONTINUE response to the kernel telling it
  to execute the target's system call. Either way, there won't be
  any restarting of the target's system call (and the supervisor
  thus won't see multiple notifications).

====

Scenario A

$ ./seccomp_unotify_restart_scen_A
C: installed seccomp: fd 3
C: woke 1 waiters
P: child installed seccomp fd 3
C: About to call pause(): Success
P: going to send SIGUSR1...
C: sigusr1_handler handler invoked
P: about to terminate
C: got pdeath signal on parent termination
C: about to terminate

/* Modified version of code from Jann Horn */

#define _GNU_SOURCE
#include <stdio.h>
#include <signal.h>
#include <err.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <sched.h>
#include <stddef.h>
#include <limits.h>
#include <sys/mman.h>
#include <sys/syscall.h>
#include <sys/prctl.h>
#include <linux/seccomp.h>
#include <linux/filter.h>
#include <linux/futex.h>

struct {
    int seccomp_fd;
} *shared;

static void
sigusr1_handler(int sig, siginfo_t * info, void *uctx)
{
    printf("C: sigusr1_handler handler invoked\n");
}

static void
sigusr2_handler(int sig, siginfo_t * info, void *uctx)
{
    printf("C: got pdeath signal on parent termination\n");
    printf("C: about to terminate\n");
    exit(0);
}

int
main(void)
{
    setbuf(stdout, NULL);

    /* Allocate memory that will be shared by parent and child */

    shared = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE,
                  MAP_ANONYMOUS | MAP_SHARED, -1, 0);
    if (shared == MAP_FAILED)
        err(1, "mmap");
    shared->seccomp_fd = -1;

    /* glibc's clone() wrapper doesn't support fork()-style usage */
    /* Child process and parent share file descriptor table */

    pid_t child = syscall(__NR_clone, CLONE_FILES | SIGCHLD,
                          NULL, NULL, NULL, 0);
    if (child == -1)
        err(1, "clone");

    /* CHILD */

    if (child == 0) {
        /* don't outlive the parent */
        prctl(PR_SET_PDEATHSIG, SIGUSR2);

        if (getppid() == 1)
            exit(0);

        /* Install seccomp filter */

        prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);
        struct sock_filter insns[] = {
            BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
                     offsetof(struct seccomp_data, nr)),
            BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, __NR_pause, 0, 1),
            BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_USER_NOTIF),
            BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_ALLOW)
        };
        struct sock_fprog prog = {
            .len = sizeof(insns) / sizeof(insns[0]),
            .filter = insns
        };
        int seccomp_ret = syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER,
                                  SECCOMP_FILTER_FLAG_NEW_LISTENER, &prog);
        if (seccomp_ret < 0)
            err(1, "install");
        printf("C: installed seccomp: fd %d\n", seccomp_ret);

        /* Place the notifier FD number into the shared memory */

        __atomic_store(&shared->seccomp_fd, &seccomp_ret,
                       __ATOMIC_RELEASE);

        /* Wake the parent */

        int futex_ret =
            syscall(__NR_futex, &shared->seccomp_fd, FUTEX_WAKE,
                    INT_MAX, NULL, NULL, 0);
        printf("C: woke %d waiters\n", futex_ret);

        /* Establish SA_RESTART handler for SIGUSR1 */

        struct sigaction act = {
            .sa_sigaction = sigusr1_handler,
            .sa_flags = SA_RESTART | SA_SIGINFO
        };
        if (sigaction(SIGUSR1, &act, NULL))
            err(1, "sigaction");

        struct sigaction act2 = {
            .sa_sigaction = sigusr2_handler,
            .sa_flags = 0
        };
        if (sigaction(SIGUSR2, &act2, NULL))
            err(1, "sigaction");

        /* Make a blocking system call */

        perror("C: About to call pause()");
        pause();
        perror("C: pause returned");

        exit(0);
    }

    /* PARENT */

    /* Wait for futex wake-up from child */

    int futex_ret = syscall(__NR_futex, &shared->seccomp_fd, FUTEX_WAIT,
                            -1, NULL, NULL, 0);
    if (futex_ret == -1 && errno != EAGAIN)
        err(1, "futex wait");

    /* Get notification FD from the child */

    int fd = __atomic_load_n(&shared->seccomp_fd, __ATOMIC_ACQUIRE);
    printf("\tP: child installed seccomp fd %d\n", fd);

    sleep(1);

    printf("\tP: going to send SIGUSR1...\n");
    kill(child, SIGUSR1);

    sleep(1);
    printf("\tP: about to terminate\n");

    exit(0);
}

====

Scenario B

$ ./seccomp_unotify_restart_scen_B
C: installed seccomp: fd 3
C: woke 1 waiters
C: About to call pause()
P: child installed seccomp fd 3
P: about to SECCOMP_IOCTL_NOTIF_RECV
P: got notif: id=17773741941218455591 pid=25052 nr=34
P: about to send SIGUSR1 to child...
P: about to SECCOMP_IOCTL_NOTIF_RECV
C: sigusr1_handler handler invoked
P: got notif: id=17773741941218455592 pid=25052 nr=34
P: about to send SIGUSR1 to child...
P: about to SECCOMP_IOCTL_NOTIF_RECV
C: sigusr1_handler handler invoked
P: got notif: id=17773741941218455593 pid=25052 nr=34
P: about to send SIGUSR1 to child...
P: about to SECCOMP_IOCTL_NOTIF_RECV
C: sigusr1_handler handler invoked
P: got notif: id=17773741941218455594 pid=25052 nr=34
P: about to send SIGUSR1 to child...
C: sigusr1_handler handler invoked
C: got pdeath signal on parent termination
C: about to terminate

/* Modified version of code from Jann Horn */

#define _GNU_SOURCE
#include <stdio.h>
#include <signal.h>
#include <err.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <sched.h>
#include <stddef.h>
#include <string.h>
#include <limits.h>
#include <inttypes.h>
#include <sys/mman.h>
#include <sys/syscall.h>
#include <sys/ioctl.h>
#include <sys/prctl.h>
#include <linux/seccomp.h>
#include <linux/filter.h>
#include <linux/futex.h>

struct {
    int seccomp_fd;
} *shared;

static void
sigusr1_handler(int sig, siginfo_t * info, void *uctx)
{
    printf("C: sigusr1_handler handler invoked\n");
}

static void
sigusr2_handler(int sig, siginfo_t * info, void *uctx)
{
    printf("C: got pdeath signal on parent termination\n");
    printf("C: about to terminate\n");
    exit(0);
}

static size_t
max_size(size_t a, size_t b)
{
    return (a > b) ? a : b;
}

int
main(void)
{
    setbuf(stdout, NULL);

    /* Allocate memory that will be shared by parent and child */

    shared = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE,
                  MAP_ANONYMOUS | MAP_SHARED, -1, 0);
    if (shared == MAP_FAILED)
        err(1, "mmap");
    shared->seccomp_fd = -1;

    /* glibc's clone() wrapper doesn't support fork()-style usage */
    /* Child process and parent share file descriptor table */
    pid_t child = syscall(__NR_clone, CLONE_FILES | SIGCHLD,
                          NULL, NULL, NULL, 0);
    if (child == -1)
        err(1, "clone");

    /* CHILD */

    if (child == 0) {
        /* don't outlive the parent */
        prctl(PR_SET_PDEATHSIG, SIGUSR2);
        if (getppid() == 1)
            exit(0);

        /* Install seccomp filter */

        prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);
        struct sock_filter insns[] = {
            BPF_STMT(BPF_LD | BPF_W | BPF_ABS,
                     offsetof(struct seccomp_data, nr)),
            BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, __NR_pause, 0, 1),
            BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_USER_NOTIF),
            BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_ALLOW)
        };
        struct sock_fprog prog = {
            .len = sizeof(insns) / sizeof(insns[0]),
            .filter = insns
        };
        int seccomp_ret = syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER,
                                  SECCOMP_FILTER_FLAG_NEW_LISTENER, &prog);
        if (seccomp_ret < 0)
            err(1, "install");
        printf("C: installed seccomp: fd %d\n", seccomp_ret);

        /* Place the notifier FD number into the shared memory */

        __atomic_store(&shared->seccomp_fd, &seccomp_ret,
                       __ATOMIC_RELEASE);

        /* Wake the parent */

        int futex_ret =
            syscall(__NR_futex, &shared->seccomp_fd, FUTEX_WAKE,
                    INT_MAX, NULL, NULL, 0);
        printf("C: woke %d waiters\n", futex_ret);

        /* Establish SA_RESTART handler for SIGUSR1 */

        struct sigaction act = {
            .sa_sigaction = sigusr1_handler,
            .sa_flags = SA_RESTART | SA_SIGINFO
        };
        if (sigaction(SIGUSR1, &act, NULL))
            err(1, "sigaction");

        struct sigaction act2 = {
            .sa_sigaction = sigusr2_handler,
            .sa_flags = 0
        };
        if (sigaction(SIGUSR2, &act2, NULL))
            err(1, "sigaction");

        /* Make a blocking system call */

        printf("C: About to call pause()\n");
        pause();
        perror("C: pause returned");

        exit(0);
    }

    /* PARENT */

    /* Wait for futex wake-up from child */

    int futex_ret = syscall(__NR_futex, &shared->seccomp_fd, FUTEX_WAIT,
                            -1, NULL, NULL, 0);
    if (futex_ret == -1 && errno != EAGAIN)
        err(1, "futex wait");

    /* Get notification FD from the child */

    int fd = __atomic_load_n(&shared->seccomp_fd, __ATOMIC_ACQUIRE);
    printf("\tP: child installed seccomp fd %d\n", fd);

    /* Discover seccomp buffer sizes and allocate notfication buffer */

    struct seccomp_notif_sizes sizes;
    if (syscall(__NR_seccomp, SECCOMP_GET_NOTIF_SIZES, 0, &sizes))
        err(1, "notif_sizes");
    struct seccomp_notif *notif =
        malloc(max_size(sizeof(struct seccomp_notif),
                        sizes.seccomp_notif));
    if (!notif)
        err(1, "malloc");

    for (int i = 0; i < 4; i++) {
        printf("\tP: about to SECCOMP_IOCTL_NOTIF_RECV\n");
        memset(notif, '\0', sizes.seccomp_notif);
        if (ioctl(fd, SECCOMP_IOCTL_NOTIF_RECV, notif))
            err(1, "notif_recv");
        printf("\tP: got notif: id=%llu pid=%u nr=%d\n",
               notif->id, notif->pid, notif->data.nr);
        sleep(1);
        printf("\tP: about to send SIGUSR1 to child...\n");
        kill(child, SIGUSR1);
    }
    sleep(1);

    exit(0);
}

====

Reported-by: Jann Horn <jannh@google.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: EXAMPLE: correct the check for NUL in buffer returned by read()
Michael Kerrisk [Sat, 24 Oct 2020 08:46:28 +0000 (10:46 +0200)] 
seccomp_user_notif.2: EXAMPLE: correct the check for NUL in buffer returned by read()

In the usual case, read(fd, buf, PATH_MAX) will return PATH_MAX
bytes that include trailing garbage after the pathname. So the
right check is to scan from the start of the buffer to see if
there's a NUL, and error if there is not.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: Better handling of invalid target pathname
Michael Kerrisk [Sun, 18 Oct 2020 20:11:54 +0000 (22:11 +0200)] 
seccomp_user_notif.2: Better handling of invalid target pathname

After some discussions with Jann Horn, perhaps a better way of
dealing with an invalid target pathname is to trigger an
error for the system call.

Reported-by: Jann Horn <jannh@google.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: EXAMPLE: rename a variable
Michael Kerrisk [Fri, 16 Oct 2020 15:08:24 +0000 (17:08 +0200)] 
seccomp_user_notif.2: EXAMPLE: rename a variable

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: EXAMPLE: Improve allocation of response buffer
Michael Kerrisk [Fri, 16 Oct 2020 09:24:25 +0000 (11:24 +0200)] 
seccomp_user_notif.2: EXAMPLE: Improve allocation of response buffer

From a conversation with Jann Horn:

[[
>>>>            struct seccomp_notif_resp *resp = malloc(sizes.seccomp_notif_resp);
>>>
>>> This should probably do something like max(sizes.seccomp_notif_resp,
>>> sizeof(struct seccomp_notif_resp)) in case the program was built
>>> against new UAPI headers that make struct seccomp_notif_resp big, but
>>> is running under an old kernel where that struct is still smaller?
>>
>> I'm confused. Why? I mean, if the running kernel says that it expects
>> a buffer of a certain size, and we allocate a buffer of that size,
>> what's the problem?
>
> Because in userspace, we cast the result of malloc() to a "struct
> seccomp_notif_resp *". If the kernel tells us that it expects a size
> smaller than sizeof(struct seccomp_notif_resp), then we end up with a
> pointer to a struct that consists partly of allocated memory, partly
> of out-of-bounds memory, which is generally a bad idea - I'm not sure
> whether the C standard permits that. And if userspace then e.g.
> decides to access some member of that struct that is beyond what the
> kernel thinks is the struct size, we get actual OOB memory accesses.
Got it. (But gosh, this seems like a fragile API mess.)

I added the following to the code:

    /* When allocating the response buffer, we must allow for the fact
       that the user-space binary may have been built with user-space
       headers where 'struct seccomp_notif_resp' is bigger than the
       response buffer expected by the (older) kernel. Therefore, we
       allocate a buffer that is the maximum of the two sizes. This
       ensures that if the supervisor places bytes into the response
       structure that are past the response size that the kernel expects,
       then the supervisor is not touching an invalid memory location. */

    size_t resp_size = sizes.seccomp_notif_resp;
    if (sizeof(struct seccomp_notif_resp) > resp_size)
        resp_size = sizeof(struct seccomp_notif_resp);

    struct seccomp_notif_resp *resp = malloc(resp_size);
]]

Reported-by: Jann Horn <jannh@google.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: EXAMPLE: ensure path read() by the supervisor is null-terminated
Michael Kerrisk [Fri, 16 Oct 2020 09:02:08 +0000 (11:02 +0200)] 
seccomp_user_notif.2: EXAMPLE: ensure path read() by the supervisor is null-terminated

From a conversation with Jann Horn:

    >> We should probably make sure here that the value we read is actually
    >> NUL-terminated?
    >
    > So, I was curious about that point also. But, (why) are we not
    > guaranteed that it will be NUL-terminated?

    Because it's random memory filled by another process, which we don't
    necessarily trust. While seccomp notifiers aren't usable for applying
    *extra* security restrictions, the supervisor will still often be more
    privileged than the supervised process.

Reported-by: Jann Horn <jannh@google.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: wfix in example program
Michael Kerrisk [Fri, 16 Oct 2020 08:58:38 +0000 (10:58 +0200)] 
seccomp_user_notif.2: wfix in example program

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: Small wording fix
Michael Kerrisk [Fri, 16 Oct 2020 07:29:10 +0000 (09:29 +0200)] 
seccomp_user_notif.2: Small wording fix

Change "read(2) will return 0" to "read(2) may return 0".

Quoting Jann Horn:

    Maybe make that "may return 0" instead of "will return 0" -
    reading from /proc/$pid/mem can only return 0 in the
    following cases AFAICS:

    1. task->mm was already gone at open() time
    2. mm->mm_users has dropped to zero (the mm only has lazytlb
       users; page tables and VMAs are being blown away or have
       been blown away)
    3. the syscall was called with length 0

    When a process has gone away, normally mm->mm_users will
    drop to zero, but someone else could theoretically still be
    holding a reference to the mm (e.g. someone else in the
    middle of accessing /proc/$pid/mem).  (Such references
    should normally not be very long-lived though.)

    Additionally, in the unlikely case that the OOM killer just
    chomped through the page tables of the target process, I
    think the read will return -EIO (same error as if the
    address was simply unmapped) if the address is within a
    non-shared mapping. (Maybe that's something procfs could do
    better...)

Reported-by: Jann Horn <jannh@google.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: Minor wording change + add a FIXME
Michael Kerrisk [Thu, 15 Oct 2020 11:33:27 +0000 (13:33 +0200)] 
seccomp_user_notif.2: Minor wording change + add a FIXME

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: User-space notification can't be used to implement security...
Michael Kerrisk [Thu, 15 Oct 2020 10:27:33 +0000 (12:27 +0200)] 
seccomp_user_notif.2: User-space notification can't be used to implement security policy

Add some strongly worded text warning the reader about the correct
uses of seccomp user-space notification.

Reported-by: Jann Horn <jannh@google.com>
Cowritten-by: Christian Brauner <christian@brauner.io>
Cowritten-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: Fixes after review comments from Christian Brauner
Michael Kerrisk [Wed, 14 Oct 2020 16:30:34 +0000 (18:30 +0200)] 
seccomp_user_notif.2: Fixes after review comments from Christian Brauner

Reported-by: Christian Brauner <christian@brauner.io>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp.2, seccomp_user_notif.2: Clarify that there can be only one SECCOMP_FILTER_FL...
Michael Kerrisk [Wed, 14 Oct 2020 06:05:15 +0000 (08:05 +0200)] 
seccomp.2, seccomp_user_notif.2: Clarify that there can be only one SECCOMP_FILTER_FLAG_NEW_LISTENER

Reported-by: Christian Brauner <christian@brauner.io>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: Note when FD indicates EOF/(E)POLLHUP in (e)poll/select
Michael Kerrisk [Thu, 15 Oct 2020 08:14:09 +0000 (10:14 +0200)] 
seccomp_user_notif.2: Note when FD indicates EOF/(E)POLLHUP in (e)poll/select

Verified by experiment.

Reported-by: Christian Brauner <christian.brauner@canonical.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: Note when notification FD indicates as writable by select/poll...
Michael Kerrisk [Wed, 14 Oct 2020 05:28:40 +0000 (07:28 +0200)] 
seccomp_user_notif.2: Note when notification FD indicates as writable by select/poll/epoll

Reported-by: Tycho Andersen <tycho@tycho.pizza>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: Minor fixes
Michael Kerrisk [Sun, 4 Oct 2020 05:21:54 +0000 (07:21 +0200)] 
seccomp_user_notif.2: Minor fixes

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: Fixes after review comments by Jann Horn
Michael Kerrisk [Thu, 1 Oct 2020 09:33:16 +0000 (11:33 +0200)] 
seccomp_user_notif.2: Fixes after review comments by Jann Horn

Reported-by: Jann Horn <jannh@google.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: Add BUGS section describing SECCOMP_IOCTL_NOTIF_RECV bug
Michael Kerrisk [Wed, 30 Sep 2020 20:32:46 +0000 (22:32 +0200)] 
seccomp_user_notif.2: Add BUGS section describing SECCOMP_IOCTL_NOTIF_RECV bug

Tycho Andersen confirmed that this issue is present.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: srcfix: remove bogus FIXME
Michael Kerrisk [Wed, 30 Sep 2020 20:25:55 +0000 (22:25 +0200)] 
seccomp_user_notif.2: srcfix: remove bogus FIXME

Pathname arguments are limited to PATH_MAX bytes.

Reported-by: Tycho Andersen <tycho@tycho.pizza>
Reported-by: Jann Horn <jannh@google.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: Changes after feed back from Tycho Andersen
Michael Kerrisk [Wed, 30 Sep 2020 20:24:59 +0000 (22:24 +0200)] 
seccomp_user_notif.2: Changes after feed back from Tycho Andersen

Reported-by: Tycho Andersen <tycho@tycho.pizza>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp_user_notif.2: Document the seccomp user-space notification mechanism
Michael Kerrisk [Mon, 28 Sep 2020 20:13:12 +0000 (22:13 +0200)] 
seccomp_user_notif.2: Document the seccomp user-space notification mechanism

The APIs used by this mechanism comprise not only seccomp(2), but
also a number of ioctl(2) operations. And any useful example
demonstrating these APIs is will necessarily be rather long.
Trying to cram all of this into the seccomp(2) page would make
that page unmanageably long. Therefore, let's document this
mechanism in a separate page.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp.2: Note that SECCOMP_RET_USER_NOTIF can be overridden
Michael Kerrisk [Thu, 15 Oct 2020 11:12:03 +0000 (13:12 +0200)] 
seccomp.2: Note that SECCOMP_RET_USER_NOTIF can be overridden

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp.2: wfix: mention term "supervisor" in description of SECCOMP_RET_USER_NOTIF
Michael Kerrisk [Thu, 15 Oct 2020 11:11:08 +0000 (13:11 +0200)] 
seccomp.2: wfix: mention term "supervisor" in description of SECCOMP_RET_USER_NOTIF

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp.2: SEE ALSO: add seccomp_user_notif(2)
Michael Kerrisk [Mon, 28 Sep 2020 22:10:34 +0000 (00:10 +0200)] 
seccomp.2: SEE ALSO: add seccomp_user_notif(2)

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp.2: Rework SECCOMP_GET_NOTIF_SIZES somewhat
Michael Kerrisk [Mon, 28 Sep 2020 07:42:38 +0000 (09:42 +0200)] 
seccomp.2: Rework SECCOMP_GET_NOTIF_SIZES somewhat

The existing text says the structures (plural!) contain a 'struct
seccomp_data'. But this is only true for the received notification
structure (seccomp_notif). So, reword the sentence to be more
general, noting simply that the structures may evolve over time.

Add some comments to the structure definition.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp.2: Add some details for SECCOMP_FILTER_FLAG_NEW_LISTENER
Michael Kerrisk [Sat, 26 Sep 2020 20:48:44 +0000 (22:48 +0200)] 
seccomp.2: Add some details for SECCOMP_FILTER_FLAG_NEW_LISTENER

Rework the description a little, and note that the close-on-exec
flag is set for the returned file descriptor.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp.2: Minor edits to Tycho's SECCOMP_FILTER_FLAG_NEW_LISTENER patch
Michael Kerrisk [Sat, 26 Sep 2020 13:45:45 +0000 (15:45 +0200)] 
seccomp.2: Minor edits to Tycho's SECCOMP_FILTER_FLAG_NEW_LISTENER patch

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp.2: Document SECCOMP_FILTER_FLAG_NEW_LISTENER
Tycho Andersen [Sat, 26 Sep 2020 13:42:36 +0000 (15:42 +0200)] 
seccomp.2: Document SECCOMP_FILTER_FLAG_NEW_LISTENER

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp.2: Reorder list of SECCOMP_SET_MODE_FILTER flags alphabetically
Michael Kerrisk [Sat, 26 Sep 2020 13:40:56 +0000 (15:40 +0200)] 
seccomp.2: Reorder list of SECCOMP_SET_MODE_FILTER flags alphabetically

(No content changes.)

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp.2: Some reworking of Tycho's SECCOMP_RET_USER_NOTIF patch
Michael Kerrisk [Sat, 26 Sep 2020 13:34:05 +0000 (15:34 +0200)] 
seccomp.2: Some reworking of Tycho's SECCOMP_RET_USER_NOTIF patch

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp.2: Document SECCOMP_RET_USER_NOTIF
Tycho Andersen [Sat, 26 Sep 2020 13:29:47 +0000 (15:29 +0200)] 
seccomp.2: Document SECCOMP_RET_USER_NOTIF

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp.2: Minor edits to Tycho Andersen's patch
Michael Kerrisk [Sat, 26 Sep 2020 13:18:38 +0000 (15:18 +0200)] 
seccomp.2: Minor edits to Tycho Andersen's patch

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp.2: Document SECCOMP_GET_NOTIF_SIZES
Tycho Andersen [Thu, 13 Dec 2018 00:11:05 +0000 (17:11 -0700)] 
seccomp.2: Document SECCOMP_GET_NOTIF_SIZES

Signed-off-by: Tycho Andersen <tycho@tycho.ws>
CC: Kees Cook <keescook@chromium.org>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosignal.7: srcfix
Michael Kerrisk [Sat, 24 Oct 2020 10:58:04 +0000 (12:58 +0200)] 
signal.7: srcfix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoqueue.3: SEE ALSO: Add circleq(3)
Alejandro Colomar [Fri, 23 Oct 2020 14:57:37 +0000 (16:57 +0200)] 
queue.3: SEE ALSO: Add circleq(3)

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoCIRCLEQ_ENTRY.3, CIRCLEQ_HEAD.3, CIRCLEQ_INIT.3, CIRCLEQ_INSERT_AFTER.3, CIRCLEQ_INSE...
Alejandro Colomar [Fri, 23 Oct 2020 14:57:36 +0000 (16:57 +0200)] 
CIRCLEQ_ENTRY.3, CIRCLEQ_HEAD.3, CIRCLEQ_INIT.3, CIRCLEQ_INSERT_AFTER.3, CIRCLEQ_INSERT_BEFORE.3, CIRCLEQ_INSERT_HEAD.3, CIRCLEQ_INSERT_TAIL.3, CIRCLEQ_REMOVE.3: Link to the new circleq(3) page instead of queue(3)

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agocircleq.3: Add remaining details to complete the page
Alejandro Colomar [Fri, 23 Oct 2020 14:57:35 +0000 (16:57 +0200)] 
circleq.3: Add remaining details to complete the page

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agocircleq.3: ffix: Use man markup
Alejandro Colomar [Fri, 23 Oct 2020 14:57:34 +0000 (16:57 +0200)] 
circleq.3: ffix: Use man markup

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agocircleq.3: Copy and adapt code from queue.3
Alejandro Colomar [Fri, 23 Oct 2020 14:57:33 +0000 (16:57 +0200)] 
circleq.3: Copy and adapt code from queue.3

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoqueue.3: ffix
Alejandro Colomar [Fri, 23 Oct 2020 14:57:32 +0000 (16:57 +0200)] 
queue.3: ffix

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agocircleq.3, queue.3: EXAMPLES: Move circleq example program from queue.3 to circleq.3
Alejandro Colomar [Fri, 23 Oct 2020 14:57:31 +0000 (16:57 +0200)] 
circleq.3, queue.3: EXAMPLES: Move circleq example program from queue.3 to circleq.3

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agocircleq.3, queue.3: DESCRIPTION: Move circleq specific code from queue.3 to circleq.3
Alejandro Colomar [Fri, 23 Oct 2020 14:57:30 +0000 (16:57 +0200)] 
circleq.3, queue.3: DESCRIPTION: Move circleq specific code from queue.3 to circleq.3

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agocircleq.3, queue.3: SYNOPSIS: Move code from queue.3 to circleq.3
Alejandro Colomar [Fri, 23 Oct 2020 14:57:29 +0000 (16:57 +0200)] 
circleq.3, queue.3: SYNOPSIS: Move code from queue.3 to circleq.3

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agocircleq.3, queue.3: NAME: Move code from queue-3 to circleq.3
Alejandro Colomar [Fri, 23 Oct 2020 14:57:28 +0000 (16:57 +0200)] 
circleq.3, queue.3: NAME: Move code from queue-3 to circleq.3

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agocircleq.3: New page that will hold the (circleq) content of queue.3
Alejandro Colomar [Fri, 23 Oct 2020 14:57:27 +0000 (16:57 +0200)] 
circleq.3: New page that will hold the (circleq) content of queue.3

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoqueue.3: Sort alphabetically
Alejandro Colomar [Fri, 23 Oct 2020 14:38:26 +0000 (16:38 +0200)] 
queue.3: Sort alphabetically

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoslist.3: tfix
Alejandro Colomar [Fri, 23 Oct 2020 07:40:42 +0000 (09:40 +0200)] 
slist.3: tfix

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoopenat2.2, loop.4: tfix: s/non-zero/nonzero/
Alejandro Colomar [Thu, 22 Oct 2020 20:43:25 +0000 (22:43 +0200)] 
openat2.2, loop.4: tfix: s/non-zero/nonzero/

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agolist.3: Sort alphabetically
Alejandro Colomar [Thu, 22 Oct 2020 15:40:40 +0000 (17:40 +0200)] 
list.3: Sort alphabetically

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agolist.3, slist.3, strcmp.3: tfix
Michael Kerrisk [Thu, 22 Oct 2020 17:33:04 +0000 (19:33 +0200)] 
list.3, slist.3, strcmp.3: tfix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoqueue.3: SEE ALSO: Add slist(3)
Alejandro Colomar [Thu, 22 Oct 2020 12:38:22 +0000 (14:38 +0200)] 
queue.3: SEE ALSO: Add slist(3)

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoSLIST_EMPTY.3, SLIST_ENTRY.3, SLIST_FIRST.3, SLIST_FOREACH.3, SLIST_HEAD.3, SLIST_HEA...
Alejandro Colomar [Thu, 22 Oct 2020 12:38:21 +0000 (14:38 +0200)] 
SLIST_EMPTY.3, SLIST_ENTRY.3, SLIST_FIRST.3, SLIST_FOREACH.3, SLIST_HEAD.3, SLIST_HEAD_INITIALIZER.3, SLIST_INIT.3, SLIST_INSERT_AFTER.3, SLIST_INSERT_HEAD.3, SLIST_NEXT.3, SLIST_REMOVE.3, SLIST_REMOVE_HEAD.3: Link to the new slist(3) page instead of queue(3)

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoslist.3: Add details
Alejandro Colomar [Thu, 22 Oct 2020 12:38:20 +0000 (14:38 +0200)] 
slist.3: Add details

Add remaining details to complete the page.

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoslist.3: ffix: Use man markup
Alejandro Colomar [Thu, 22 Oct 2020 12:38:19 +0000 (14:38 +0200)] 
slist.3: ffix: Use man markup

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoslist.3: Copy and adapt code from queue.3
Alejandro Colomar [Thu, 22 Oct 2020 12:38:18 +0000 (14:38 +0200)] 
slist.3: Copy and adapt code from queue.3

A few fixes to note:

- Sorted alphabetically some macros
- ffix: remove alignment spaces in example (as in list.3)

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoqueue.3, slist.3: EXAMPLES: Move example program from queue.3 to slist.3
Alejandro Colomar [Thu, 22 Oct 2020 12:38:17 +0000 (14:38 +0200)] 
queue.3, slist.3: EXAMPLES: Move example program from queue.3 to slist.3

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoqueue.3, slist.3: DESCRIPTION: Move slist specific code from queue.3 to slist.3
Alejandro Colomar [Thu, 22 Oct 2020 12:38:16 +0000 (14:38 +0200)] 
queue.3, slist.3: DESCRIPTION: Move slist specific code from queue.3 to slist.3

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoqueue.3, slist.3: SYNOPSIS: Move code from queue.3 to list.3
Alejandro Colomar [Thu, 22 Oct 2020 12:38:15 +0000 (14:38 +0200)] 
queue.3, slist.3: SYNOPSIS: Move code from queue.3 to list.3

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoqueue.3, slist.3: NAME: Move code from queue.3 to slist.3
Alejandro Colomar [Thu, 22 Oct 2020 12:38:14 +0000 (14:38 +0200)] 
queue.3, slist.3: NAME: Move code from queue.3 to slist.3

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoslist.3: New page that will hold the (slist) contents of queue.3
Alejandro Colomar [Thu, 22 Oct 2020 12:38:13 +0000 (14:38 +0200)] 
slist.3: New page that will hold the (slist) contents of queue.3

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agolist.3: Minor fix to grammar
Michael Kerrisk [Wed, 21 Oct 2020 04:48:45 +0000 (06:48 +0200)] 
list.3: Minor fix to grammar

Fix a preexisting grammar issue in text taken from queue.3.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agolist.3: Minor tweak's to Alex's text
Michael Kerrisk [Wed, 21 Oct 2020 04:48:03 +0000 (06:48 +0200)] 
list.3: Minor tweak's to Alex's text

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agolist.3: tfix
Michael Kerrisk [Wed, 21 Oct 2020 04:42:08 +0000 (06:42 +0200)] 
list.3: tfix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agolist.3: ffix
Michael Kerrisk [Wed, 21 Oct 2020 04:41:39 +0000 (06:41 +0200)] 
list.3: ffix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoqueue.3: SEE ALSO: Add list(3)
Alejandro Colomar [Tue, 20 Oct 2020 21:31:08 +0000 (23:31 +0200)] 
queue.3: SEE ALSO: Add list(3)

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoLIST_EMPTY.3, LIST_ENTRY.3, LIST_FIRST.3, LIST_FOREACH.3, LIST_HEAD.3, LIST_HEAD_INIT...
Alejandro Colomar [Tue, 20 Oct 2020 21:31:07 +0000 (23:31 +0200)] 
LIST_EMPTY.3, LIST_ENTRY.3, LIST_FIRST.3, LIST_FOREACH.3, LIST_HEAD.3, LIST_HEAD_INITIALIZER.3, LIST_INIT.3, LIST_INSERT_AFTER.3, LIST_INSERT_BEFORE.3, LIST_INSERT_HEAD.3, LIST_NEXT.3, LIST_REMOVE.3: Link to the new list.3 page instead of queue.3

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agolist.3: Add details
Alejandro Colomar [Tue, 20 Oct 2020 21:31:06 +0000 (23:31 +0200)] 
list.3: Add details

list.3: NAME: Add description
list.3: DESCRIPTION: Add short description
list.3: SEE ALSO: Add insque(3) and queue(3)
list.3: BUGS: Note LIST_FOREACH() limitations
list.3: RETURN VALUE: Add details about the return value of those macros that "return" a value

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agolist.3: ffix: Use man markup
Alejandro Colomar [Tue, 20 Oct 2020 21:31:05 +0000 (23:31 +0200)] 
list.3: ffix: Use man markup

list.3: NAME: ffix: Use man markup
list.3: SYNOPSIS: ffix: Use man markup
list.3: DESCRIPTION: ffix: Use man markup
list.3: DESCRIPTION: ffix: Use man markup
list.3: CONFORMING TO: ffix: Use man markup
list.3: EXAMPLES: ffix: Use man markup

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agolist.3: Copy and adapt code from queue.3
Alejandro Colomar [Tue, 20 Oct 2020 21:31:04 +0000 (23:31 +0200)] 
list.3: Copy and adapt code from queue.3

list.3: SYNOPSIS: Copy include from queue.3
list.3: DESCRIPTION: Copy description about naming of macros from queue.3
list.3: DESCRIPTION: Remove unrelated code to adapt to this page
list.3: DESCRIPTION: Remove lines pointing to the EXAMPLES
list.3: CONFORMING TO: Copy from queue.3
list.3: CONFORMING TO: Adapt to this page

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agolist.3, queue.3: EXAMPLES: Move example program from queue.3 to list.3
Alejandro Colomar [Tue, 20 Oct 2020 21:31:03 +0000 (23:31 +0200)] 
list.3, queue.3: EXAMPLES: Move example program from queue.3 to list.3

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agolist.3, queue.3: DESCRIPTION: Move list specific code from queue.3 to list.3
Alejandro Colomar [Tue, 20 Oct 2020 21:31:02 +0000 (23:31 +0200)] 
list.3, queue.3: DESCRIPTION: Move list specific code from queue.3 to list.3

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agolist.3, queue.3: SYNOPSIS: Move code from queue.3 to list.3
Alejandro Colomar [Tue, 20 Oct 2020 21:31:01 +0000 (23:31 +0200)] 
list.3, queue.3: SYNOPSIS: Move code from queue.3 to list.3

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agolist.3, queue.3: NAME: Move code from queue.3 to list.3
Alejandro Colomar [Tue, 20 Oct 2020 21:31:00 +0000 (23:31 +0200)] 
list.3, queue.3: NAME: Move code from queue.3 to list.3

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agolist.3: New page that will hold the (list) contents of queue.3
Alejandro Colomar [Tue, 20 Oct 2020 21:30:59 +0000 (23:30 +0200)] 
list.3: New page that will hold the (list) contents of queue.3

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosetns.2: Correct the version for time namespace support
Michael Kerrisk [Tue, 20 Oct 2020 10:54:32 +0000 (12:54 +0200)] 
setns.2: Correct the version for time namespace support

Time namespaces were added in kernel 5.6, but setns() support
for time namespaces was added only starting with kernel 5.8:

    commit 76c12881a38aaa83e1eb4ce2fada36c3a732bad4
    Author: Christian Brauner <christian.brauner@ubuntu.com>
    Date:   Mon Jul 6 17:49:11 2020 +0200

        nsproxy: support CLONE_NEWTIME with setns()

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agonamespaces.7: srcfix
Michael Kerrisk [Tue, 20 Oct 2020 10:32:16 +0000 (12:32 +0200)] 
namespaces.7: srcfix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agonamespaces.7: A 'time_for_children' symlink can also pin a namespace
Michael Kerrisk [Tue, 20 Oct 2020 10:31:34 +0000 (12:31 +0200)] 
namespaces.7: A 'time_for_children' symlink can also pin a namespace

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoclock_t.3: New link to system_data_types(7)
Alejandro Colomar [Sat, 17 Oct 2020 21:37:59 +0000 (23:37 +0200)] 
clock_t.3: New link to system_data_types(7)

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosystem_data_types.7: Add 'clock_t'
Alejandro Colomar [Sun, 18 Oct 2020 09:49:17 +0000 (11:49 +0200)] 
system_data_types.7: Add 'clock_t'

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosystem_data_types.7: ffix
Michael Kerrisk [Sun, 18 Oct 2020 13:04:49 +0000 (15:04 +0200)] 
system_data_types.7: ffix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agosystem_data_types.7: srcfix: add comment noting time_t difference in POSIX.1-2001
Michael Kerrisk [Sun, 18 Oct 2020 13:00:14 +0000 (15:00 +0200)] 
system_data_types.7: srcfix: add comment noting time_t difference in POSIX.1-2001

Paul Eggert commented on a patch that proposed to note the
POSIX.2001 details:

    No actual POSIXish implementation ever made it a
    real-floating type, though, and that point should be made
    lest some conscientious programmer worry about a nonexistent
    porting issue.

We opted to drop the patch, but in case someone else points out
this POSIX.1-2001 difference in the future, let's leave a comment
in the page source.

Reported-by: Paul Eggert <eggert@cs.ucla.edu>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agold.so.8: Add self to copyright
Michael Kerrisk [Sat, 17 Oct 2020 21:16:47 +0000 (23:16 +0200)] 
ld.so.8: Add self to copyright

By now, I'm responsible for quite a lot of the content in
this page.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agomallinfo.3: srcfix: add comments noting errors in glibc info page
Michael Kerrisk [Sat, 17 Oct 2020 16:38:55 +0000 (18:38 +0200)] 
mallinfo.3: srcfix: add comments noting errors in glibc info page

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agomallinfo.3: The 'usmblks' is nowadays always 0
Michael Kerrisk [Sat, 17 Oct 2020 16:19:16 +0000 (18:19 +0200)] 
mallinfo.3: The 'usmblks' is nowadays always 0

Verified from the course code.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoregex.3: Add example program
Alejandro Colomar [Sat, 17 Oct 2020 13:27:49 +0000 (15:27 +0200)] 
regex.3: Add example program

$ gcc -Wall -Wextra -Werror -pedantic regex.c -o regex
$ ./regex.3
String = "1) John Driverhacker;
2) John Doe;
3) John Foo;
"
Matches:
#0:
offset = 25; length = 7
substring = "John Do"
#1:
offset = 38; length = 8
substring = "John Foo"

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoqueue.3: stailq: Complete example
Alejandro Colomar [Sat, 17 Oct 2020 10:16:17 +0000 (12:16 +0200)] 
queue.3: stailq: Complete example

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agokernel_lockdown.7: Describe LSM activation
Heinrich Schuchardt [Fri, 16 Oct 2020 19:03:37 +0000 (21:03 +0200)] 
kernel_lockdown.7: Describe LSM activation

Describe the activation of the Kernel Lockdown feature via Kconfig
and the command line.

Cf. Documentation/admin-guide/kernel-parameters.rst.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agokernel_lockdown.7: Add a VERSIONS section
Michael Kerrisk [Fri, 16 Oct 2020 16:08:34 +0000 (18:08 +0200)] 
kernel_lockdown.7: Add a VERSIONS section

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agokernel_lockdown.7: Various minor edits to bring this page closer to man-pages stype
Michael Kerrisk [Fri, 16 Oct 2020 16:03:16 +0000 (18:03 +0200)] 
kernel_lockdown.7: Various minor edits to bring this page closer to man-pages stype

No content changes...

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agokernel_lockdown.7: New page documenting the Kernel Lockdown feature
Heinrich Schuchardt [Fri, 16 Oct 2020 11:28:34 +0000 (13:28 +0200)] 
kernel_lockdown.7: New page documenting the Kernel Lockdown feature

Provide a man-page for kernel_lockdown. The content is taken
from a patch for the Fedora 34 man-pages available at

https://kojipkgs.fedoraproject.org//packages/man-pages/5.08/1.fc34/src/man-pages-5.08-1.fc34.src.rpm

Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agolink.2: ffix
Michael Kerrisk [Fri, 16 Oct 2020 06:47:15 +0000 (08:47 +0200)] 
link.2: ffix

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoqueue.3: list: Complete example
Alejandro Colomar [Thu, 15 Oct 2020 11:29:02 +0000 (13:29 +0200)] 
queue.3: list: Complete example

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
4 years agoseccomp.2: Warn reader that SECCOMP_RET_TRACE can be overridden
Michael Kerrisk [Thu, 15 Oct 2020 11:02:36 +0000 (13:02 +0200)] 
seccomp.2: Warn reader that SECCOMP_RET_TRACE can be overridden

Highlight to the reader that if another filter returns a
higher-precedence action value, then the ptracer will not
be notified.

Reported-by: Jann Horn <jannh@google.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>