10 May, 2017

1 commit

  • Pull misc vfs updates from Al Viro:
    "Assorted bits and pieces from various people. No common topic in this
    pile, sorry"

    * 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    fs/affs: add rename exchange
    fs/affs: add rename2 to prepare multiple methods
    Make stat/lstat/fstatat pass AT_NO_AUTOMOUNT to vfs_statx()
    fs: don't set *REFERENCED on single use objects
    fs: compat: Remove warning from COMPATIBLE_IOCTL
    remove pointless extern of atime_need_update_rcu()
    fs: completely ignore unknown open flags
    fs: add a VALID_OPEN_FLAGS
    fs: remove _submit_bh()
    fs: constify tree_descr arrays passed to simple_fill_super()
    fs: drop duplicate header percpu-rwsem.h
    fs/affs: bugfix: Write files greater than page size on OFS
    fs/affs: bugfix: enable writes on OFS disks
    fs/affs: remove node generation check
    fs/affs: import amigaffs.h
    fs/affs: bugfix: make symbolic links work again

    Linus Torvalds
     

09 May, 2017

3 commits

  • CURRENT_TIME macro is not y2038 safe on 32 bit systems.

    The patch replaces all the uses of CURRENT_TIME by current_time().

    This is also in preparation for the patch that transitions vfs
    timestamps to use 64 bit time and hence make them y2038 safe.
    current_time() is also planned to be transitioned to y2038 safe behavior
    along with this change.

    CURRENT_TIME macro will be deleted before merging the aforementioned
    change.

    Link: http://lkml.kernel.org/r/1491613030-11599-11-git-send-email-deepa.kernel@gmail.com
    Signed-off-by: Deepa Dinamani
    Acked-by: John Johansen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Deepa Dinamani
     
  • There are many code paths opencoding kvmalloc. Let's use the helper
    instead. The main difference to kvmalloc is that those users are
    usually not considering all the aspects of the memory allocator. E.g.
    allocation requests
    Reviewed-by: Boris Ostrovsky # Xen bits
    Acked-by: Kees Cook
    Acked-by: Vlastimil Babka
    Acked-by: Andreas Dilger # Lustre
    Acked-by: Christian Borntraeger # KVM/s390
    Acked-by: Dan Williams # nvdim
    Acked-by: David Sterba # btrfs
    Acked-by: Ilya Dryomov # Ceph
    Acked-by: Tariq Toukan # mlx4
    Acked-by: Leon Romanovsky # mlx5
    Cc: Martin Schwidefsky
    Cc: Heiko Carstens
    Cc: Herbert Xu
    Cc: Anton Vorontsov
    Cc: Colin Cross
    Cc: Tony Luck
    Cc: "Rafael J. Wysocki"
    Cc: Ben Skeggs
    Cc: Kent Overstreet
    Cc: Santosh Raspatur
    Cc: Hariprasad S
    Cc: Yishai Hadas
    Cc: Oleg Drokin
    Cc: "Yan, Zheng"
    Cc: Alexander Viro
    Cc: Alexei Starovoitov
    Cc: Eric Dumazet
    Cc: David Miller
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michal Hocko
     
  • Patch series "kvmalloc", v5.

    There are many open coded kmalloc with vmalloc fallback instances in the
    tree. Most of them are not careful enough or simply do not care about
    the underlying semantic of the kmalloc/page allocator which means that
    a) some vmalloc fallbacks are basically unreachable because the kmalloc
    part will keep retrying until it succeeds b) the page allocator can
    invoke a really disruptive steps like the OOM killer to move forward
    which doesn't sound appropriate when we consider that the vmalloc
    fallback is available.

    As it can be seen implementing kvmalloc requires quite an intimate
    knowledge if the page allocator and the memory reclaim internals which
    strongly suggests that a helper should be implemented in the memory
    subsystem proper.

    Most callers, I could find, have been converted to use the helper
    instead. This is patch 6. There are some more relying on __GFP_REPEAT
    in the networking stack which I have converted as well and Eric Dumazet
    was not opposed [2] to convert them as well.

    [1] http://lkml.kernel.org/r/20170130094940.13546-1-mhocko@kernel.org
    [2] http://lkml.kernel.org/r/1485273626.16328.301.camel@edumazet-glaptop3.roam.corp.google.com

    This patch (of 9):

    Using kmalloc with the vmalloc fallback for larger allocations is a
    common pattern in the kernel code. Yet we do not have any common helper
    for that and so users have invented their own helpers. Some of them are
    really creative when doing so. Let's just add kv[mz]alloc and make sure
    it is implemented properly. This implementation makes sure to not make
    a large memory pressure for > PAGE_SZE requests (__GFP_NORETRY) and also
    to not warn about allocation failures. This also rules out the OOM
    killer as the vmalloc is a more approapriate fallback than a disruptive
    user visible action.

    This patch also changes some existing users and removes helpers which
    are specific for them. In some cases this is not possible (e.g.
    ext4_kvmalloc, libcfs_kvzalloc) because those seems to be broken and
    require GFP_NO{FS,IO} context which is not vmalloc compatible in general
    (note that the page table allocation is GFP_KERNEL). Those need to be
    fixed separately.

    While we are at it, document that __vmalloc{_node} about unsupported gfp
    mask because there seems to be a lot of confusion out there.
    kvmalloc_node will warn about GFP_KERNEL incompatible (which are not
    superset) flags to catch new abusers. Existing ones would have to die
    slowly.

    [sfr@canb.auug.org.au: f2fs fixup]
    Link: http://lkml.kernel.org/r/20170320163735.332e64b7@canb.auug.org.au
    Link: http://lkml.kernel.org/r/20170306103032.2540-2-mhocko@kernel.org
    Signed-off-by: Michal Hocko
    Signed-off-by: Stephen Rothwell
    Reviewed-by: Andreas Dilger [ext4 part]
    Acked-by: Vlastimil Babka
    Cc: John Hubbard
    Cc: David Miller
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michal Hocko
     

03 May, 2017

3 commits

  • Pull security subsystem updates from James Morris:
    "Highlights:

    IMA:
    - provide ">" and " of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security: (98 commits)
    tpm: Fix reference count to main device
    tpm_tis: convert to using locality callbacks
    tpm: fix handling of the TPM 2.0 event logs
    tpm_crb: remove a cruft constant
    keys: select CONFIG_CRYPTO when selecting DH / KDF
    apparmor: Make path_max parameter readonly
    apparmor: fix parameters so that the permission test is bypassed at boot
    apparmor: fix invalid reference to index variable of iterator line 836
    apparmor: use SHASH_DESC_ON_STACK
    security/apparmor/lsm.c: set debug messages
    apparmor: fix boolreturn.cocci warnings
    Smack: Use GFP_KERNEL for smk_netlbl_mls().
    smack: fix double free in smack_parse_opts_str()
    KEYS: add SP800-56A KDF support for DH
    KEYS: Keyring asymmetric key restrict method with chaining
    KEYS: Restrict asymmetric key linkage using a specific keychain
    KEYS: Add a lookup_restriction function for the asymmetric key type
    KEYS: Add KEYCTL_RESTRICT_KEYRING
    KEYS: Consistent ordering for __key_link_begin and restrict check
    KEYS: Add an optional lookup_restriction hook to key_type
    ...

    Linus Torvalds
     
  • Pull networking updates from David Millar:
    "Here are some highlights from the 2065 networking commits that
    happened this development cycle:

    1) XDP support for IXGBE (John Fastabend) and thunderx (Sunil Kowuri)

    2) Add a generic XDP driver, so that anyone can test XDP even if they
    lack a networking device whose driver has explicit XDP support
    (me).

    3) Sparc64 now has an eBPF JIT too (me)

    4) Add a BPF program testing framework via BPF_PROG_TEST_RUN (Alexei
    Starovoitov)

    5) Make netfitler network namespace teardown less expensive (Florian
    Westphal)

    6) Add symmetric hashing support to nft_hash (Laura Garcia Liebana)

    7) Implement NAPI and GRO in netvsc driver (Stephen Hemminger)

    8) Support TC flower offload statistics in mlxsw (Arkadi Sharshevsky)

    9) Multiqueue support in stmmac driver (Joao Pinto)

    10) Remove TCP timewait recycling, it never really could possibly work
    well in the real world and timestamp randomization really zaps any
    hint of usability this feature had (Soheil Hassas Yeganeh)

    11) Support level3 vs level4 ECMP route hashing in ipv4 (Nikolay
    Aleksandrov)

    12) Add socket busy poll support to epoll (Sridhar Samudrala)

    13) Netlink extended ACK support (Johannes Berg, Pablo Neira Ayuso,
    and several others)

    14) IPSEC hw offload infrastructure (Steffen Klassert)"

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (2065 commits)
    tipc: refactor function tipc_sk_recv_stream()
    tipc: refactor function tipc_sk_recvmsg()
    net: thunderx: Optimize page recycling for XDP
    net: thunderx: Support for XDP header adjustment
    net: thunderx: Add support for XDP_TX
    net: thunderx: Add support for XDP_DROP
    net: thunderx: Add basic XDP support
    net: thunderx: Cleanup receive buffer allocation
    net: thunderx: Optimize CQE_TX handling
    net: thunderx: Optimize RBDR descriptor handling
    net: thunderx: Support for page recycling
    ipx: call ipxitf_put() in ioctl error path
    net: sched: add helpers to handle extended actions
    qed*: Fix issues in the ptp filter config implementation.
    qede: Fix concurrency issue in PTP Tx path processing.
    stmmac: Add support for SIMATIC IOT2000 platform
    net: hns: fix ethtool_get_strings overflow in hns driver
    tcp: fix wraparound issue in tcp_lp
    bpf, arm64: fix jit branch offset related to ldimm64
    bpf, arm64: implement jiting of BPF_XADD
    ...

    Linus Torvalds
     
  • Pull documentation update from Jonathan Corbet:
    "A reasonably busy cycle for documentation this time around. There is a
    new guide for user-space API documents, rather sparsely populated at
    the moment, but it's a start. Markus improved the infrastructure for
    converting diagrams. Mauro has converted much of the USB documentation
    over to RST. Plus the usual set of fixes, improvements, and tweaks.

    There's a bit more than the usual amount of reaching out of
    Documentation/ to fix comments elsewhere in the tree; I have acks for
    those where I could get them"

    * tag 'docs-4.12' of git://git.lwn.net/linux: (74 commits)
    docs: Fix a couple typos
    docs: Fix a spelling error in vfio-mediated-device.txt
    docs: Fix a spelling error in ioctl-number.txt
    MAINTAINERS: update file entry for HSI subsystem
    Documentation: allow installing man pages to a user defined directory
    Doc/PM: Sync with intel_powerclamp code behavior
    zr364xx.rst: usb/devices is now at /sys/kernel/debug/
    usb.rst: move documentation from proc_usb_info.txt to USB ReST book
    convert philips.txt to ReST and add to media docs
    docs-rst: usb: update old usbfs-related documentation
    arm: Documentation: update a path name
    docs: process/4.Coding.rst: Fix a couple of document refs
    docs-rst: fix usb cross-references
    usb: gadget.h: be consistent at kernel doc macros
    usb: composite.h: fix two warnings when building docs
    usb: get rid of some ReST doc build errors
    usb.rst: get rid of some Sphinx errors
    usb/URB.txt: convert to ReST and update it
    usb/persist.txt: convert to ReST and add to driver-api book
    usb/hotplug.txt: convert to ReST and add to driver-api book
    ...

    Linus Torvalds
     

02 May, 2017

1 commit

  • Pull uaccess unification updates from Al Viro:
    "This is the uaccess unification pile. It's _not_ the end of uaccess
    work, but the next batch of that will go into the next cycle. This one
    mostly takes copy_from_user() and friends out of arch/* and gets the
    zero-padding behaviour in sync for all architectures.

    Dealing with the nocache/writethrough mess is for the next cycle;
    fortunately, that's x86-only. Same for cleanups in iov_iter.c (I am
    sold on access_ok() in there, BTW; just not in this pile), same for
    reducing __copy_... callsites, strn*... stuff, etc. - there will be a
    pile about as large as this one in the next merge window.

    This one sat in -next for weeks. -3KLoC"

    * 'work.uaccess' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (96 commits)
    HAVE_ARCH_HARDENED_USERCOPY is unconditional now
    CONFIG_ARCH_HAS_RAW_COPY_USER is unconditional now
    m32r: switch to RAW_COPY_USER
    hexagon: switch to RAW_COPY_USER
    microblaze: switch to RAW_COPY_USER
    get rid of padding, switch to RAW_COPY_USER
    ia64: get rid of copy_in_user()
    ia64: sanitize __access_ok()
    ia64: get rid of 'segment' argument of __do_{get,put}_user()
    ia64: get rid of 'segment' argument of __{get,put}_user_check()
    ia64: add extable.h
    powerpc: get rid of zeroing, switch to RAW_COPY_USER
    esas2r: don't open-code memdup_user()
    alpha: fix stack smashing in old_adjtimex(2)
    don't open-code kernel_setsockopt()
    mips: switch to RAW_COPY_USER
    mips: get rid of tail-zeroing in primitives
    mips: make copy_from_user() zero tail explicitly
    mips: clean and reorder the forest of macros...
    mips: consolidate __invoke_... wrappers
    ...

    Linus Torvalds
     

27 Apr, 2017

2 commits


22 Apr, 2017

1 commit



18 Apr, 2017

4 commits

  • This fixes CVE-2017-7472.

    Running the following program as an unprivileged user exhausts kernel
    memory by leaking thread keyrings:

    #include

    int main()
    {
    for (;;)
    keyctl_set_reqkey_keyring(KEY_REQKEY_DEFL_THREAD_KEYRING);
    }

    Fix it by only creating a new thread keyring if there wasn't one before.
    To make things more consistent, make install_thread_keyring_to_cred()
    and install_process_keyring_to_cred() both return 0 if the corresponding
    keyring is already present.

    Fixes: d84f4f992cbd ("CRED: Inaugurate COW credentials")
    Cc: stable@vger.kernel.org # 2.6.29+
    Signed-off-by: Eric Biggers
    Signed-off-by: David Howells

    Eric Biggers
     
  • This fixes CVE-2017-6951.

    Userspace should not be able to do things with the "dead" key type as it
    doesn't have some of the helper functions set upon it that the kernel
    needs. Attempting to use it may cause the kernel to crash.

    Fix this by changing the name of the type to ".dead" so that it's rejected
    up front on userspace syscalls by key_get_type_from_user().

    Though this doesn't seem to affect recent kernels, it does affect older
    ones, certainly those prior to:

    commit c06cfb08b88dfbe13be44a69ae2fdc3a7c902d81
    Author: David Howells
    Date: Tue Sep 16 17:36:06 2014 +0100
    KEYS: Remove key_type::match in favour of overriding default by match_preparse

    which went in before 3.18-rc1.

    Signed-off-by: David Howells
    cc: stable@vger.kernel.org

    David Howells
     
  • This fixes CVE-2016-9604.

    Keyrings whose name begin with a '.' are special internal keyrings and so
    userspace isn't allowed to create keyrings by this name to prevent
    shadowing. However, the patch that added the guard didn't fix
    KEYCTL_JOIN_SESSION_KEYRING. Not only can that create dot-named keyrings,
    it can also subscribe to them as a session keyring if they grant SEARCH
    permission to the user.

    This, for example, allows a root process to set .builtin_trusted_keys as
    its session keyring, at which point it has full access because now the
    possessor permissions are added. This permits root to add extra public
    keys, thereby bypassing module verification.

    This also affects kexec and IMA.

    This can be tested by (as root):

    keyctl session .builtin_trusted_keys
    keyctl add user a a @s
    keyctl list @s

    which on my test box gives me:

    2 keys in keyring:
    180010936: ---lswrv 0 0 asymmetric: Build time autogenerated kernel key: ae3d4a31b82daa8e1a75b49dc2bba949fd992a05
    801382539: --alswrv 0 0 user: a

    Fix this by rejecting names beginning with a '.' in the keyctl.

    Signed-off-by: David Howells
    Acked-by: Mimi Zohar
    cc: linux-ima-devel@lists.sourceforge.net
    cc: stable@vger.kernel.org

    David Howells
     
  • …dhowells/linux-fs into next

    James Morris
     

12 Apr, 2017

1 commit


07 Apr, 2017

6 commits

  • The path_max parameter determines the max size of buffers allocated
    but it should not be setable at run time. If can be used to cause an
    oops

    root@ubuntu:~# echo 16777216 > /sys/module/apparmor/parameters/path_max
    root@ubuntu:~# cat /sys/module/apparmor/parameters/path_max
    Killed

    [ 122.141911] BUG: unable to handle kernel paging request at ffff880080945fff
    [ 122.143497] IP: [] d_absolute_path+0x44/0xa0
    [ 122.144742] PGD 220c067 PUD 0
    [ 122.145453] Oops: 0002 [#1] SMP
    [ 122.146204] Modules linked in: vmw_vsock_vmci_transport vsock ppdev vmw_balloon snd_ens1371 btusb snd_ac97_codec gameport snd_rawmidi btrtl snd_seq_device ac97_bus btbcm btintel snd_pcm input_leds bluetooth snd_timer snd joydev soundcore serio_raw coretemp shpchp nfit parport_pc i2c_piix4 8250_fintek vmw_vmci parport mac_hid ib_iser rdma_cm iw_cm ib_cm ib_sa ib_mad ib_core ib_addr iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi autofs4 btrfs raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor raid6_pq libcrc32c raid1 raid0 multipath linear hid_generic usbhid hid crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd vmwgfx psmouse mptspi ttm mptscsih drm_kms_helper mptbase syscopyarea scsi_transport_spi sysfillrect
    [ 122.163365] ahci sysimgblt e1000 fb_sys_fops libahci drm pata_acpi fjes
    [ 122.164747] CPU: 3 PID: 1501 Comm: bash Not tainted 4.4.0-59-generic #80-Ubuntu
    [ 122.166250] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 07/02/2015
    [ 122.168611] task: ffff88003496aa00 ti: ffff880076474000 task.ti: ffff880076474000
    [ 122.170018] RIP: 0010:[] [] d_absolute_path+0x44/0xa0
    [ 122.171525] RSP: 0018:ffff880076477b90 EFLAGS: 00010206
    [ 122.172462] RAX: ffff880080945fff RBX: 0000000000000000 RCX: 0000000001000000
    [ 122.173709] RDX: 0000000000ffffff RSI: ffff880080946000 RDI: ffff8800348a1010
    [ 122.174978] RBP: ffff880076477bb8 R08: ffff880076477c80 R09: 0000000000000000
    [ 122.176227] R10: 00007ffffffff000 R11: ffff88007f946000 R12: ffff88007f946000
    [ 122.177496] R13: ffff880076477c80 R14: ffff8800348a1010 R15: ffff8800348a2400
    [ 122.178745] FS: 00007fd459eb4700(0000) GS:ffff88007b6c0000(0000) knlGS:0000000000000000
    [ 122.180176] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 122.181186] CR2: ffff880080945fff CR3: 0000000073422000 CR4: 00000000001406e0
    [ 122.182469] Stack:
    [ 122.182843] 00ffffff00000001 ffff880080946000 0000000000000000 0000000000000000
    [ 122.184409] 00000000570f789c ffff880076477c30 ffffffff81385671 ffff88007a2e7a58
    [ 122.185810] 0000000000000000 ffff880076477c88 01000000008a1000 0000000000000000
    [ 122.187231] Call Trace:
    [ 122.187680] [] aa_path_name+0x81/0x370
    [ 122.188637] [] profile_transition+0xbd/0xb80
    [ 122.190181] [] ? zone_statistics+0x7c/0xa0
    [ 122.191674] [] apparmor_bprm_set_creds+0x9b0/0xac0
    [ 122.193288] [] ? ext4_xattr_get+0x81/0x220
    [ 122.194793] [] ? ext4_xattr_security_get+0x1c/0x30
    [ 122.196392] [] ? get_vfs_caps_from_disk+0x69/0x110
    [ 122.198004] [] ? mnt_may_suid+0x3f/0x50
    [ 122.199737] [] ? cap_bprm_set_creds+0xa3/0x600
    [ 122.201377] [] security_bprm_set_creds+0x33/0x50
    [ 122.203024] [] prepare_binprm+0x85/0x190
    [ 122.204515] [] do_execveat_common.isra.33+0x485/0x710
    [ 122.206200] [] SyS_execve+0x3a/0x50
    [ 122.207615] [] stub_execve+0x5/0x5
    [ 122.208978] [] ? entry_SYSCALL_64_fastpath+0x16/0x71
    [ 122.210615] Code: f8 31 c0 48 63 c2 83 ea 01 48 c7 45 e8 00 00 00 00 48 01 c6 85 d2 48 c7 45 f0 00 00 00 00 48 89 75 e0 89 55 dc 78 0c 48 8d 46 ff 46 ff 00 48 89 45 e0 48 8d 55 e0 48 8d 4d dc 48 8d 75 e8 e8
    [ 122.217320] RIP [] d_absolute_path+0x44/0xa0
    [ 122.218860] RSP
    [ 122.219919] CR2: ffff880080945fff
    [ 122.220936] ---[ end trace 506cdbd85eb6c55e ]---

    Reported-by: Tetsuo Handa
    Signed-off-by: John Johansen
    Signed-off-by: James Morris

    John Johansen
     
  • Boot parameters are written before apparmor is ready to answer whether
    the user is policy_view_capable(). Setting the parameters at boot results
    in an oops and failure to boot. Setting the parameters at boot is
    obviously allowed so skip the permission check when apparmor is not
    initialized.

    While we are at it move the more complicated check to last.

    Signed-off-by: John Johansen
    Signed-off-by: James Morris

    John Johansen
     
  • Once the loop on lines 836-853 is complete and exits normally, ent is a
    pointer to the dummy list head value. The derefernces accessible from eg
    the goto fail on line 860 or the various goto fail_lock's afterwards thus
    seem incorrect.

    Reported-by: Julia Lawall
    Signed-off-by: John Johansen
    Signed-off-by: James Morris

    John Johansen
     
  • When building the kernel with clang, the compiler fails to build
    security/apparmor/crypto.c with the following error:

    security/apparmor/crypto.c:36:8: error: fields must have a constant
    size: 'variable length array in structure' extension will never be
    supported
    char ctx[crypto_shash_descsize(apparmor_tfm)];
    ^

    Since commit a0a77af14117 ("crypto: LLVMLinux: Add macro to remove use
    of VLAIS in crypto code"), include/crypto/hash.h defines
    SHASH_DESC_ON_STACK to work around this issue. Use it in aa_calc_hash()
    and aa_calc_profile_hash().

    Signed-off-by: Nicolas Iooss
    Signed-off-by: John Johansen
    Signed-off-by: James Morris

    Nicolas Iooss
     
  • Add the _APPARMOR substring to reference the intended Kconfig option.

    Signed-off-by: Valentin Rothberg
    Signed-off-by: John Johansen
    Signed-off-by: James Morris

    Valentin Rothberg
     
  • security/apparmor/lib.c:132:9-10: WARNING: return of 0/1 in function 'aa_policy_init' with return type bool

    Return statements in functions returning bool should use
    true/false instead of 1/0.
    Generated by: scripts/coccinelle/misc/boolreturn.cocci

    Signed-off-by: Fengguang Wu
    Signed-off-by: John Johansen
    Signed-off-by: James Morris

    kbuild test robot
     

05 Apr, 2017

6 commits

  • Since all callers of smk_netlbl_mls() are GFP_KERNEL context
    (smk_set_cipso() calls memdup_user_nul(), init_smk_fs() calls
    __kernfs_new_node(), smk_import_entry() calls kzalloc(GFP_KERNEL)),
    it is safe to use GFP_KERNEL from netlbl_catmap_setbit().

    Signed-off-by: Tetsuo Handa
    Signed-off-by: Casey Schaufler

    Tetsuo Handa
     
  • smack_parse_opts_str() calls kfree(opts->mnt_opts) when kcalloc() for
    opts->mnt_opts_flags failed. But it should not have called it because
    security_free_mnt_opts() will call kfree(opts->mnt_opts).

    Signed-off-by: Tetsuo Handa
    Signed-off-by: Casey Schaufler
    fixes: 3bf2789cad9e6573 ("smack: allow mount opts setting over filesystems with binary mount data")
    Cc: Vivek Trivedi
    Cc: Amit Sahrawat
    Cc: Casey Schaufler

    Tetsuo Handa
     
  • SP800-56A defines the use of DH with key derivation function based on a
    counter. The input to the KDF is defined as (DH shared secret || other
    information). The value for the "other information" is to be provided by
    the caller.

    The KDF is implemented using the hash support from the kernel crypto API.
    The implementation uses the symmetric hash support as the input to the
    hash operation is usually very small. The caller is allowed to specify
    the hash name that he wants to use to derive the key material allowing
    the use of all supported hashes provided with the kernel crypto API.

    As the KDF implements the proper truncation of the DH shared secret to
    the requested size, this patch fills the caller buffer up to its size.

    The patch is tested with a new test added to the keyutils user space
    code which uses a CAVS test vector testing the compliance with
    SP800-56A.

    Signed-off-by: Stephan Mueller
    Signed-off-by: David Howells

    Stephan Mueller
     
  • Keyrings recently gained restrict_link capabilities that allow
    individual keys to be validated prior to linking. This functionality
    was only available using internal kernel APIs.

    With the KEYCTL_RESTRICT_KEYRING command existing keyrings can be
    configured to check the content of keys before they are linked, and
    then allow or disallow linkage of that key to the keyring.

    To restrict a keyring, call:

    keyctl(KEYCTL_RESTRICT_KEYRING, key_serial_t keyring, const char *type,
    const char *restriction)

    where 'type' is the name of a registered key type and 'restriction' is a
    string describing how key linkage is to be restricted. The restriction
    option syntax is specific to each key type.

    Signed-off-by: Mat Martineau

    Mat Martineau
     
  • The keyring restrict callback was sometimes called before
    __key_link_begin and sometimes after, which meant that the keyring
    semaphores were not always held during the restrict callback.

    If the semaphores are consistently acquired before checking link
    restrictions, keyring contents cannot be changed after the restrict
    check is complete but before the evaluated key is linked to the keyring.

    Signed-off-by: Mat Martineau

    Mat Martineau
     
  • Replace struct key's restrict_link function pointer with a pointer to
    the new struct key_restriction. The structure contains pointers to the
    restriction function as well as relevant data for evaluating the
    restriction.

    The garbage collector checks restrict_link->keytype when key types are
    unregistered. Restrictions involving a removed key type are converted
    to use restrict_link_reject so that restrictions cannot be removed by
    unregistering key types.

    Signed-off-by: Mat Martineau

    Mat Martineau
     

04 Apr, 2017

2 commits

  • The first argument to the restrict_link_func_t functions was a keyring
    pointer. These functions are called by the key subsystem with this
    argument set to the destination keyring, but restrict_link_by_signature
    expects a pointer to the relevant trusted keyring.

    Restrict functions may need something other than a single struct key
    pointer to allow or reject key linkage, so the data used to make that
    decision (such as the trust keyring) is moved to a new, fourth
    argument. The first argument is now always the destination keyring.

    Signed-off-by: Mat Martineau

    Mat Martineau
     
  • This pointer type needs to be returned from a lookup function, and
    without a typedef the syntax gets cumbersome.

    Signed-off-by: Mat Martineau

    Mat Martineau
     

03 Apr, 2017

3 commits

  • refcount_t type and corresponding API should be
    used instead of atomic_t when the variable is used as
    a reference counter. This allows to avoid accidental
    refcounter overflows that might lead to use-after-free
    situations.

    Signed-off-by: Elena Reshetova
    Signed-off-by: Hans Liljestrand
    Signed-off-by: Kees Cook
    Signed-off-by: David Windsor
    Acked-by: David Howells
    Signed-off-by: James Morris

    Elena Reshetova
     
  • refcount_t type and corresponding API should be
    used instead of atomic_t when the variable is used as
    a reference counter. This allows to avoid accidental
    refcounter overflows that might lead to use-after-free
    situations.

    Signed-off-by: Elena Reshetova
    Signed-off-by: Hans Liljestrand
    Signed-off-by: Kees Cook
    Signed-off-by: David Windsor
    Acked-by: David Howells
    Signed-off-by: James Morris

    Elena Reshetova
     
  • ./lib/string.c:134: WARNING: Inline emphasis start-string without end-string.
    ./mm/filemap.c:522: WARNING: Inline interpreted text or phrase reference start-string without end-string.
    ./mm/filemap.c:1283: ERROR: Unexpected indentation.
    ./mm/filemap.c:3003: WARNING: Inline interpreted text or phrase reference start-string without end-string.
    ./mm/vmalloc.c:1544: WARNING: Inline emphasis start-string without end-string.
    ./mm/page_alloc.c:4245: ERROR: Unexpected indentation.
    ./ipc/util.c:676: ERROR: Unexpected indentation.
    ./drivers/pci/irq.c:35: WARNING: Block quote ends without a blank line; unexpected unindent.
    ./security/security.c:109: ERROR: Unexpected indentation.
    ./security/security.c:110: WARNING: Definition list ends without a blank line; unexpected unindent.
    ./block/genhd.c:275: WARNING: Inline strong start-string without end-string.
    ./block/genhd.c:283: WARNING: Inline strong start-string without end-string.
    ./include/linux/clk.h:134: WARNING: Inline emphasis start-string without end-string.
    ./include/linux/clk.h:134: WARNING: Inline emphasis start-string without end-string.
    ./ipc/util.c:477: ERROR: Unknown target name: "s".

    Signed-off-by: Mauro Carvalho Chehab
    Acked-by: Bjorn Helgaas
    Signed-off-by: Jonathan Corbet

    mchehab@s-opensource.com
     

01 Apr, 2017

1 commit

  • We removed this initialization as a cleanup but it is probably required.

    The concern is that "nel" can be zero. I'm not an expert on SELinux
    code but I think it looks possible to write an SELinux policy which
    triggers this bug. GCC doesn't catch this, but my static checker does.

    Fixes: 9c312e79d6af ("selinux: Delete an unnecessary variable initialisation in range_read()")
    Signed-off-by: Dan Carpenter
    Acked-by: Stephen Smalley
    Signed-off-by: Paul Moore

    Dan Carpenter
     

30 Mar, 2017

2 commits

  • Prepare to mark sensitive kernel structures for randomization by making
    sure they're using designated initializers. These were identified during
    allyesconfig builds of x86, arm, and arm64, with most initializer fixes
    extracted from grsecurity.

    Signed-off-by: Kees Cook
    Acked-by: Tetsuo Handa
    Signed-off-by: James Morris

    Kees Cook
     
  • 'perms' will never be NULL since it isn't a plain pointer but an array
    of u32 values.

    This fixes the following warning when building with clang:

    security/selinux/ss/services.c:158:16: error: address of array
    'p_in->perms' will always evaluate to 'true'
    [-Werror,-Wpointer-bool-conversion]
    while (p_in->perms && p_in->perms[k]) {

    Signed-off-by: Matthias Kaehlcke
    Signed-off-by: Paul Moore

    Matthias Kaehlcke
     

29 Mar, 2017

1 commit