20 May, 2016

5 commits

  • Lots of code does

    node = next_node(node, XXX);
    if (node == MAX_NUMNODES)
    node = first_node(XXX);

    so create next_node_in() to do this and use it in various places.

    [mhocko@suse.com: use next_node_in() helper]
    Acked-by: Vlastimil Babka
    Acked-by: Michal Hocko
    Signed-off-by: Michal Hocko
    Cc: Xishi Qiu
    Cc: Joonsoo Kim
    Cc: David Rientjes
    Cc: Naoya Horiguchi
    Cc: Laura Abbott
    Cc: Hui Zhu
    Cc: Wang Xiaoqiang
    Cc: Johannes Weiner
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     
  • When activating a static object we need make sure that the object is
    tracked in the object tracker. If it is a non-static object then the
    activation is illegal.

    In previous implementation, each subsystem need take care of this in
    their fixup callbacks. Actually we can put it into debugobjects core.
    Thus we can save duplicated code, and have *pure* fixup callbacks.

    To achieve this, a new callback "is_static_object" is introduced to let
    the type specific code decide whether a object is static or not. If
    yes, we take it into object tracker, otherwise give warning and invoke
    fixup callback.

    This change has paassed debugobjects selftest, and I also do some test
    with all debugobjects supports enabled.

    At last, I have a concern about the fixups that can it change the object
    which is in incorrect state on fixup? Because the 'addr' may not point
    to any valid object if a non-static object is not tracked. Then Change
    such object can overwrite someone's memory and cause unexpected
    behaviour. For example, the timer_fixup_activate bind timer to function
    stub_timer.

    Link: http://lkml.kernel.org/r/1462576157-14539-1-git-send-email-changbin.du@intel.com
    [changbin.du@intel.com: improve code comments where invoke the new is_static_object callback]
    Link: http://lkml.kernel.org/r/1462777431-8171-1-git-send-email-changbin.du@intel.com
    Signed-off-by: Du, Changbin
    Cc: Jonathan Corbet
    Cc: Josh Triplett
    Cc: Steven Rostedt
    Cc: Thomas Gleixner
    Cc: Tejun Heo
    Cc: Christian Borntraeger
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Du, Changbin
     
  • Update the return type to use bool instead of int, corresponding to
    cheange (debugobjects: make fixup functions return bool instead of int).

    Signed-off-by: Du, Changbin
    Cc: Jonathan Corbet
    Cc: Josh Triplett
    Cc: Steven Rostedt
    Cc: Thomas Gleixner
    Cc: Tejun Heo
    Cc: Christian Borntraeger
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Du, Changbin
     
  • If debug_object_fixup() return non-zero when problem has been fixed.
    But the code got it backwards, it taks 0 as fixup successfully. So fix
    it.

    Signed-off-by: Du, Changbin
    Cc: Jonathan Corbet
    Cc: Josh Triplett
    Cc: Steven Rostedt
    Cc: Thomas Gleixner
    Cc: Tejun Heo
    Cc: Christian Borntraeger
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Du, Changbin
     
  • I am going to introduce debugobjects infrastructure to USB subsystem.
    But before this, I found the code of debugobjects could be improved.
    This patchset will make fixup functions return bool type instead of int.
    Because fixup only need report success or no. boolean is the 'real'
    type.

    This patch (of 7):

    The object debugging infrastructure core provides some fixup callbacks
    for the subsystem who use it. These callbacks are called from the debug
    code whenever a problem in debug_object_init is detected. And
    debugobjects core suppose them returns 1 when the fixup was successful,
    otherwise 0. So the return type is boolean.

    A bad thing is that debug_object_fixup use the return value for
    arithmetic operation. It confused me that what is the reall return
    type.

    Reading over the whole code, I found some place do use the return value
    incorrectly(see next patch). So why use bool type instead?

    Signed-off-by: Du, Changbin
    Cc: Jonathan Corbet
    Cc: Josh Triplett
    Cc: Steven Rostedt
    Cc: Thomas Gleixner
    Cc: Tejun Heo
    Cc: Christian Borntraeger
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Du, Changbin
     

19 May, 2016

2 commits

  • Pull SCSI updates from James Bottomley:
    "First round of SCSI updates for the 4.6+ merge window.

    This batch includes the usual quota of driver updates (bnx2fc, mp3sas,
    hpsa, ncr5380, lpfc, hisi_sas, snic, aacraid, megaraid_sas). There's
    also a multiqueue update for scsi_debug, assorted bug fixes and a few
    other minor updates (refactor of scsi_sg_pools into generic code, alua
    and VPD updates, and struct timeval conversions)"

    * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (138 commits)
    mpt3sas: Used "synchronize_irq()"API to synchronize timed-out IO & TMs
    mpt3sas: Set maximum transfer length per IO to 4MB for VDs
    mpt3sas: Updating mpt3sas driver version to 13.100.00.00
    mpt3sas: Fix initial Reference tag field for 4K PI drives.
    mpt3sas: Handle active cable exception event
    mpt3sas: Update MPI header to 2.00.42
    Revert "lpfc: Delete unnecessary checks before the function call mempool_destroy"
    eata_pio: missing break statement
    hpsa: Fix type ZBC conditional checks
    scsi_lib: Decode T10 vendor IDs
    scsi_dh_alua: do not fail for unknown VPD identification
    scsi_debug: use locally assigned naa
    scsi_debug: uuid for lu name
    scsi_debug: vpd and mode page work
    scsi_debug: add multiple queue support
    bfa: fix bfa_fcb_itnim_alloc() error handling
    megaraid_sas: Downgrade two success messages to info
    cxlflash: Fix to resolve dead-lock during EEH recovery
    scsi_debug: rework resp_report_luns
    scsi_debug: use pdt constants
    ...

    Linus Torvalds
     
  • Pull iov_iter cleanups from Al Viro.

    * 'work.iov_iter' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    fold checks into iterate_and_advance()
    rw_verify_area(): saner calling conventions
    aio: remove a pointless assignment

    Linus Torvalds
     

18 May, 2016

3 commits

  • James Bottomley
     
  • Pull networking updates from David Miller:
    "Highlights:

    1) Support SPI based w5100 devices, from Akinobu Mita.

    2) Partial Segmentation Offload, from Alexander Duyck.

    3) Add GMAC4 support to stmmac driver, from Alexandre TORGUE.

    4) Allow cls_flower stats offload, from Amir Vadai.

    5) Implement bpf blinding, from Daniel Borkmann.

    6) Optimize _ASYNC_ bit twiddling on sockets, unless the socket is
    actually using FASYNC these atomics are superfluous. From Eric
    Dumazet.

    7) Run TCP more preemptibly, also from Eric Dumazet.

    8) Support LED blinking, EEPROM dumps, and rxvlan offloading in mlx5e
    driver, from Gal Pressman.

    9) Allow creating ppp devices via rtnetlink, from Guillaume Nault.

    10) Improve BPF usage documentation, from Jesper Dangaard Brouer.

    11) Support tunneling offloads in qed, from Manish Chopra.

    12) aRFS offloading in mlx5e, from Maor Gottlieb.

    13) Add RFS and RPS support to SCTP protocol, from Marcelo Ricardo
    Leitner.

    14) Add MSG_EOR support to TCP, this allows controlling packet
    coalescing on application record boundaries for more accurate
    socket timestamp sampling. From Martin KaFai Lau.

    15) Fix alignment of 64-bit netlink attributes across the board, from
    Nicolas Dichtel.

    16) Per-vlan stats in bridging, from Nikolay Aleksandrov.

    17) Several conversions of drivers to ethtool ksettings, from Philippe
    Reynes.

    18) Checksum neutral ILA in ipv6, from Tom Herbert.

    19) Factorize all of the various marvell dsa drivers into one, from
    Vivien Didelot

    20) Add VF support to qed driver, from Yuval Mintz"

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1649 commits)
    Revert "phy dp83867: Fix compilation with CONFIG_OF_MDIO=m"
    Revert "phy dp83867: Make rgmii parameters optional"
    r8169: default to 64-bit DMA on recent PCIe chips
    phy dp83867: Make rgmii parameters optional
    phy dp83867: Fix compilation with CONFIG_OF_MDIO=m
    bpf: arm64: remove callee-save registers use for tmp registers
    asix: Fix offset calculation in asix_rx_fixup() causing slow transmissions
    switchdev: pass pointer to fib_info instead of copy
    net_sched: close another race condition in tcf_mirred_release()
    tipc: fix nametable publication field in nl compat
    drivers: net: Don't print unpopulated net_device name
    qed: add support for dcbx.
    ravb: Add missing free_irq() calls to ravb_close()
    qed: Remove a stray tab
    net: ethernet: fec-mpc52xx: use phy_ethtool_{get|set}_link_ksettings
    net: ethernet: fec-mpc52xx: use phydev from struct net_device
    bpf, doc: fix typo on bpf_asm descriptions
    stmmac: hardware TX COE doesn't work when force_thresh_dma_mode is set
    net: ethernet: fs-enet: use phy_ethtool_{get|set}_link_ksettings
    net: ethernet: fs-enet: use phydev from struct net_device
    ...

    Linus Torvalds
     
  • Pull crypto update from Herbert Xu:
    "API:

    - Crypto self tests can now be disabled at boot/run time.
    - Add async support to algif_aead.

    Algorithms:

    - A large number of fixes to MPI from Nicolai Stange.
    - Performance improvement for HMAC DRBG.

    Drivers:

    - Use generic crypto engine in omap-des.
    - Merge ppc4xx-rng and crypto4xx drivers.
    - Fix lockups in sun4i-ss driver by disabling IRQs.
    - Add DMA engine support to ccp.
    - Reenable talitos hash algorithms.
    - Add support for Hisilicon SoC RNG.
    - Add basic crypto driver for the MXC SCC.

    Others:

    - Do not allocate crypto hash tfm in NORECLAIM context in ecryptfs"

    * 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (77 commits)
    crypto: qat - change the adf_ctl_stop_devices to void
    crypto: caam - fix caam_jr_alloc() ret code
    crypto: vmx - comply with ABIs that specify vrsave as reserved.
    crypto: testmgr - Add a flag allowing the self-tests to be disabled at runtime.
    crypto: ccp - constify ccp_actions structure
    crypto: marvell/cesa - Use dma_pool_zalloc
    crypto: qat - make adf_vf_isr.c dependant on IOV config
    crypto: qat - Fix typo in comments
    lib: asn1_decoder - add MODULE_LICENSE("GPL")
    crypto: omap-sham - Use dma_request_chan() for requesting DMA channel
    crypto: omap-des - Use dma_request_chan() for requesting DMA channel
    crypto: omap-aes - Use dma_request_chan() for requesting DMA channel
    crypto: omap-des - Integrate with the crypto engine framework
    crypto: s5p-sss - fix incorrect usage of scatterlists api
    crypto: s5p-sss - Fix missed interrupts when working with 8 kB blocks
    crypto: s5p-sss - Use common BIT macro
    crypto: mxc-scc - fix unwinding in mxc_scc_crypto_register()
    crypto: mxc-scc - signedness bugs in mxc_scc_ablkcipher_req_init()
    crypto: talitos - fix ahash algorithms registration
    crypto: ccp - Ensure all dependencies are specified
    ...

    Linus Torvalds
     

17 May, 2016

3 commits

  • Pull RCU updates from Ingo Molnar:
    "The main changes are:

    - Documentation updates, including fixes to the design-level
    requirements documentation and a fixed version of the design-level
    data-structure documentation. These fixes include removing
    cartoons and getting rid of the html/htmlx duplication.

    - Further improvements to the new-age expedited grace periods.

    - Miscellaneous fixes.

    - Torture-test changes, including a new rcuperf module for measuring
    RCU grace-period performance and scalability, which is useful for
    the expedited-grace-period changes"

    * 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (56 commits)
    rcutorture: Add boot-time adjustment of leaf fanout
    rcutorture: Add irqs-disabled test for call_rcu()
    rcutorture: Dump trace buffer upon shutdown
    rcutorture: Don't rebuild identical kernel
    rcutorture: Add OS-jitter capability
    documentation: Add documentation for RCU's major data structures
    rcutorture: Convert test duration to seconds early
    torture: Kill qemu, not parent process
    torture: Clarify refusal to run more than one torture test
    rcutorture: Consider FROZEN hotplug notifier transitions
    rcutorture: Remove redundant initialization to zero
    rcuperf: Do not wake up shutdown wait queue if "shutdown" is false.
    rcutorture: Add largish-system rcuperf scenario
    rcutorture: Avoid RCU CPU stall warning and RT throttling
    rcutorture: Add rcuperf holdoff boot parameter to reduce interference
    rcutorture: Make scripts analyze rcuperf trace data, if present
    rcutorture: Make rcuperf collect expedited event-trace data
    rcutorture: Print measure of batching efficiency
    rcutorture: Set rcuperf writer kthreads to real-time priority
    rcutorture: Bind rcuperf reader/writer kthreads to CPUs
    ...

    Linus Torvalds
     
  • Pull core/lib update from Ingo Molnar:
    "This contains a single commit that removes an unused facility that the
    scheduler used to make use of"

    * 'core-lib-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    lib/proportions: Remove unused code

    Linus Torvalds
     
  • Since the blinding is strictly only called from inside eBPF JITs,
    we need to change signatures for bpf_int_jit_compile() and
    bpf_prog_select_runtime() first in order to prepare that the
    eBPF program we're dealing with can change underneath. Hence,
    for call sites, we need to return the latest prog. No functional
    change in this patch.

    Signed-off-by: Daniel Borkmann
    Acked-by: Alexei Starovoitov
    Signed-off-by: David S. Miller

    Daniel Borkmann
     

16 May, 2016

1 commit

  • The nf_conntrack_core.c fix in 'net' is not relevant in 'net-next'
    because we no longer have a per-netns conntrack hash.

    The ip_gre.c conflict as well as the iwlwifi ones were cases of
    overlapping changes.

    Conflicts:
    drivers/net/wireless/intel/iwlwifi/mvm/tx.c
    net/ipv4/ip_gre.c
    net/netfilter/nf_conntrack_core.c

    Signed-off-by: David S. Miller

    David S. Miller
     

15 May, 2016

1 commit

  • Pull vfs fixes from Al Viro:
    "Overlayfs fixes from Miklos, assorted fixes from me.

    Stable fodder of varying severity, all sat in -next for a while"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    ovl: ignore permissions on underlying lookup
    vfs: add lookup_hash() helper
    vfs: rename: check backing inode being equal
    vfs: add vfs_select_inode() helper
    get_rock_ridge_filename(): handle malformed NM entries
    ecryptfs: fix handling of directory opening
    atomic_open(): fix the handling of create_error
    fix the copy vs. map logics in blk_rq_map_user_iov()
    do_splice_to(): cap the size before passing to ->splice_read()

    Linus Torvalds
     

12 May, 2016

1 commit

  • This fixes CVE-2016-0758.

    In the ASN.1 decoder, when the length field of an ASN.1 value is extracted,
    it isn't validated against the remaining amount of data before being added
    to the cursor. With a sufficiently large size indicated, the check:

    datalen - dp < 2

    may then fail due to integer overflow.

    Fix this by checking the length indicated against the amount of remaining
    data in both places a definite length is determined.

    Whilst we're at it, make the following changes:

    (1) Check the maximum size of extended length does not exceed the capacity
    of the variable it's being stored in (len) rather than the type that
    variable is assumed to be (size_t).

    (2) Compare the EOC tag to the symbolic constant ASN1_EOC rather than the
    integer 0.

    (3) To reduce confusion, move the initialisation of len outside of:

    for (len = 0; n > 0; n--) {

    since it doesn't have anything to do with the loop counter n.

    Signed-off-by: David Howells
    Reviewed-by: Mimi Zohar
    Acked-by: David Woodhouse
    Acked-by: Peter Jones

    David Howells
     

11 May, 2016

1 commit


10 May, 2016

2 commits

  • In netdevice.h we removed the structure in net-next that is being
    changes in 'net'. In macsec.c and rtnetlink.c we have overlaps
    between fixes in 'net' and the u64 attribute changes in 'net-next'.

    The mlx5 conflicts have to do with vxlan support dependencies.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • they are open-coded in all users except iov_iter_advance(), and there
    they wouldn't be a bad idea either - as it is, iov_iter_advance(i, 0)
    ends up dereferencing potentially past the end of iovec array. It
    doesn't do anything with the value it reads, and very unlikely to
    trigger an oops on dereference, but it is not impossible.

    Reported-by: Jiri Slaby
    Reported-by: Takashi Iwai
    Signed-off-by: Al Viro

    Al Viro
     

06 May, 2016

1 commit

  • Recently, we allow to save the stacktrace whose hashed value is 0. It
    causes the problem that stackdepot could return 0 even if in success.
    User of stackdepot cannot distinguish whether it is success or not so we
    need to solve this problem. In this patch, 1 bit are added to handle
    and make valid handle none 0 by setting this bit. After that, valid
    handle will not be 0 and 0 handle will represent failure correctly.

    Fixes: 33334e25769c ("lib/stackdepot.c: allow the stack trace hash to be zero")
    Link: http://lkml.kernel.org/r/1462252403-1106-1-git-send-email-iamjoonsoo.kim@lge.com
    Signed-off-by: Joonsoo Kim
    Cc: Alexander Potapenko
    Cc: Andrey Ryabinin
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Joonsoo Kim
     

04 May, 2016

1 commit


03 May, 2016

1 commit

  • A kernel taint results when loading the rsa_generic module:

    root@(none):~# modprobe rsa_generic
    asn1_decoder: module license 'unspecified' taints kernel.
    Disabling lock debugging due to kernel taint

    "Tainting" of the kernel is (usually) a way of indicating that
    a proprietary module has been inserted, which is not the case here.

    Signed-off-by: Tudor Ambarus
    Signed-off-by: Herbert Xu

    Tudor Ambarus
     

29 Apr, 2016

1 commit

  • Do not bail out from depot_save_stack() if the stack trace has zero hash.
    Initially depot_save_stack() silently dropped stack traces with zero
    hashes, however there's actually no point in reserving this zero value.

    Reported-by: Joonsoo Kim
    Signed-off-by: Alexander Potapenko
    Acked-by: Andrey Ryabinin
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexander Potapenko
     

27 Apr, 2016

1 commit

  • …k/linux-rcu into core/rcu

    Pull RCU updates from Paul E. McKenney:

    * Documentation updates, including fixes to the design-level
    requirements documentation and a fixed version of the design-level
    data-structure documentation. These fixes include removing
    cartoons and getting rid of the html/htmlx duplication.

    * Further improvements to the new-age expedited grace periods.

    * Miscellaneous fixes.

    * Torture-test changes, including a new rcuperf module for measuring
    RCU grace-period performance and scalability, which is useful for
    the expedited-grace-period changes.

    Signed-off-by: Ingo Molnar <mingo@kernel.org>

    Ingo Molnar
     

24 Apr, 2016

2 commits


22 Apr, 2016

1 commit


17 Apr, 2016

1 commit

  • Pull misc fixes from Greg KH:
    "Here are three small fixes for 4.6-rc4.

    Two fix up some lz4 issues with big endian systems, and the remaining
    one resolves a minor debugfs issue that was reported.

    All have been in linux-next with no reported issues"

    * tag 'driver-core-4.6-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core:
    lib: lz4: cleanup unaligned access efficiency detection
    lib: lz4: fixed zram with lz4 on big endian machines
    debugfs: Make automount point inodes permanently empty

    Linus Torvalds
     

16 Apr, 2016

1 commit


14 Apr, 2016

2 commits

  • These identifiers are bogus. The interested architectures should define
    HAVE_EFFICIENT_UNALIGNED_ACCESS whenever relevant to do so. If this
    isn't true for some arch, it should be fixed in the arch definition.

    Signed-off-by: Rui Salvaterra
    Reviewed-by: Sergey Senozhatsky
    Signed-off-by: Greg Kroah-Hartman

    Rui Salvaterra
     
  • Based on Sergey's test patch [1], this fixes zram with lz4 compression
    on big endian cpus.

    Note that the 64-bit preprocessor test is not a cleanup, it's part of
    the fix, since those identifiers are bogus (for example, __ppc64__
    isn't defined anywhere else in the kernel, which means we'd fall into
    the 32-bit definitions on ppc64).

    Tested on ppc64 with no regression on x86_64.

    [1] http://marc.info/?l=linux-kernel&m=145994470805853&w=4

    Cc: stable@vger.kernel.org
    Suggested-by: Sergey Senozhatsky
    Signed-off-by: Rui Salvaterra
    Reviewed-by: Sergey Senozhatsky
    Signed-off-by: Greg Kroah-Hartman

    Rui Salvaterra
     

13 Apr, 2016

1 commit


10 Apr, 2016

1 commit


09 Apr, 2016

1 commit


07 Apr, 2016

4 commits

  • Some of these tests proved useful with the powerpc eBPF JIT port due to
    sign-extended 16-bit immediate loads. Though some of these aspects get
    covered in other tests, it is better to have explicit tests so as to
    quickly tag the precise problem.

    Cc: Alexei Starovoitov
    Cc: Daniel Borkmann
    Cc: "David S. Miller"
    Cc: Ananth N Mavinakayanahalli
    Cc: Michael Ellerman
    Cc: Paul Mackerras
    Signed-off-by: Naveen N. Rao
    Acked-by: Alexei Starovoitov
    Acked-by: Daniel Borkmann
    Signed-off-by: David S. Miller

    Naveen N. Rao
     
  • BPF_ALU32 and BPF_ALU64 tests for adding two 32-bit values that results in
    32-bit overflow.

    Cc: Alexei Starovoitov
    Cc: Daniel Borkmann
    Cc: "David S. Miller"
    Cc: Ananth N Mavinakayanahalli
    Cc: Michael Ellerman
    Cc: Paul Mackerras
    Signed-off-by: Naveen N. Rao
    Acked-by: Alexei Starovoitov
    Acked-by: Daniel Borkmann
    Signed-off-by: David S. Miller

    Naveen N. Rao
     
  • Unsigned Jump-if-Greater-Than.

    Cc: Alexei Starovoitov
    Cc: Daniel Borkmann
    Cc: "David S. Miller"
    Cc: Ananth N Mavinakayanahalli
    Cc: Michael Ellerman
    Cc: Paul Mackerras
    Signed-off-by: Naveen N. Rao
    Acked-by: Alexei Starovoitov
    Acked-by: Daniel Borkmann
    Signed-off-by: David S. Miller

    Naveen N. Rao
     
  • JMP_JSET tests incorrectly used BPF_JNE. Fix the same.

    Cc: Alexei Starovoitov
    Cc: Daniel Borkmann
    Cc: "David S. Miller"
    Cc: Ananth N Mavinakayanahalli
    Cc: Michael Ellerman
    Cc: Paul Mackerras
    Signed-off-by: Naveen N. Rao
    Acked-by: Alexei Starovoitov
    Acked-by: Daniel Borkmann
    Signed-off-by: David S. Miller

    Naveen N. Rao
     

06 Apr, 2016

1 commit

  • Changes since V1: fixed the description and added KASan warning.

    In assoc_array_insert_into_terminal_node(), we call the
    compare_object() method on all non-empty slots, even when they're
    not leaves, passing a pointer to an unexpected structure to
    compare_object(). Currently it causes an out-of-bound read access
    in keyring_compare_object detected by KASan (see below). The issue
    is easily reproduced with keyutils testsuite.
    Only call compare_object() when the slot is a leave.

    KASan warning:
    ==================================================================
    BUG: KASAN: slab-out-of-bounds in keyring_compare_object+0x213/0x240 at addr ffff880060a6f838
    Read of size 8 by task keyctl/1655
    =============================================================================
    BUG kmalloc-192 (Not tainted): kasan: bad access detected
    -----------------------------------------------------------------------------

    Disabling lock debugging due to kernel taint
    INFO: Allocated in assoc_array_insert+0xfd0/0x3a60 age=69 cpu=1 pid=1647
    ___slab_alloc+0x563/0x5c0
    __slab_alloc+0x51/0x90
    kmem_cache_alloc_trace+0x263/0x300
    assoc_array_insert+0xfd0/0x3a60
    __key_link_begin+0xfc/0x270
    key_create_or_update+0x459/0xaf0
    SyS_add_key+0x1ba/0x350
    entry_SYSCALL_64_fastpath+0x12/0x76
    INFO: Slab 0xffffea0001829b80 objects=16 used=8 fp=0xffff880060a6f550 flags=0x3fff8000004080
    INFO: Object 0xffff880060a6f740 @offset=5952 fp=0xffff880060a6e5d1

    Bytes b4 ffff880060a6f730: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    Object ffff880060a6f740: d1 e5 a6 60 00 88 ff ff 0e 00 00 00 00 00 00 00 ...`............
    Object ffff880060a6f750: 02 cf 8e 60 00 88 ff ff 02 c0 8e 60 00 88 ff ff ...`.......`....
    Object ffff880060a6f760: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    Object ffff880060a6f770: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    Object ffff880060a6f780: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    Object ffff880060a6f790: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    Object ffff880060a6f7a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    Object ffff880060a6f7b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    Object ffff880060a6f7c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    Object ffff880060a6f7d0: 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    Object ffff880060a6f7e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    Object ffff880060a6f7f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    CPU: 0 PID: 1655 Comm: keyctl Tainted: G B 4.5.0-rc4-kasan+ #291
    Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    0000000000000000 000000001b2800b4 ffff880060a179e0 ffffffff81b60491
    ffff88006c802900 ffff880060a6f740 ffff880060a17a10 ffffffff815e2969
    ffff88006c802900 ffffea0001829b80 ffff880060a6f740 ffff880060a6e650
    Call Trace:
    [] dump_stack+0x85/0xc4
    [] print_trailer+0xf9/0x150
    [] object_err+0x34/0x40
    [] kasan_report_error+0x230/0x550
    [] ? keyring_get_key_chunk+0x13e/0x210
    [] __asan_report_load_n_noabort+0x5d/0x70
    [] ? keyring_compare_object+0x213/0x240
    [] keyring_compare_object+0x213/0x240
    [] assoc_array_insert+0x86c/0x3a60
    [] ? assoc_array_cancel_edit+0x70/0x70
    [] ? __key_link_begin+0x20d/0x270
    [] __key_link_begin+0xfc/0x270
    [] key_create_or_update+0x459/0xaf0
    [] ? trace_hardirqs_on+0xd/0x10
    [] ? key_type_lookup+0xc0/0xc0
    [] ? lookup_user_key+0x13d/0xcd0
    [] ? memdup_user+0x53/0x80
    [] SyS_add_key+0x1ba/0x350
    [] ? key_get_type_from_user.constprop.6+0xa0/0xa0
    [] ? retint_user+0x18/0x23
    [] ? trace_hardirqs_on_caller+0x3fe/0x580
    [] ? trace_hardirqs_on_thunk+0x17/0x19
    [] entry_SYSCALL_64_fastpath+0x12/0x76
    Memory state around the buggy address:
    ffff880060a6f700: fc fc fc fc fc fc fc fc 00 00 00 00 00 00 00 00
    ffff880060a6f780: 00 00 00 00 00 00 00 00 00 00 00 fc fc fc fc fc
    >ffff880060a6f800: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    ^
    ffff880060a6f880: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    ffff880060a6f900: fc fc fc fc fc fc 00 00 00 00 00 00 00 00 00 00
    ==================================================================

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

    Jerome Marchand
     

05 Apr, 2016

1 commit

  • Within the copying loop in mpi_read_raw_from_sgl(), the last input SGE's
    byte count gets artificially extended as follows:

    if (sg_is_last(sg) && (len % BYTES_PER_MPI_LIMB))
    len += BYTES_PER_MPI_LIMB - (len % BYTES_PER_MPI_LIMB);

    Within the following byte copying loop, this causes reads beyond that
    SGE's allocated buffer:

    BUG: KASAN: slab-out-of-bounds in mpi_read_raw_from_sgl+0x331/0x650
    at addr ffff8801e168d4d8
    Read of size 1 by task systemd-udevd/721
    [...]
    Call Trace:
    [] dump_stack+0xbc/0x117
    [] ? _atomic_dec_and_lock+0x169/0x169
    [] ? print_section+0x61/0xb0
    [] print_trailer+0x179/0x2c0
    [] object_err+0x34/0x40
    [] kasan_report_error+0x307/0x8c0
    [] ? kasan_unpoison_shadow+0x35/0x50
    [] ? kasan_kmalloc+0x5e/0x70
    [] kasan_report+0x71/0xa0
    [] ? mpi_read_raw_from_sgl+0x331/0x650
    [] __asan_load1+0x46/0x50
    [] mpi_read_raw_from_sgl+0x331/0x650
    [] rsa_verify+0x106/0x260
    [] ? rsa_set_pub_key+0xf0/0xf0
    [] ? sg_init_table+0x29/0x50
    [] ? pkcs1pad_sg_set_buf+0xb2/0x2e0
    [] pkcs1pad_verify+0x1f4/0x2b0
    [] public_key_verify_signature+0x3a7/0x5e0
    [] ? public_key_describe+0x80/0x80
    [] ? keyring_search_aux+0x150/0x150
    [] ? x509_request_asymmetric_key+0x114/0x370
    [] ? kfree+0x220/0x370
    [] public_key_verify_signature_2+0x32/0x50
    [] verify_signature+0x7c/0xb0
    [] pkcs7_validate_trust+0x42c/0x5f0
    [] system_verify_data+0xca/0x170
    [] ? top_trace_array+0x9b/0x9b
    [] ? __vfs_read+0x279/0x3d0
    [] mod_verify_sig+0x1ff/0x290
    [...]

    The exact purpose of the len extension isn't clear to me, but due to
    its form, I suspect that it's a leftover somehow accounting for leading
    zero bytes within the most significant output limb.

    Note however that without that len adjustement, the total number of bytes
    ever processed by the inner loop equals nbytes and thus, the last output
    limb gets written at this point. Thus the net effect of the len adjustement
    cited above is just to keep the inner loop running for some more
    iterations, namely < BYTES_PER_MPI_LIMB ones, reading some extra bytes from
    beyond the last SGE's buffer and discarding them afterwards.

    Fix this issue by purging the extension of len beyond the last input SGE's
    buffer length.

    Fixes: 2d4d1eea540b ("lib/mpi: Add mpi sgl helpers")
    Signed-off-by: Nicolai Stange
    Signed-off-by: Herbert Xu

    Nicolai Stange