29 May, 2019

1 commit

  • force_sig_info always delivers to the current task and the signal
    parameter always matches info.si_signo. So remove those parameters to
    make it a simpler less error prone interface, and to make it clear
    that none of the callers are doing anything clever.

    This guarantees that force_sig_info will not grow any new buggy
    callers that attempt to call force_sig on a non-current task, or that
    pass an signal number that does not match info.si_signo.

    Signed-off-by: "Eric W. Biederman"

    Eric W. Biederman
     

08 May, 2019

1 commit

  • Pull audit updates from Paul Moore:
    "We've got a reasonably broad set of audit patches for the v5.2 merge
    window, the highlights are below:

    - The biggest change, and the source of all the arch/* changes, is
    the patchset from Dmitry to help enable some of the work he is
    doing around PTRACE_GET_SYSCALL_INFO.

    To be honest, including this in the audit tree is a bit of a
    stretch, but it does help move audit a little further along towards
    proper syscall auditing for all arches, and everyone else seemed to
    agree that audit was a "good" spot for this to land (or maybe they
    just didn't want to merge it? dunno.).

    - We can now audit time/NTP adjustments.

    - We continue the work to connect associated audit records into a
    single event"

    * tag 'audit-pr-20190507' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit: (21 commits)
    audit: fix a memory leak bug
    ntp: Audit NTP parameters adjustment
    timekeeping: Audit clock adjustments
    audit: purge unnecessary list_empty calls
    audit: link integrity evm_write_xattrs record to syscall event
    syscall_get_arch: add "struct task_struct *" argument
    unicore32: define syscall_get_arch()
    Move EM_UNICORE to uapi/linux/elf-em.h
    nios2: define syscall_get_arch()
    nds32: define syscall_get_arch()
    Move EM_NDS32 to uapi/linux/elf-em.h
    m68k: define syscall_get_arch()
    hexagon: define syscall_get_arch()
    Move EM_HEXAGON to uapi/linux/elf-em.h
    h8300: define syscall_get_arch()
    c6x: define syscall_get_arch()
    arc: define syscall_get_arch()
    Move EM_ARCOMPACT and EM_ARCV2 to uapi/linux/elf-em.h
    audit: Make audit_log_cap and audit_copy_inode static
    audit: connect LOGIN record to its syscall record
    ...

    Linus Torvalds
     

07 May, 2019

1 commit

  • Pull security subsystem updates from James Morris:
    "Just a few bugfixes and documentation updates"

    * 'next-general' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security:
    seccomp: fix up grammar in comment
    Revert "security: inode: fix a missing check for securityfs_create_file"
    Yama: mark function as static
    security: inode: fix a missing check for securityfs_create_file
    keys: safe concurrent user->{session,uid}_keyring access
    security: don't use RCU accessors for cred->session_keyring
    Yama: mark local symbols as static
    LSM: lsm_hooks.h: fix documentation format
    LSM: fix documentation for the shm_* hooks
    LSM: fix documentation for the sem_* hooks
    LSM: fix documentation for the msg_queue_* hooks
    LSM: fix documentation for the audit_* hooks
    LSM: fix documentation for the path_chmod hook
    LSM: fix documentation for the socket_getpeersec_dgram hook
    LSM: fix documentation for the task_setscheduler hook
    LSM: fix documentation for the socket_post_create hook
    LSM: fix documentation for the syslog hook
    LSM: fix documentation for sb_copy_data hook

    Linus Torvalds
     

30 Apr, 2019

1 commit

  • Pull seccomp fixes from Kees Cook:
    "Syzbot found a use-after-free bug in seccomp due to flags that should
    not be allowed to be used together.

    Tycho fixed this, I updated the self-tests, and the syzkaller PoC has
    been running for several days without triggering KASan (before this
    fix, it would reproduce). These patches have also been in -next for
    almost a week, just to be sure.

    - Add logic for making some seccomp flags exclusive (Tycho)

    - Update selftests for exclusivity testing (Kees)"

    * tag 'seccomp-v5.1-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux:
    seccomp: Make NEW_LISTENER and TSYNC flags exclusive
    selftests/seccomp: Prepare for exclusive seccomp flags

    Linus Torvalds
     

26 Apr, 2019

1 commit

  • As the comment notes, the return codes for TSYNC and NEW_LISTENER
    conflict, because they both return positive values, one in the case of
    success and one in the case of error. So, let's disallow both of these
    flags together.

    While this is technically a userspace break, all the users I know
    of are still waiting on me to land this feature in libseccomp, so I
    think it'll be safe. Also, at present my use case doesn't require
    TSYNC at all, so this isn't a big deal to disallow. If someone
    wanted to support this, a path forward would be to add a new flag like
    TSYNC_AND_LISTENER_YES_I_UNDERSTAND_THAT_TSYNC_WILL_JUST_RETURN_EAGAIN,
    but the use cases are so different I don't see it really happening.

    Finally, it's worth noting that this does actually fix a UAF issue: at the
    end of seccomp_set_mode_filter(), we have:

    if (flags & SECCOMP_FILTER_FLAG_NEW_LISTENER) {
    if (ret < 0) {
    listener_f->private_data = NULL;
    fput(listener_f);
    put_unused_fd(listener);
    } else {
    fd_install(listener, listener_f);
    ret = listener;
    }
    }
    out_free:
    seccomp_filter_free(prepared);

    But if ret > 0 because TSYNC raced, we'll install the listener fd and then
    free the filter out from underneath it, causing a UAF when the task closes
    it or dies. This patch also switches the condition to be simply if (ret),
    so that if someone does add the flag mentioned above, they won't have to
    remember to fix this too.

    Reported-by: syzbot+b562969adb2e04af3442@syzkaller.appspotmail.com
    Fixes: 6a21cc50f0c7 ("seccomp: add a return code to trap to userspace")
    CC: stable@vger.kernel.org # v5.0+
    Signed-off-by: Tycho Andersen
    Signed-off-by: Kees Cook
    Acked-by: James Morris

    Tycho Andersen
     

24 Apr, 2019

1 commit


05 Apr, 2019

1 commit

  • At Linux Plumbers, Andy Lutomirski approached me and pointed out that the
    function call syscall_get_arguments() implemented in x86 was horribly
    written and not optimized for the standard case of passing in 0 and 6 for
    the starting index and the number of system calls to get. When looking at
    all the users of this function, I discovered that all instances pass in only
    0 and 6 for these arguments. Instead of having this function handle
    different cases that are never used, simply rewrite it to return the first 6
    arguments of a system call.

    This should help out the performance of tracing system calls by ptrace,
    ftrace and perf.

    Link: http://lkml.kernel.org/r/20161107213233.754809394@goodmis.org

    Cc: Oleg Nesterov
    Cc: Kees Cook
    Cc: Andy Lutomirski
    Cc: Dominik Brodowski
    Cc: Dave Martin
    Cc: "Dmitry V. Levin"
    Cc: x86@kernel.org
    Cc: linux-snps-arc@lists.infradead.org
    Cc: linux-kernel@vger.kernel.org
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: linux-c6x-dev@linux-c6x.org
    Cc: uclinux-h8-devel@lists.sourceforge.jp
    Cc: linux-hexagon@vger.kernel.org
    Cc: linux-ia64@vger.kernel.org
    Cc: linux-mips@vger.kernel.org
    Cc: nios2-dev@lists.rocketboards.org
    Cc: openrisc@lists.librecores.org
    Cc: linux-parisc@vger.kernel.org
    Cc: linuxppc-dev@lists.ozlabs.org
    Cc: linux-riscv@lists.infradead.org
    Cc: linux-s390@vger.kernel.org
    Cc: linux-sh@vger.kernel.org
    Cc: sparclinux@vger.kernel.org
    Cc: linux-um@lists.infradead.org
    Cc: linux-xtensa@linux-xtensa.org
    Cc: linux-arch@vger.kernel.org
    Acked-by: Paul Burton # MIPS parts
    Acked-by: Max Filippov # For xtensa changes
    Acked-by: Will Deacon # For the arm64 bits
    Reviewed-by: Thomas Gleixner # for x86
    Reviewed-by: Dmitry V. Levin
    Reported-by: Andy Lutomirski
    Signed-off-by: Steven Rostedt (VMware)

    Steven Rostedt (Red Hat)
     

21 Mar, 2019

1 commit

  • This argument is required to extend the generic ptrace API with
    PTRACE_GET_SYSCALL_INFO request: syscall_get_arch() is going
    to be called from ptrace_request() along with syscall_get_nr(),
    syscall_get_arguments(), syscall_get_error(), and
    syscall_get_return_value() functions with a tracee as their argument.

    The primary intent is that the triple (audit_arch, syscall_nr, arg1..arg6)
    should describe what system call is being called and what its arguments
    are.

    Reverts: 5e937a9ae913 ("syscall_get_arch: remove useless function arguments")
    Reverts: 1002d94d3076 ("syscall.h: fix doc text for syscall_get_arch()")
    Reviewed-by: Andy Lutomirski # for x86
    Reviewed-by: Palmer Dabbelt
    Acked-by: Paul Moore
    Acked-by: Paul Burton # MIPS parts
    Acked-by: Michael Ellerman (powerpc)
    Acked-by: Kees Cook # seccomp parts
    Acked-by: Mark Salter # for the c6x bit
    Cc: Elvira Khabirova
    Cc: Eugene Syromyatnikov
    Cc: Oleg Nesterov
    Cc: x86@kernel.org
    Cc: linux-alpha@vger.kernel.org
    Cc: linux-snps-arc@lists.infradead.org
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: linux-c6x-dev@linux-c6x.org
    Cc: uclinux-h8-devel@lists.sourceforge.jp
    Cc: linux-hexagon@vger.kernel.org
    Cc: linux-ia64@vger.kernel.org
    Cc: linux-m68k@lists.linux-m68k.org
    Cc: linux-mips@vger.kernel.org
    Cc: nios2-dev@lists.rocketboards.org
    Cc: openrisc@lists.librecores.org
    Cc: linux-parisc@vger.kernel.org
    Cc: linuxppc-dev@lists.ozlabs.org
    Cc: linux-riscv@lists.infradead.org
    Cc: linux-s390@vger.kernel.org
    Cc: linux-sh@vger.kernel.org
    Cc: sparclinux@vger.kernel.org
    Cc: linux-um@lists.infradead.org
    Cc: linux-xtensa@linux-xtensa.org
    Cc: linux-arch@vger.kernel.org
    Cc: linux-audit@redhat.com
    Signed-off-by: Dmitry V. Levin
    Signed-off-by: Paul Moore

    Dmitry V. Levin
     

08 Mar, 2019

1 commit

  • Pull security subsystem updates from James Morris:

    - Extend LSM stacking to allow sharing of cred, file, ipc, inode, and
    task blobs. This paves the way for more full-featured LSMs to be
    merged, and is specifically aimed at LandLock and SARA LSMs. This
    work is from Casey and Kees.

    - There's a new LSM from Micah Morton: "SafeSetID gates the setid
    family of syscalls to restrict UID/GID transitions from a given
    UID/GID to only those approved by a system-wide whitelist." This
    feature is currently shipping in ChromeOS.

    * 'next-general' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security: (62 commits)
    keys: fix missing __user in KEYCTL_PKEY_QUERY
    LSM: Update list of SECURITYFS users in Kconfig
    LSM: Ignore "security=" when "lsm=" is specified
    LSM: Update function documentation for cap_capable
    security: mark expected switch fall-throughs and add a missing break
    tomoyo: Bump version.
    LSM: fix return value check in safesetid_init_securityfs()
    LSM: SafeSetID: add selftest
    LSM: SafeSetID: remove unused include
    LSM: SafeSetID: 'depend' on CONFIG_SECURITY
    LSM: Add 'name' field for SafeSetID in DEFINE_LSM
    LSM: add SafeSetID module that gates setid calls
    LSM: add SafeSetID module that gates setid calls
    tomoyo: Allow multiple use_group lines.
    tomoyo: Coding style fix.
    tomoyo: Swicth from cred->security to task_struct->security.
    security: keys: annotate implicit fall throughs
    security: keys: annotate implicit fall throughs
    security: keys: annotate implicit fall through
    capabilities:: annotate implicit fall through
    ...

    Linus Torvalds
     

22 Feb, 2019

1 commit


23 Jan, 2019

1 commit


16 Jan, 2019

1 commit

  • On the failure path, we do an fput() of the listener fd if the filter fails
    to install (e.g. because of a TSYNC race that's lost, or if the thread is
    killed, etc.). fput() doesn't actually release the fd, it just ads it to a
    work queue. Then the thread proceeds to free the filter, even though the
    listener struct file has a reference to it.

    To fix this, on the failure path let's set the private data to null, so we
    know in ->release() to ignore the filter.

    Reported-by: syzbot+981c26489b2d1c6316ba@syzkaller.appspotmail.com
    Fixes: 6a21cc50f0c7 ("seccomp: add a return code to trap to userspace")
    Signed-off-by: Tycho Andersen
    Acked-by: Kees Cook
    Signed-off-by: James Morris

    Tycho Andersen
     

11 Jan, 2019

1 commit

  • This patch provides a general mechanism for passing flags to the
    security_capable LSM hook. It replaces the specific 'audit' flag that is
    used to tell security_capable whether it should log an audit message for
    the given capability check. The reason for generalizing this flag
    passing is so we can add an additional flag that signifies whether
    security_capable is being called by a setid syscall (which is needed by
    the proposed SafeSetID LSM).

    Signed-off-by: Micah Morton
    Reviewed-by: Kees Cook
    Signed-off-by: James Morris

    Micah Morton
     

14 Dec, 2018

1 commit

  • sparse complains,

    kernel/seccomp.c:1172:13: warning: incorrect type in assignment (different base types)
    kernel/seccomp.c:1172:13: expected restricted __poll_t [usertype] ret
    kernel/seccomp.c:1172:13: got int
    kernel/seccomp.c:1173:13: warning: restricted __poll_t degrades to integer

    Instead of assigning this to ret, since we don't use this anywhere, let's
    just test it against 0 directly.

    Signed-off-by: Tycho Andersen
    Reported-by: 0day robot
    Fixes: 6a21cc50f0c7 ("seccomp: add a return code to trap to userspace")
    Signed-off-by: Kees Cook

    Tycho Andersen
     

12 Dec, 2018

3 commits

  • This patch introduces a means for syscalls matched in seccomp to notify
    some other task that a particular filter has been triggered.

    The motivation for this is primarily for use with containers. For example,
    if a container does an init_module(), we obviously don't want to load this
    untrusted code, which may be compiled for the wrong version of the kernel
    anyway. Instead, we could parse the module image, figure out which module
    the container is trying to load and load it on the host.

    As another example, containers cannot mount() in general since various
    filesystems assume a trusted image. However, if an orchestrator knows that
    e.g. a particular block device has not been exposed to a container for
    writing, it want to allow the container to mount that block device (that
    is, handle the mount for it).

    This patch adds functionality that is already possible via at least two
    other means that I know about, both of which involve ptrace(): first, one
    could ptrace attach, and then iterate through syscalls via PTRACE_SYSCALL.
    Unfortunately this is slow, so a faster version would be to install a
    filter that does SECCOMP_RET_TRACE, which triggers a PTRACE_EVENT_SECCOMP.
    Since ptrace allows only one tracer, if the container runtime is that
    tracer, users inside the container (or outside) trying to debug it will not
    be able to use ptrace, which is annoying. It also means that older
    distributions based on Upstart cannot boot inside containers using ptrace,
    since upstart itself uses ptrace to monitor services while starting.

    The actual implementation of this is fairly small, although getting the
    synchronization right was/is slightly complex.

    Finally, it's worth noting that the classic seccomp TOCTOU of reading
    memory data from the task still applies here, but can be avoided with
    careful design of the userspace handler: if the userspace handler reads all
    of the task memory that is necessary before applying its security policy,
    the tracee's subsequent memory edits will not be read by the tracer.

    Signed-off-by: Tycho Andersen
    CC: Kees Cook
    CC: Andy Lutomirski
    CC: Oleg Nesterov
    CC: Eric W. Biederman
    CC: "Serge E. Hallyn"
    Acked-by: Serge Hallyn
    CC: Christian Brauner
    CC: Tyler Hicks
    CC: Akihiro Suda
    Signed-off-by: Kees Cook

    Tycho Andersen
     
  • The const qualifier causes problems for any code that wants to write to the
    third argument of the seccomp syscall, as we will do in a future patch in
    this series.

    The third argument to the seccomp syscall is documented as void *, so
    rather than just dropping the const, let's switch everything to use void *
    as well.

    I believe this is safe because of 1. the documentation above, 2. there's no
    real type information exported about syscalls anywhere besides the man
    pages.

    Signed-off-by: Tycho Andersen
    CC: Kees Cook
    CC: Andy Lutomirski
    CC: Oleg Nesterov
    CC: Eric W. Biederman
    CC: "Serge E. Hallyn"
    Acked-by: Serge Hallyn
    CC: Christian Brauner
    CC: Tyler Hicks
    CC: Akihiro Suda
    Signed-off-by: Kees Cook

    Tycho Andersen
     
  • In the next patch, we're going to use the sd pointer passed to
    __seccomp_filter() as the data to pass to userspace. Except that in some
    cases (__seccomp_filter(SECCOMP_RET_TRACE), emulate_vsyscall(), every time
    seccomp is inovked on power, etc.) the sd pointer will be NULL in order to
    force seccomp to recompute the register data. Previously this recomputation
    happened one level lower, in seccomp_run_filters(); this patch just moves
    it up a level higher to __seccomp_filter().

    Thanks Oleg for spotting this.

    Signed-off-by: Tycho Andersen
    CC: Kees Cook
    CC: Andy Lutomirski
    CC: Oleg Nesterov
    CC: Eric W. Biederman
    CC: "Serge E. Hallyn"
    Acked-by: Serge Hallyn
    CC: Christian Brauner
    CC: Tyler Hicks
    CC: Akihiro Suda
    Signed-off-by: Kees Cook

    Tycho Andersen
     

24 Oct, 2018

1 commit

  • Pull security subsystem updates from James Morris:
    "In this patchset, there are a couple of minor updates, as well as some
    reworking of the LSM initialization code from Kees Cook (these prepare
    the way for ordered stackable LSMs, but are a valuable cleanup on
    their own)"

    * 'next-general' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security:
    LSM: Don't ignore initialization failures
    LSM: Provide init debugging infrastructure
    LSM: Record LSM name in struct lsm_info
    LSM: Convert security_initcall() into DEFINE_LSM()
    vmlinux.lds.h: Move LSM_TABLE into INIT_DATA
    LSM: Convert from initcall to struct lsm_info
    LSM: Remove initcall tracing
    LSM: Rename .security_initcall section to .lsm_info
    vmlinux.lds.h: Avoid copy/paste of security_init section
    LSM: Correctly announce start of LSM initialization
    security: fix LSM description location
    keys: Fix the use of the C++ keyword "private" in uapi/linux/keyctl.h
    seccomp: remove unnecessary unlikely()
    security: tomoyo: Fix obsolete function
    security/capabilities: remove check for -EINVAL

    Linus Torvalds
     

03 Oct, 2018

1 commit

  • Linus recently observed that if we did not worry about the padding
    member in struct siginfo it is only about 48 bytes, and 48 bytes is
    much nicer than 128 bytes for allocating on the stack and copying
    around in the kernel.

    The obvious thing of only adding the padding when userspace is
    including siginfo.h won't work as there are sigframe definitions in
    the kernel that embed struct siginfo.

    So split siginfo in two; kernel_siginfo and siginfo. Keeping the
    traditional name for the userspace definition. While the version that
    is used internally to the kernel and ultimately will not be padded to
    128 bytes is called kernel_siginfo.

    The definition of struct kernel_siginfo I have put in include/signal_types.h

    A set of buildtime checks has been added to verify the two structures have
    the same field offsets.

    To make it easy to verify the change kernel_siginfo retains the same
    size as siginfo. The reduction in size comes in a following change.

    Signed-off-by: "Eric W. Biederman"

    Eric W. Biederman
     

07 Sep, 2018

1 commit

  • WARN_ON() already contains an unlikely(), so it's not necessary to wrap it
    into another.

    Signed-off-by: Igor Stoppa
    Acked-by: Kees Cook
    Cc: linux-security-module@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: James Morris

    Igor Stoppa
     

07 Jun, 2018

1 commit

  • Pull audit updates from Paul Moore:
    "Another reasonable chunk of audit changes for v4.18, thirteen patches
    in total.

    The thirteen patches can mostly be broken down into one of four
    categories: general bug fixes, accessor functions for audit state
    stored in the task_struct, negative filter matches on executable
    names, and extending the (relatively) new seccomp logging knobs to the
    audit subsystem.

    The main driver for the accessor functions from Richard are the
    changes we're working on to associate audit events with containers,
    but I think they have some standalone value too so I figured it would
    be good to get them in now.

    The seccomp/audit patches from Tyler apply the seccomp logging
    improvements from a few releases ago to audit's seccomp logging;
    starting with this patchset the changes in
    /proc/sys/kernel/seccomp/actions_logged should apply to both the
    standard kernel logging and audit.

    As usual, everything passes the audit-testsuite and it happens to
    merge cleanly with your tree"

    [ Heh, except it had trivial merge conflicts with the SELinux tree that
    also came in from Paul - Linus ]

    * tag 'audit-pr-20180605' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit:
    audit: Fix wrong task in comparison of session ID
    audit: use existing session info function
    audit: normalize loginuid read access
    audit: use new audit_context access funciton for seccomp_actions_logged
    audit: use inline function to set audit context
    audit: use inline function to get audit context
    audit: convert sessionid unset to a macro
    seccomp: Don't special case audited processes when logging
    seccomp: Audit attempts to modify the actions_logged sysctl
    seccomp: Configurable separator for the actions_logged string
    seccomp: Separate read and write code for actions_logged sysctl
    audit: allow not equal op for audit by executable
    audit: add syscall information to FEATURE_CHANGE records

    Linus Torvalds
     

08 May, 2018

4 commits

  • Seccomp logging for "handled" actions such as RET_TRAP, RET_TRACE, or
    RET_ERRNO can be very noisy for processes that are being audited. This
    patch modifies the seccomp logging behavior to treat processes that are
    being inspected via the audit subsystem the same as processes that
    aren't under inspection. Handled actions will no longer be logged just
    because the process is being inspected. Since v4.14, applications have
    the ability to request logging of handled actions by using the
    SECCOMP_FILTER_FLAG_LOG flag when loading seccomp filters.

    With this patch, the logic for deciding if an action will be logged is:

    if action == RET_ALLOW:
    do not log
    else if action not in actions_logged:
    do not log
    else if action == RET_KILL:
    log
    else if action == RET_LOG:
    log
    else if filter-requests-logging:
    log
    else:
    do not log

    Reported-by: Steve Grubb
    Signed-off-by: Tyler Hicks
    Acked-by: Kees Cook
    Signed-off-by: Paul Moore

    Tyler Hicks
     
  • The decision to log a seccomp action will always be subject to the
    value of the kernel.seccomp.actions_logged sysctl, even for processes
    that are being inspected via the audit subsystem, in an upcoming patch.
    Therefore, we need to emit an audit record on attempts at writing to the
    actions_logged sysctl when auditing is enabled.

    This patch updates the write handler for the actions_logged sysctl to
    emit an audit record on attempts to write to the sysctl. Successful
    writes to the sysctl will result in a record that includes a normalized
    list of logged actions in the "actions" field and a "res" field equal to
    1. Unsuccessful writes to the sysctl will result in a record that
    doesn't include the "actions" field and has a "res" field equal to 0.

    Not all unsuccessful writes to the sysctl are audited. For example, an
    audit record will not be emitted if an unprivileged process attempts to
    open the sysctl file for reading since that access control check is not
    part of the sysctl's write handler.

    Below are some example audit records when writing various strings to the
    actions_logged sysctl.

    Writing "not-a-real-action", when the kernel.seccomp.actions_logged
    sysctl previously was "kill_process kill_thread trap errno trace log",
    emits this audit record:

    type=CONFIG_CHANGE msg=audit(1525392371.454:120): op=seccomp-logging
    actions=? old-actions=kill_process,kill_thread,trap,errno,trace,log
    res=0

    If you then write "kill_process kill_thread errno trace log", this audit
    record is emitted:

    type=CONFIG_CHANGE msg=audit(1525392401.645:126): op=seccomp-logging
    actions=kill_process,kill_thread,errno,trace,log
    old-actions=kill_process,kill_thread,trap,errno,trace,log res=1

    If you then write "log log errno trace kill_process kill_thread", which
    is unordered and contains the log action twice, it results in the same
    actions value as the previous record:

    type=CONFIG_CHANGE msg=audit(1525392436.354:132): op=seccomp-logging
    actions=kill_process,kill_thread,errno,trace,log
    old-actions=kill_process,kill_thread,errno,trace,log res=1

    If you then write an empty string to the sysctl, this audit record is
    emitted:

    type=CONFIG_CHANGE msg=audit(1525392494.413:138): op=seccomp-logging
    actions=(none) old-actions=kill_process,kill_thread,errno,trace,log
    res=1

    No audit records are generated when reading the actions_logged sysctl.

    Suggested-by: Steve Grubb
    Signed-off-by: Tyler Hicks
    Acked-by: Kees Cook
    Signed-off-by: Paul Moore

    Tyler Hicks
     
  • The function that converts a bitmask of seccomp actions that are
    allowed to be logged is currently only used for constructing the display
    string for the kernel.seccomp.actions_logged sysctl. That string wants a
    space character to be used for the separator between actions.

    A future patch will make use of the same function for building a string
    that will be sent to the audit subsystem for tracking modifications to
    the kernel.seccomp.actions_logged sysctl. That string will need to use a
    comma as a separator. This patch allows the separator character to be
    configurable to meet both needs.

    Signed-off-by: Tyler Hicks
    Acked-by: Kees Cook
    Signed-off-by: Paul Moore

    Tyler Hicks
     
  • Break the read and write paths of the kernel.seccomp.actions_logged
    sysctl into separate functions to maintain readability. An upcoming
    change will need to audit writes, but not reads, of this sysctl which
    would introduce too many conditional code paths on whether or not the
    'write' parameter evaluates to true.

    Signed-off-by: Tyler Hicks
    Acked-by: Kees Cook
    Signed-off-by: Paul Moore

    Tyler Hicks
     

05 May, 2018

3 commits


03 May, 2018

1 commit

  • When speculation flaw mitigations are opt-in (via prctl), using seccomp
    will automatically opt-in to these protections, since using seccomp
    indicates at least some level of sandboxing is desired.

    Signed-off-by: Kees Cook
    Signed-off-by: Thomas Gleixner

    Kees Cook
     

23 Feb, 2018

1 commit


22 Feb, 2018

1 commit

  • Previously if users passed a small size for the input structure size, they
    would get get odd behavior. It doesn't make sense to pass a structure
    smaller than at least filter_off size, so let's just give -EINVAL in this
    case.

    This changes userspace visible behavior, but was only introduced in commit
    26500475ac1b ("ptrace, seccomp: add support for retrieving seccomp
    metadata") in 4.16-rc2, so should be safe to change if merged before then.

    Reported-by: Eugene Syromiatnikov
    Signed-off-by: Tycho Andersen
    CC: Kees Cook
    CC: Oleg Nesterov
    Signed-off-by: Kees Cook

    Tycho Andersen
     

01 Feb, 2018

1 commit


23 Jan, 2018

1 commit


29 Nov, 2017

2 commits

  • With the new SECCOMP_FILTER_FLAG_LOG, we need to be able to extract these
    flags for checkpoint restore, since they describe the state of a filter.

    So, let's add PTRACE_SECCOMP_GET_METADATA, similar to ..._GET_FILTER, which
    returns the metadata of the nth filter (right now, just the flags).
    Hopefully this will be future proof, and new per-filter metadata can be
    added to this struct.

    Signed-off-by: Tycho Andersen
    CC: Kees Cook
    CC: Andy Lutomirski
    CC: Oleg Nesterov
    Signed-off-by: Kees Cook

    Tycho Andersen
     
  • Hoist out the nth filter resolving logic that ptrace uses into a new
    function. We'll use this in the next patch to implement the new
    PTRACE_SECCOMP_GET_FILTER_FLAGS command.

    Signed-off-by: Tycho Andersen
    CC: Kees Cook
    CC: Andy Lutomirski
    CC: Oleg Nesterov
    Signed-off-by: Kees Cook

    Tycho Andersen
     

07 Nov, 2017

1 commit


02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

24 Oct, 2017

1 commit

  • READ_ONCE() now has an implicit smp_read_barrier_depends() call, so it
    can be used instead of lockless_dereference() without any change in
    semantics.

    Signed-off-by: Will Deacon
    Cc: Linus Torvalds
    Cc: Paul E. McKenney
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/1508840570-22169-4-git-send-email-will.deacon@arm.com
    Signed-off-by: Ingo Molnar

    Will Deacon
     

11 Oct, 2017

1 commit

  • The function __get_seccomp_filter is local to the source and does
    not need to be in global scope, so make it static.

    Cleans up sparse warning:
    symbol '__get_seccomp_filter' was not declared. Should it be static?

    Signed-off-by: Colin Ian King
    Fixes: 66a733ea6b61 ("seccomp: fix the usage of get/put_seccomp_filter() in seccomp_get_filter()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Kees Cook

    Colin Ian King
     

28 Sep, 2017

1 commit

  • As Chris explains, get_seccomp_filter() and put_seccomp_filter() can end
    up using different filters. Once we drop ->siglock it is possible for
    task->seccomp.filter to have been replaced by SECCOMP_FILTER_FLAG_TSYNC.

    Fixes: f8e529ed941b ("seccomp, ptrace: add support for dumping seccomp filters")
    Reported-by: Chris Salls
    Cc: stable@vger.kernel.org # needs s/refcount_/atomic_/ for v4.12 and earlier
    Signed-off-by: Oleg Nesterov
    [tycho: add __get_seccomp_filter vs. open coding refcount_inc()]
    Signed-off-by: Tycho Andersen
    [kees: tweak commit log]
    Signed-off-by: Kees Cook

    Oleg Nesterov