Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: torvalds/linux
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: master
Choose a base ref
...
head repository: BytesClub/linux
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: master
Choose a head ref
Checking mergeability… Don’t worry, you can still create the pull request.
  • 1 commit
  • 2,820 files changed
  • 1 contributor

Commits on Apr 7, 2017

  1. linux: Merge branch from linux/master into forked repo (#1)

    * ext4: fix two spelling nits
    
    Signed-off-by: Theodore Ts'o <[email protected]>
    
    * net: hns: fix uninitialized data use
    
    When dev_dbg() is enabled, we print uninitialized data, as gcc-7.0.1
    now points out:
    
    ethernet/hisilicon/hns/hns_dsaf_main.c: In function 'hns_dsaf_set_promisc_tcam':
    ethernet/hisilicon/hns/hns_dsaf_main.c:2947:75: error: 'tbl_tcam_data.low.val' may be used uninitialized in this function [-Werror=maybe-uninitialized]
    ethernet/hisilicon/hns/hns_dsaf_main.c:2947:75: error: 'tbl_tcam_data.high.val' may be used uninitialized in this function [-Werror=maybe-uninitialized]
    
    We also pass the data into hns_dsaf_tcam_mc_cfg(), which might later
    use it (not sure about that), so it seems safer to just always initialize
    the tbl_tcam_data structure.
    
    Fixes: 1f5fa2dd1cfa ("net: hns: fix for promisc mode in HNS driver")
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    
    * net: hns: avoid gcc-7.0.1 warning for uninitialized data
    
    hns_dsaf_set_mac_key() calls dsaf_set_field() on an uninitialized field,
    which will then change only a few of its bits, causing a warning with
    the latest gcc:
    
    hisilicon/hns/hns_dsaf_main.c: In function 'hns_dsaf_set_mac_uc_entry':
    hisilicon/hns/hns_dsaf_reg.h:1046:12: error: 'mac_key.low.bits.port_vlan' may be used uninitialized in this function [-Werror=maybe-uninitialized]
       (origin) &= (~(mask)); \
                ^~
    hisilicon/hns/hns_dsaf_main.c: In function 'hns_dsaf_set_mac_mc_entry':
    hisilicon/hns/hns_dsaf_reg.h:1046:12: error: 'mac_key.low.bits.port_vlan' may be used uninitialized in this function [-Werror=maybe-uninitialized]
    hisilicon/hns/hns_dsaf_main.c: In function 'hns_dsaf_add_mac_mc_port':
    hisilicon/hns/hns_dsaf_reg.h:1046:12: error: 'mac_key.low.bits.port_vlan' may be used uninitialized in this function [-Werror=maybe-uninitialized]
    hisilicon/hns/hns_dsaf_main.c: In function 'hns_dsaf_del_mac_entry':
    hisilicon/hns/hns_dsaf_reg.h:1046:12: error: 'mac_key.low.bits.port_vlan' may be used uninitialized in this function [-Werror=maybe-uninitialized]
    hisilicon/hns/hns_dsaf_main.c: In function 'hns_dsaf_rm_mac_addr':
    hisilicon/hns/hns_dsaf_reg.h:1046:12: error: 'mac_key.low.bits.port_vlan' may be used uninitialized in this function [-Werror=maybe-uninitialized]
    hisilicon/hns/hns_dsaf_main.c: In function 'hns_dsaf_del_mac_mc_port':
    hisilicon/hns/hns_dsaf_reg.h:1046:12: error: 'mac_key.low.bits.port_vlan' may be used uninitialized in this function [-Werror=maybe-uninitialized]
    hisilicon/hns/hns_dsaf_main.c: In function 'hns_dsaf_get_mac_uc_entry':
    hisilicon/hns/hns_dsaf_reg.h:1046:12: error: 'mac_key.low.bits.port_vlan' may be used uninitialized in this function [-Werror=maybe-uninitialized]
    hisilicon/hns/hns_dsaf_main.c: In function 'hns_dsaf_get_mac_mc_entry':
    hisilicon/hns/hns_dsaf_reg.h:1046:12: error: 'mac_key.low.bits.port_vlan' may be used uninitialized in this function [-Werror=maybe-uninitialized]
    
    The code is actually correct since we always set all 16 bits of the
    port_vlan field, but gcc correctly points out that the first
    access does contain uninitialized data.
    
    This initializes the field to zero first before setting the
    individual bits.
    
    Fixes: 5483bfcb169c ("net: hns: modify tcam table and set mac key")
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    
    * irda: vlsi_ir: fix check for DMA mapping errors
    
    vlsi_alloc_ring() checks for DMA mapping errors by comparing
    returned address with zero, while pci_dma_mapping_error() should be used.
    
    Found by Linux Driver Verification project (linuxtesting.org).
    
    Signed-off-by: Alexey Khoroshilov <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    
    * EDAC, pnd2_edac: Fix reported DIMM number
    
    DIMM number passed to edac_mc_handle_error() was accidentally hardcoded
    to zero. Pass in the correct daddr->dimm value.
    
    Signed-off-by: Qiuxu Zhuo <[email protected]>
    Signed-off-by: Borislav Petkov <[email protected]>
    
    * Linux 4.11-rc4
    
    * USB: fix linked-list corruption in rh_call_control()
    
    Using KASAN, Dmitry found a bug in the rh_call_control() routine: If
    buffer allocation fails, the routine returns immediately without
    unlinking its URB from the control endpoint, eventually leading to
    linked-list corruption.
    
    This patch fixes the problem by jumping to the end of the routine
    (where the URB is unlinked) when an allocation failure occurs.
    
    Signed-off-by: Alan Stern <[email protected]>
    Reported-and-tested-by: Dmitry Vyukov <[email protected]>
    CC: <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    
    * sched/clock: Fix broken stable to unstable transfer
    
    When it is determined that the clock is actually unstable, and
    we switch from stable to unstable, the __clear_sched_clock_stable()
    function is eventually called.
    
    In this function we set gtod_offset so the following holds true:
    
      sched_clock() + raw_offset == ktime_get_ns() + gtod_offset
    
    But instead of getting the latest timestamps, we use the last values
    from scd, so instead of sched_clock() we use scd->tick_raw, and
    instead of ktime_get_ns() we use scd->tick_gtod.
    
    However, later, when we use gtod_offset sched_clock_local() we do not
    add it to scd->tick_gtod to calculate the correct clock value when we
    determine the boundaries for min/max clocks.
    
    This can result in tick granularity sched_clock() values, so fix it.
    
    Signed-off-by: Pavel Tatashin <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Cc: Linus Torvalds <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Fixes: 5680d8094ffa ("sched/clock: Provide better clock continuity")
    Link: http://lkml.kernel.org/r/[email protected]
    Signed-off-by: Ingo Molnar <[email protected]>
    
    * drm/i915: Restore marking context objects as dirty on pinning
    
    Commit e8a9c58fcd9a ("drm/i915: Unify active context tracking between
    legacy/execlists/guc") converted the legacy intel_ringbuffer submission
    to the same context pinning mechanism as execlists - that is to pin the
    context until the subsequent request is retired. Previously it used the
    vma retirement of the context object to keep itself pinned until the
    next request (after i915_vma_move_to_active()). In the conversion, I
    missed that the vma retirement was also responsible for marking the
    object as dirty. Mark the context object as dirty when pinning
    (equivalent to execlists) which ensures that if the context is swapped
    out due to mempressure or suspend/hibernation, when it is loaded back in
    it does so with the previous state (and not all zero).
    
    Fixes: e8a9c58fcd9a ("drm/i915: Unify active context tracking between legacy/execlists/guc")
    Reported-by: Dennis Gilmore <[email protected]>
    Reported-by: Mathieu Marquer <[email protected]>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99993
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100181
    Signed-off-by: Chris Wilson <[email protected]>
    Cc: Tvrtko Ursulin <[email protected]>
    Cc: <[email protected]> # v4.11-rc1
    Link: http://patchwork.freedesktop.org/patch/msgid/[email protected]
    Reviewed-by: Tvrtko Ursulin <[email protected]>
    (cherry picked from commit 5d4bac5503fcc67dd7999571e243cee49371aef7)
    Signed-off-by: Jani Nikula <[email protected]>
    
    * netfilter: invoke synchronize_rcu after set the _hook_ to NULL
    
    Otherwise, another CPU may access the invalid pointer. For example:
        CPU0                CPU1
         -              rcu_read_lock();
         -              pfunc = _hook_;
      _hook_ = NULL;          -
      mod unload              -
         -                 pfunc(); // invalid, panic
         -             rcu_read_unlock();
    
    So we must call synchronize_rcu() to wait the rcu reader to finish.
    
    Also note, in nf_nat_snmp_basic_fini, synchronize_rcu() will be invoked
    by later nf_conntrack_helper_unregister, but I'm inclined to add a
    explicit synchronize_rcu after set the nf_nat_snmp_hook to NULL. Depend
    on such obscure assumptions is not a good idea.
    
    Last, in nfnetlink_cttimeout, we use kfree_rcu to free the time object,
    so in cttimeout_exit, invoking rcu_barrier() is not necessary at all,
    remove it too.
    
    Signed-off-by: Liping Zhang <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    
    * netfilter: nfnl_cthelper: fix a race when walk the nf_ct_helper_hash table
    
    The nf_ct_helper_hash table is protected by nf_ct_helper_mutex, while
    nfct_helper operation is protected by nfnl_lock(NFNL_SUBSYS_CTHELPER).
    So it's possible that one CPU is walking the nf_ct_helper_hash for
    cthelper add/get/del, another cpu is doing nf_conntrack_helpers_unregister
    at the same time. This is dangrous, and may cause use after free error.
    
    Note, delete operation will flush all cthelpers added via nfnetlink, so
    using rcu to do protect is not easy.
    
    Now introduce a dummy list to record all the cthelpers added via
    nfnetlink, then we can walk the dummy list instead of walking the
    nf_ct_helper_hash. Also, keep nfnl_cthelper_dump_table unchanged, it
    may be invoked without nfnl_lock(NFNL_SUBSYS_CTHELPER) held.
    
    Signed-off-by: Liping Zhang <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    
    * netfilter: nf_ct_ext: fix possible panic after nf_ct_extend_unregister
    
    If one cpu is doing nf_ct_extend_unregister while another cpu is doing
    __nf_ct_ext_add_length, then we may hit BUG_ON(t == NULL). Moreover,
    there's no synchronize_rcu invocation after set nf_ct_ext_types[id] to
    NULL, so it's possible that we may access invalid pointer.
    
    But actually, most of the ct extends are built-in, so the problem listed
    above will not happen. However, there are two exceptions: NF_CT_EXT_NAT
    and NF_CT_EXT_SYNPROXY.
    
    For _EXT_NAT, the panic will not happen, since adding the nat extend and
    unregistering the nat extend are located in the same file(nf_nat_core.c),
    this means that after the nat module is removed, we cannot add the nat
    extend too.
    
    For _EXT_SYNPROXY, synproxy extend may be added by init_conntrack, while
    synproxy extend unregister will be done by synproxy_core_exit. So after
    nf_synproxy_core.ko is removed, we may still try to add the synproxy
    extend, then kernel panic may happen.
    
    I know it's very hard to reproduce this issue, but I can play a tricky
    game to make it happen very easily :)
    
    Step 1. Enable SYNPROXY for tcp dport 1234 at FORWARD hook:
      # iptables -I FORWARD -p tcp --dport 1234 -j SYNPROXY
    Step 2. Queue the syn packet to the userspace at raw table OUTPUT hook.
            Also note, in the userspace we only add a 20s' delay, then
            reinject the syn packet to the kernel:
      # iptables -t raw -I OUTPUT -p tcp --syn -j NFQUEUE --queue-num 1
    Step 3. Using "nc 2.2.2.2 1234" to connect the server.
    Step 4. Now remove the nf_synproxy_core.ko quickly:
      # iptables -F FORWARD
      # rmmod ipt_SYNPROXY
      # rmmod nf_synproxy_core
    Step 5. After 20s' delay, the syn packet is reinjected to the kernel.
    
    Now you will see the panic like this:
      kernel BUG at net/netfilter/nf_conntrack_extend.c:91!
      Call Trace:
       ? __nf_ct_ext_add_length+0x53/0x3c0 [nf_conntrack]
       init_conntrack+0x12b/0x600 [nf_conntrack]
       nf_conntrack_in+0x4cc/0x580 [nf_conntrack]
       ipv4_conntrack_local+0x48/0x50 [nf_conntrack_ipv4]
       nf_reinject+0x104/0x270
       nfqnl_recv_verdict+0x3e1/0x5f9 [nfnetlink_queue]
       ? nfqnl_recv_verdict+0x5/0x5f9 [nfnetlink_queue]
       ? nla_parse+0xa0/0x100
       nfnetlink_rcv_msg+0x175/0x6a9 [nfnetlink]
       [...]
    
    One possible solution is to make NF_CT_EXT_SYNPROXY extend built-in, i.e.
    introduce nf_conntrack_synproxy.c and only do ct extend register and
    unregister in it, similar to nf_conntrack_timeout.c.
    
    But having such a obscure restriction of nf_ct_extend_unregister is not a
    good idea, so we should invoke synchronize_rcu after set nf_ct_ext_types
    to NULL, and check the NULL pointer when do __nf_ct_ext_add_length. Then
    it will be easier if we add new ct extend in the future.
    
    Last, we use kfree_rcu to free nf_ct_ext, so rcu_barrier() is unnecessary
    anymore, remove it too.
    
    Signed-off-by: Liping Zhang <[email protected]>
    Acked-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    
    * netfilter: nf_nat_snmp: Fix panic when snmp_trap_helper fails to register
    
    In the commit 93557f53e1fb ("netfilter: nf_conntrack: nf_conntrack snmp
    helper"), the snmp_helper is replaced by nf_nat_snmp_hook. So the
    snmp_helper is never registered. But it still tries to unregister the
    snmp_helper, it could cause the panic.
    
    Now remove the useless snmp_helper and the unregister call in the
    error handler.
    
    Fixes: 93557f53e1fb ("netfilter: nf_conntrack: nf_conntrack snmp helper")
    Signed-off-by: Gao Feng <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    
    * NFS: Fix old dentry rehash after move
    
    Now that nfs_rename()'s d_move has moved within the RPC task's rpc_call_done
    callback, rehashing new_dentry will actually rehash the old dentry's name
    in nfs_rename().  d_move() is going to rehash the new dentry for us anyway,
    so doing it again here is unnecessary.
    
    Reported-by: Chuck Lever <[email protected]>
    Fixes: 920b4530fb80 ("NFS: nfs_rename() handle -ERESTARTSYS dentry left behind")
    Signed-off-by: Benjamin Coddington <[email protected]>
    Tested-by: Chuck Lever <[email protected]>
    Signed-off-by: Anna Schumaker <[email protected]>
    
    * cpufreq: Fix creation of symbolic links to policy directories
    
    The cpufreq core only tries to create symbolic links from CPU
    directories in sysfs to policy directories in cpufreq_add_dev(),
    either when a given CPU is registered or when the cpufreq driver
    is registered, whichever happens first.  That is not sufficient,
    however, because cpufreq_add_dev() may be called for an offline CPU
    whose policy object has not been created yet and, quite obviously,
    the symbolic cannot be added in that case.
    
    Fix that by making cpufreq_online() attempt to add symbolic links to
    policy objects for the CPUs in the related_cpus mask of every new
    policy object created by it.
    
    The cpufreq_driver_lock locking around the for_each_cpu() loop
    in cpufreq_online() is dropped, because it is not necessary and the
    code is somewhat simpler without it.  Moreover, failures to create
    a symbolic link will not be regarded as hard errors any more and
    the CPUs without those links will not be taken offline automatically,
    but that should not be problematic in practice.
    
    Reported-and-tested-by: Prashanth Prakash <[email protected]>
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Cc: 4.9+ <[email protected]> # 4.9+
    
    * drm/radeon: Override fpfn for all VRAM placements in radeon_evict_flags
    
    We were accidentally only overriding the first VRAM placement. For BOs
    with the RADEON_GEM_NO_CPU_ACCESS flag set,
    radeon_ttm_placement_from_domain creates a second VRAM placment with
    fpfn == 0. If VRAM is almost full, the first VRAM placement with
    fpfn > 0 may not work, but the second one with fpfn == 0 always will
    (the BO's current location trivially satisfies it). Because "moving"
    the BO to its current location puts it back on the LRU list, this
    results in an infinite loop.
    
    Fixes: 2a85aedd117c ("drm/radeon: Try evicting from CPU accessible to
                          inaccessible VRAM first")
    Reported-by: Zachary Michaels <[email protected]>
    Reported-and-Tested-by: Julien Isorce <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Michel Dänzer <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Cc: [email protected]
    
    * NFS cleanup struct nfs4_filelayout_segment
    
    Signed-off-by: Andy Adamson <[email protected]>
    Signed-off-by: Anna Schumaker <[email protected]>
    
    * MAINTAINERS: Add Andrew Lunn as co-maintainer of PHYLIB
    
    Andrew has been contributing a lot to PHYLIB over the past months and
    his feedback on patches is more than welcome.
    
    Signed-off-by: Florian Fainelli <[email protected]>
    Acked-by: Andrew Lunn <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    
    * scsi: ufs: remove the duplicated checking for supporting clkscaling
    
    There are same conditions for checking whether supporting clkscaling or
    not. When ufshcd is supporting clkscaling, active_reqs should be
    decreased by one.
    
    [mkp: addressed comment from Bartlomiej]
    
    Signed-off-by: Jaehoon Chung <[email protected]>
    Reviewed-by: Subhash Jadavani <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    
    * net: ipconfig: fix ic_close_devs() use-after-free
    
    Our chosen ic_dev may be anywhere in our list of ic_devs, and we may
    free it before attempting to close others. When we compare d->dev and
    ic_dev->dev, we're potentially dereferencing memory returned to the
    allocator. This causes KASAN to scream for each subsequent ic_dev we
    check.
    
    As there's a 1-1 mapping between ic_devs and netdevs, we can instead
    compare d and ic_dev directly, which implicitly handles the !ic_dev
    case, and avoids the use-after-free. The ic_dev pointer may be stale,
    but we will not dereference it.
    
    Original splat:
    
    [    6.487446] ==================================================================
    [    6.494693] BUG: KASAN: use-after-free in ic_close_devs+0xc4/0x154 at addr ffff800367efa708
    [    6.503013] Read of size 8 by task swapper/0/1
    [    6.507452] CPU: 5 PID: 1 Comm: swapper/0 Not tainted 4.11.0-rc3-00002-gda42158 #8
    [    6.514993] Hardware name: AppliedMicro Mustang/Mustang, BIOS 3.05.05-beta_rc Jan 27 2016
    [    6.523138] Call trace:
    [    6.525590] [<ffff200008094778>] dump_backtrace+0x0/0x570
    [    6.530976] [<ffff200008094d08>] show_stack+0x20/0x30
    [    6.536017] [<ffff200008bee928>] dump_stack+0x120/0x188
    [    6.541231] [<ffff20000856d5e4>] kasan_object_err+0x24/0xa0
    [    6.546790] [<ffff20000856d924>] kasan_report_error+0x244/0x738
    [    6.552695] [<ffff20000856dfec>] __asan_report_load8_noabort+0x54/0x80
    [    6.559204] [<ffff20000aae86ac>] ic_close_devs+0xc4/0x154
    [    6.564590] [<ffff20000aaedbac>] ip_auto_config+0x2ed4/0x2f1c
    [    6.570321] [<ffff200008084b04>] do_one_initcall+0xcc/0x370
    [    6.575882] [<ffff20000aa31de8>] kernel_init_freeable+0x5f8/0x6c4
    [    6.581959] [<ffff20000a16df00>] kernel_init+0x18/0x190
    [    6.587171] [<ffff200008084710>] ret_from_fork+0x10/0x40
    [    6.592468] Object at ffff800367efa700, in cache kmalloc-128 size: 128
    [    6.598969] Allocated:
    [    6.601324] PID = 1
    [    6.603427]  save_stack_trace_tsk+0x0/0x418
    [    6.607603]  save_stack_trace+0x20/0x30
    [    6.611430]  kasan_kmalloc+0xd8/0x188
    [    6.615087]  ip_auto_config+0x8c4/0x2f1c
    [    6.619002]  do_one_initcall+0xcc/0x370
    [    6.622832]  kernel_init_freeable+0x5f8/0x6c4
    [    6.627178]  kernel_init+0x18/0x190
    [    6.630660]  ret_from_fork+0x10/0x40
    [    6.634223] Freed:
    [    6.636233] PID = 1
    [    6.638334]  save_stack_trace_tsk+0x0/0x418
    [    6.642510]  save_stack_trace+0x20/0x30
    [    6.646337]  kasan_slab_free+0x88/0x178
    [    6.650167]  kfree+0xb8/0x478
    [    6.653131]  ic_close_devs+0x130/0x154
    [    6.656875]  ip_auto_config+0x2ed4/0x2f1c
    [    6.660875]  do_one_initcall+0xcc/0x370
    [    6.664705]  kernel_init_freeable+0x5f8/0x6c4
    [    6.669051]  kernel_init+0x18/0x190
    [    6.672534]  ret_from_fork+0x10/0x40
    [    6.676098] Memory state around the buggy address:
    [    6.680880]  ffff800367efa600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [    6.688078]  ffff800367efa680: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [    6.695276] >ffff800367efa700: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [    6.702469]                       ^
    [    6.705952]  ffff800367efa780: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [    6.713149]  ffff800367efa800: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [    6.720343] ==================================================================
    [    6.727536] Disabling lock debugging due to kernel taint
    
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: Alexey Kuznetsov <[email protected]>
    Cc: David S. Miller <[email protected]>
    Cc: Hideaki YOSHIFUJI <[email protected]>
    Cc: James Morris <[email protected]>
    Cc: Patrick McHardy <[email protected]>
    Cc: [email protected]
    Signed-off-by: David S. Miller <[email protected]>
    
    * x86/mce: Don't print MCEs when mcelog is active
    
    Since:
    
      cd9c57cad3fe ("x86/MCE: Dump MCE to dmesg if no consumers")
    
    all MCEs are printed even when mcelog is running. Fix the regression to
    not print to dmesg when mcelog is running as it is a consumer too.
    
    Signed-off-by: Andi Kleen <[email protected]>
    [ Massage commit message. ]
    Signed-off-by: Borislav Petkov <[email protected]>
    Cc: Linus Torvalds <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Thomas Gleixner <[email protected]>
    Cc: Tony Luck <[email protected]>
    Cc: linux-edac <[email protected]>
    Cc: [email protected] # 4.10..
    Fixes: cd9c57cad3fe ("x86/MCE: Dump MCE to dmesg if no consumers")
    Link: http://lkml.kernel.org/r/[email protected]
    Signed-off-by: Ingo Molnar <[email protected]>
    
    Signed-off-by: Ingo Molnar <[email protected]>
    
    * clockevents: Fix syntax error in clkevt-of macro
    
    The patch fix syntax errors introduced by commit 0c8893c9095d
    ("clockevents: Add a clkevt-of mechanism like clksrc-of").
    
    Fixes: 0c8893c9095d ("clockevents: Add a clkevt-of mechanism like clksrc-of")
    Signed-off-by: Alexander Kochetkov <[email protected]>
    Signed-off-by: Daniel Lezcano <[email protected]>
    
    * vmlinux.lds: Add __clkevt_of_table to kernel
    
    The code introduced by commit 0c8893c9095d ("clockevents: Add a
    clkevt-of mechanism like clksrc-of") refer to __clkevt_of_table
    what doesn't exist in the vmlinux. As a result kernel build
    failed with error: "clkevt-probe.c:63: undefined reference to
    `__clkevt_of_table’"
    
    Fixes: 0c8893c9095d ("clockevents: Add a clkevt-of mechanism like clksrc-of")
    Signed-off-by: Alexander Kochetkov <[email protected]>
    Signed-off-by: Daniel Lezcano <[email protected]>
    
    * sched/headers: Remove duplicate #include <linux/sched/debug.h> line
    
    Vito Caputo reported that the sched.h split-up series
    introduced a duplicate #include <linux/sched/debug.h> line
    in drivers/tty/vt/keyboard.c.
    
    Remove it.
    
    Reported-by: Vito Caputo <[email protected]>
    Cc: Greg Kroah-Hartman <[email protected]>
    Cc: Jiri Slaby <[email protected]>
    Cc: Alan Cox <[email protected]>
    Cc: Greg Kroah-Hartman <[email protected]>
    Cc: Linus Torvalds <[email protected]>
    Cc: [email protected]
    Signed-off-by: Ingo Molnar <[email protected]>
    
    * KVM: pci-assign: do not map smm memory slot pages in vt-d page tables
    
    or VM memory are not put thus leaked in kvm_iommu_unmap_memslots() when
    destroy VM.
    
    This is consistent with current vfio implementation.
    
    Signed-off-by: herongguang <[email protected]>
    Signed-off-by: Paolo Bonzini <[email protected]>
    
    * KVM: nVMX: fix nested EPT detection
    
    The nested_ept_enabled flag introduced in commit 7ca29de2136 was not
    computed correctly. We are interested only in L1's EPT state, not the
    the combined L0+L1 value.
    
    In particular, if L0 uses EPT but L1 does not, nested_ept_enabled must
    be false to make sure that PDPSTRs are loaded based on CR3 as usual,
    because the special case described in 26.3.2.4 Loading Page-Directory-
    Pointer-Table Entries does not apply.
    
    Fixes: 7ca29de21362 ("KVM: nVMX: fix CR3 load if L2 uses PAE paging and EPT")
    Cc: [email protected]
    Reported-by: Wanpeng Li <[email protected]>
    Reviewed-by: David Hildenbrand <[email protected]>
    Signed-off-by: Ladi Prosek <[email protected]>
    Signed-off-by: Paolo Bonzini <[email protected]>
    
    * KVM: x86: cleanup the page tracking SRCU instance
    
    SRCU uses a delayed work item.  Skip cleaning it up, and
    the result is use-after-free in the work item callbacks.
    
    Reported-by: Dmitry Vyukov <[email protected]>
    Suggested-by: Dmitry Vyukov <[email protected]>
    Cc: [email protected]
    Fixes: 0eb05bf290cfe8610d9680b49abef37febd1c38a
    Reviewed-by: Xiao Guangrong <[email protected]>
    Signed-off-by: Paolo Bonzini <[email protected]>
    
    * NFS store nfs4_deviceid in struct nfs4_filelayout_segment
    
    In preparation for moving the filelayout getdeviceinfo call from
    filelayout_alloc_lseg called by pnfs_process_layout
    
    Signed-off-by: Andy Adamson <[email protected]>
    Signed-off-by: Anna Schumaker <[email protected]>
    
    * NFS filelayout:call GETDEVICEINFO after pnfs_layout_process completes
    
    Fix a filelayout GETDEVICEINFO call hang triggered from the LAYOUTGET
    pnfs_layout_process where the GETDEVICEINFO call is waiting for a
    session slot, and the LAYOUGET call is waiting for pnfs_layout_process
    to complete before freeing the slot GETDEVICEINFO is waiting for..
    
    This occurs in testing against the pynfs pNFS server where the
    the on-wire reply highest_slotid and slot id are zero, and the
    target high slot id is 8 (negotiated in CREATE_SESSION).
    
    The internal fore channel slot table max_slotid, the maximum allowed
    table slotid value, has been reduced via nfs41_set_max_slotid_locked
     from 8 to 1.  Thus there is one slot (slotid 0) available for use but
    it has not been freed by LAYOUTGET  proir to the GETDEVICEINFO request.
    
    In order to ensure that layoutrecall callbacks are processed in the
    correct order, nfs4_proc_layoutget processing needs to be finished
    e.g. pnfs_layout_process) before giving up the slot that identifies
    the layoutget (see referring_call_exists).
    
    Move the filelayout_check_layout nfs4_find_get_device call outside of
    the pnfs_layout_process call tree.
    
    Signed-off-by: Andy Adamson <[email protected]>
    Signed-off-by: Anna Schumaker <[email protected]>
    
    * virtio_pci: fix out of bound access for msix_names
    
    Fedora has received multiple reports of crashes when running
    4.11 as a guest
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1430297
    https://bugzilla.redhat.com/show_bug.cgi?id=1434462
    https://bugzilla.kernel.org/show_bug.cgi?id=194911
    https://bugzilla.redhat.com/show_bug.cgi?id=1433899
    
    The crashes are not always consistent but they are generally
    some flavor of oops or GPF in virtio related code. Multiple people
    have done bisections (Thank you Thorsten Leemhuis and
    Richard W.M. Jones) and found this commit to be at fault
    
    07ec51480b5eb1233f8c1b0f5d7a7c8d1247c507 is the first bad commit
    commit 07ec51480b5eb1233f8c1b0f5d7a7c8d1247c507
    Author: Christoph Hellwig <[email protected]>
    Date:   Sun Feb 5 18:15:19 2017 +0100
    
        virtio_pci: use shared interrupts for virtqueues
    
    The issue seems to be an out of bounds access to the msix_names
    array corrupting kernel memory.
    
    Fixes: 07ec51480b5e ("virtio_pci: use shared interrupts for virtqueues")
    Reported-by: Laura Abbott <[email protected]>
    Signed-off-by: Jason Wang <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Tested-by: Richard W.M. Jones <[email protected]>
    Tested-by: Thorsten Leemhuis <[email protected]>
    
    * virtio_balloon: init 1st buffer in stats vq
    
    When init_vqs runs, virtio_balloon.stats is either uninitialized or
    contains stale values. The host updates its state with garbage data
    because it has no way of knowing that this is just a marker buffer
    used for signaling.
    
    This patch updates the stats before pushing the initial buffer.
    
    Alternative fixes:
    * Push an empty buffer in init_vqs. Not easily done with the current
      virtio implementation and violates the spec "Driver MUST supply the
      same subset of statistics in all buffers submitted to the statsq".
    * Push a buffer with invalid tags in init_vqs. Violates the same
      spec clause, plus "invalid tag" is not really defined.
    
    Note: the spec says:
    	When using the legacy interface, the device SHOULD ignore all values in
    	the first buffer in the statsq supplied by the driver after device
    	initialization. Note: Historically, drivers supplied an uninitialized
    	buffer in the first buffer.
    
    Unfortunately QEMU does not seem to implement the recommendation
    even for the legacy interface.
    
    Cc: [email protected]
    Signed-off-by: Ladi Prosek <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    
    * virtio-balloon: use actual number of stats for stats queue buffers
    
    The virtio balloon driver contained a not-so-obvious invariant that
    update_balloon_stats has to update exactly VIRTIO_BALLOON_S_NR counters
    in order to send valid stats to the host. This commit fixes it by having
    update_balloon_stats return the actual number of counters, and its
    callers use it when pushing buffers to the stats virtqueue.
    
    Note that it is still out of spec to change the number of counters
    at run-time. "Driver MUST supply the same subset of statistics in all
    buffers submitted to the statsq."
    
    Suggested-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Ladi Prosek <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    
    * virtio_balloon: prevent uninitialized variable use
    
    The latest gcc-7.0.1 snapshot reports a new warning:
    
    virtio/virtio_balloon.c: In function 'update_balloon_stats':
    virtio/virtio_balloon.c:258:26: error: 'events[2]' is used uninitialized in this function [-Werror=uninitialized]
    virtio/virtio_balloon.c:260:26: error: 'events[3]' is used uninitialized in this function [-Werror=uninitialized]
    virtio/virtio_balloon.c:261:56: error: 'events[18]' is used uninitialized in this function [-Werror=uninitialized]
    virtio/virtio_balloon.c:262:56: error: 'events[17]' is used uninitialized in this function [-Werror=uninitialized]
    
    This seems absolutely right, so we should add an extra check to
    prevent copying uninitialized stack data into the statistics.
    >From all I can tell, this has been broken since the statistics code
    was originally added in 2.6.34.
    
    Fixes: 9564e138b1f6 ("virtio: Add memory statistics reporting to the balloon driver (V4)")
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Ladi Prosek <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    
    * ACPI: ioapic: Clear on-stack resource before using it
    
    The on-stack resource-window 'win' in setup_res() is not
    properly initialized. This causes the pointers in the
    embedded 'struct resource' to contain stale addresses.
    
    These pointers (in my case the ->child pointer) later get
    propagated to the global iomem_resources list, causing a #GP
    exception when the list is traversed in
    iomem_map_sanity_check().
    
    Fixes: c183619b63ec (x86/irq, ACPI: Implement ACPI driver to support IOAPIC hotplug)
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    
    * ACPI: Do not create a platform_device for IOAPIC/IOxAPIC
    
    No platform-device is required for IO(x)APICs, so don't even
    create them.
    
    [ rjw: This fixes a problem with leaking platform device objects
      after IOAPIC/IOxAPIC hot-removal events.]
    
    Signed-off-by: Joerg Roedel <[email protected]>
    Cc: All applicable <[email protected]>
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    
    * ACPI / APEI: Add missing synchronize_rcu() on NOTIFY_SCI removal
    
    When removing a GHES device notified by SCI, list_del_rcu() is used,
    ghes_remove() should call synchronize_rcu() before it goes on to call
    kfree(ghes), otherwise concurrent RCU readers may still hold this list
    entry after it has been freed.
    
    Signed-off-by: James Morse <[email protected]>
    Reviewed-by: "Huang, Ying" <[email protected]>
    Fixes: 81e88fdc432a (ACPI, APEI, Generic Hardware Error Source POLL/IRQ/NMI notification type support)
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    
    * ACPI: Fix incompatibility with mcount-based function graph tracing
    
    Paul Menzel reported a warning:
    
      WARNING: CPU: 0 PID: 774 at /build/linux-ROBWaj/linux-4.9.13/kernel/trace/trace_functions_graph.c:233 ftrace_return_to_handler+0x1aa/0x1e0
      Bad frame pointer: expected f6919d98, received f6919db0
        from func acpi_pm_device_sleep_wake return to c43b6f9d
    
    The warning means that function graph tracing is broken for the
    acpi_pm_device_sleep_wake() function.  That's because the ACPI Makefile
    unconditionally sets the '-Os' gcc flag to optimize for size.  That's an
    issue because mcount-based function graph tracing is incompatible with
    '-Os' on x86, thanks to the following gcc bug:
    
      https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42109
    
    I have another patch pending which will ensure that mcount-based
    function graph tracing is never used with CONFIG_CC_OPTIMIZE_FOR_SIZE on
    x86.
    
    But this patch is needed in addition to that one because the ACPI
    Makefile overrides that config option for no apparent reason.  It has
    had this flag since the beginning of git history, and there's no related
    comment, so I don't know why it's there.  As far as I can tell, there's
    no reason for it to be there.  The appropriate behavior is for it to
    honor CONFIG_CC_OPTIMIZE_FOR_{SIZE,PERFORMANCE} like the rest of the
    kernel.
    
    Reported-by: Paul Menzel <[email protected]>
    Signed-off-by: Josh Poimboeuf <[email protected]>
    Acked-by: Steven Rostedt (VMware) <[email protected]>
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Cc: All applicable <[email protected]>
    
    * sctp: change to save MSG_MORE flag into assoc
    
    David Laight noticed the support for MSG_MORE with datamsg->force_delay
    didn't really work as we expected, as the first msg with MSG_MORE set
    would always block the following chunks' dequeuing.
    
    This Patch is to rewrite it by saving the MSG_MORE flag into assoc as
    David Laight suggested.
    
    asoc->force_delay is used to save MSG_MORE flag before a msg is sent.
    All chunks in queue would not be sent out if asoc->force_delay is set
    by the msg with MSG_MORE flag, until a new msg without MSG_MORE flag
    clears asoc->force_delay.
    
    Note that this change would not affect the flush is generated by other
    triggers, like asoc->state != ESTABLISHED, queue size > pmtu etc.
    
    v1->v2:
      Not clear asoc->force_delay after sending the msg with MSG_MORE flag.
    
    Fixes: 4ea0c32f5f42 ("sctp: add support for MSG_MORE")
    Signed-off-by: Xin Long <[email protected]>
    Acked-by: David Laight <[email protected]>
    Acked-by: Marcelo Ricardo Leitner <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    
    * isdn: kcapi: avoid uninitialized data
    
    gcc-7 points out that the AVMB1_ADDCARD ioctl results in an unintialized
    value ending up in the cardnr parameter:
    
    drivers/isdn/capi/kcapi.c: In function 'old_capi_manufacturer':
    drivers/isdn/capi/kcapi.c:1042:24: error: 'cdef.cardnr' may be used uninitialized in this function [-Werror=maybe-uninitialized]
       cparams.cardnr = cdef.cardnr;
    
    This has been broken since before the start of the git history, so
    either the value is not used for anything important, or the ioctl
    command doesn't get called in practice.
    
    Setting the cardnr to zero avoids the warning and makes sure
    we have consistent behavior.
    
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    
    * net: moxa: fix TX overrun memory leak
    
    moxart_mac_start_xmit() doesn't care where tx_tail is, tx_head can
    catch and pass tx_tail, which is bad because moxart_tx_finished()
    isn't guaranteed to catch up on freeing resources from tx_tail.
    
    Add a check in moxart_mac_start_xmit() stopping the queue at the
    end of the circular buffer. Also add a check in moxart_tx_finished()
    waking the queue if the buffer has TX_WAKE_THRESHOLD or more
    free descriptors.
    
    While we're at it, move spin_lock_irq() to happen before our
    descriptor pointer is assigned in moxart_mac_start_xmit().
    
    Addresses https://bugzilla.kernel.org/show_bug.cgi?id=99451
    
    Signed-off-by: Jonas Jensen <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    
    * net/mlx5: Avoid dereferencing uninitialized pointer
    
    In NETDEV_CHANGEUPPER event the upper_info field is valid
    only when linking is true. Otherwise it should be ignored.
    
    Fixes: 7907f23adc18 (net/mlx5: Implement RoCE LAG feature)
    Signed-off-by: Talat Batheesh <[email protected]>
    Reviewed-by: Aviv Heller <[email protected]>
    Reviewed-by: Moni Shoua <[email protected]>
    Signed-off-by: Saeed Mahameed <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    
    * svcrdma: set XPT_CONG_CTRL flag for bc xprt
    
    Same change as Kinglong Mee's fix for the TCP backchannel service.
    
    Fixes: 5283b03ee5cd ("nfs/nfsd/sunrpc: enforce transport...")
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: J. Bruce Fields <[email protected]>
    
    * rocker: fix Wmaybe-uninitialized false-positive
    
    gcc-7 reports a warning that earlier versions did not have:
    
    drivers/net/ethernet/rocker/rocker_ofdpa.c: In function 'ofdpa_port_stp_update':
    arch/x86/include/asm/string_32.h:79:22: error: '*((void *)&prev_ctrls+4)' may be used uninitialized in this function [-Werror=maybe-uninitialized]
       *((short *)to + 2) = *((short *)from + 2);
       ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
    drivers/net/ethernet/rocker/rocker_ofdpa.c:2218:7: note: '*((void *)&prev_ctrls+4)' was declared here
    
    This is clearly a variation of the warning about 'prev_state' that
    was shut up using uninitialized_var().
    
    We can slightly simplify the code and get rid of the warning by unconditionally
    saving the prev_state and prev_ctrls variables. The inlined memcpy is not
    particularly expensive here, as it just has to read five bytes from one or
    two cache lines.
    
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    
    * openvswitch: Fix refcount leak on force commit.
    
    The reference count held for skb needs to be released when the skb's
    nfct pointer is cleared regardless of if nf_ct_delete() is called or
    not.
    
    Failing to release the skb's reference cound led to deferred conntrack
    cleanup spinning forever within nf_conntrack_cleanup_net_list() when
    cleaning up a network namespace:
    
       kworker/u16:0-19025 [004] 45981067.173642: sched_switch: kworker/u16:0:19025 [120] R ==> rcu_preempt:7 [120]
       kworker/u16:0-19025 [004] 45981067.173651: kernel_stack: <stack trace>
    => ___preempt_schedule (ffffffffa001ed36)
    => _raw_spin_unlock_bh (ffffffffa0713290)
    => nf_ct_iterate_cleanup (ffffffffc00a4454)
    => nf_conntrack_cleanup_net_list (ffffffffc00a5e1e)
    => nf_conntrack_pernet_exit (ffffffffc00a63dd)
    => ops_exit_list.isra.1 (ffffffffa06075f3)
    => cleanup_net (ffffffffa0607df0)
    => process_one_work (ffffffffa0084c31)
    => worker_thread (ffffffffa008592b)
    => kthread (ffffffffa008bee2)
    => ret_from_fork (ffffffffa071b67c)
    
    Fixes: dd41d33f0b03 ("openvswitch: Add force commit.")
    Reported-by: Yang Song <[email protected]>
    Signed-off-by: Jarno Rajahalme <[email protected]>
    Acked-by: Joe Stringer <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    
    * cfg80211: check rdev resume callback only for registered wiphy
    
    We got the following use-after-free KASAN report:
    
     BUG: KASAN: use-after-free in wiphy_resume+0x591/0x5a0 [cfg80211]
    	 at addr ffff8803fc244090
     Read of size 8 by task kworker/u16:24/2587
     CPU: 6 PID: 2587 Comm: kworker/u16:24 Tainted: G    B 4.9.13-debug+
     Hardware name: Dell Inc. XPS 15 9550/0N7TVV, BIOS 1.2.19 12/22/2016
     Workqueue: events_unbound async_run_entry_fn
      ffff880425d4f9d8 ffffffffaeedb541 ffff88042b80ef00 ffff8803fc244088
      ffff880425d4fa00 ffffffffae84d7a1 ffff880425d4fa98 ffff8803fc244080
      ffff88042b80ef00 ffff880425d4fa88 ffffffffae84da3a ffffffffc141f7d9
     Call Trace:
      [<ffffffffaeedb541>] dump_stack+0x85/0xc4
      [<ffffffffae84d7a1>] kasan_object_err+0x21/0x70
      [<ffffffffae84da3a>] kasan_report_error+0x1fa/0x500
      [<ffffffffc141f7d9>] ? cfg80211_bss_age+0x39/0xc0 [cfg80211]
      [<ffffffffc141f83a>] ? cfg80211_bss_age+0x9a/0xc0 [cfg80211]
      [<ffffffffae48d46d>] ? trace_hardirqs_on+0xd/0x10
      [<ffffffffc13fb1c0>] ? wiphy_suspend+0xc70/0xc70 [cfg80211]
      [<ffffffffae84def1>] __asan_report_load8_noabort+0x61/0x70
      [<ffffffffc13fb100>] ? wiphy_suspend+0xbb0/0xc70 [cfg80211]
      [<ffffffffc13fb751>] ? wiphy_resume+0x591/0x5a0 [cfg80211]
      [<ffffffffc13fb751>] wiphy_resume+0x591/0x5a0 [cfg80211]
      [<ffffffffc13fb1c0>] ? wiphy_suspend+0xc70/0xc70 [cfg80211]
      [<ffffffffaf3b206e>] dpm_run_callback+0x6e/0x4f0
      [<ffffffffaf3b31b2>] device_resume+0x1c2/0x670
      [<ffffffffaf3b367d>] async_resume+0x1d/0x50
      [<ffffffffae3ee84e>] async_run_entry_fn+0xfe/0x610
      [<ffffffffae3d0666>] process_one_work+0x716/0x1a50
      [<ffffffffae3d05c9>] ? process_one_work+0x679/0x1a50
      [<ffffffffafdd7b6d>] ? _raw_spin_unlock_irq+0x3d/0x60
      [<ffffffffae3cff50>] ? pwq_dec_nr_in_flight+0x2b0/0x2b0
      [<ffffffffae3d1a80>] worker_thread+0xe0/0x1460
      [<ffffffffae3d19a0>] ? process_one_work+0x1a50/0x1a50
      [<ffffffffae3e54c2>] kthread+0x222/0x2e0
      [<ffffffffae3e52a0>] ? kthread_park+0x80/0x80
      [<ffffffffae3e52a0>] ? kthread_park+0x80/0x80
      [<ffffffffae3e52a0>] ? kthread_park+0x80/0x80
      [<ffffffffafdd86aa>] ret_from_fork+0x2a/0x40
     Object at ffff8803fc244088, in cache kmalloc-1024 size: 1024
     Allocated:
     PID = 71
      save_stack_trace+0x1b/0x20
      save_stack+0x46/0xd0
      kasan_kmalloc+0xad/0xe0
      kasan_slab_alloc+0x12/0x20
      __kmalloc_track_caller+0x134/0x360
      kmemdup+0x20/0x50
      brcmf_cfg80211_attach+0x10b/0x3a90 [brcmfmac]
      brcmf_bus_start+0x19a/0x9a0 [brcmfmac]
      brcmf_pcie_setup+0x1f1a/0x3680 [brcmfmac]
      brcmf_fw_request_nvram_done+0x44c/0x11b0 [brcmfmac]
      request_firmware_work_func+0x135/0x280
      process_one_work+0x716/0x1a50
      worker_thread+0xe0/0x1460
      kthread+0x222/0x2e0
      ret_from_fork+0x2a/0x40
     Freed:
     PID = 2568
      save_stack_trace+0x1b/0x20
      save_stack+0x46/0xd0
      kasan_slab_free+0x71/0xb0
      kfree+0xe8/0x2e0
      brcmf_cfg80211_detach+0x62/0xf0 [brcmfmac]
      brcmf_detach+0x14a/0x2b0 [brcmfmac]
      brcmf_pcie_remove+0x140/0x5d0 [brcmfmac]
      brcmf_pcie_pm_leave_D3+0x198/0x2e0 [brcmfmac]
      pci_pm_resume+0x186/0x220
      dpm_run_callback+0x6e/0x4f0
      device_resume+0x1c2/0x670
      async_resume+0x1d/0x50
      async_run_entry_fn+0xfe/0x610
      process_one_work+0x716/0x1a50
      worker_thread+0xe0/0x1460
      kthread+0x222/0x2e0
      ret_from_fork+0x2a/0x40
     Memory state around the buggy address:
      ffff8803fc243f80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      ffff8803fc244000: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
     >ffff8803fc244080: fc fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                              ^
      ffff8803fc244100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      ffff8803fc244180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    
    What is happening is that brcmf_pcie_resume() detects a device that
    is no longer responsive and it decides to unbind resulting in a
    wiphy_unregister() and wiphy_free() call. Now the wiphy instance
    remains allocated, because PM needs to call wiphy_resume() for it.
    However, brcmfmac already does a kfree() for the struct
    cfg80211_registered_device::ops field. Change the checks in
    wiphy_resume() to only access the struct cfg80211_registered_device::ops
    if the wiphy instance is still registered at this time.
    
    Cc: [email protected] # 4.10.x, 4.9.x
    Reported-by: Daniel J Blueman <[email protected]>
    Reviewed-by: Hante Meuleman <[email protected]>
    Reviewed-by: Pieter-Paul Giesberts <[email protected]>
    Reviewed-by: Franky Lin <[email protected]>
    Signed-off-by: Arend van Spriel <[email protected]>
    Signed-off-by: Johannes Berg <[email protected]>
    
    * xhci: plat: Register shutdown for xhci_plat
    
    Shutdown should be called for xhci_plat devices especially for
    situations where kexec might be used by stopping DMA
    transactions.
    
    Signed-off-by: Adam Wallis <[email protected]>
    Signed-off-by: Mathias Nyman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    
    * xhci: Set URB actual length for stopped control transfers
    
    A control transfer that stopped at the status stage incorrectly
    warned about a "unexpected TRB Type 4", and did not set the
    transferred actual_length for the URB.
    
    The URB actual_length for control transfers should contain the
    bytes transferred in the data stage.
    
    Bytes of a partially sent setup stage and missing bytes from
    status stage should be left out.
    
    Cc: <[email protected]>
    Signed-off-by: Mathias Nyman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    
    * xhci: Manually give back cancelled URB if we can't queue it for cancel
    
    xhci needs to take care of four scenarios when asked to cancel a URB.
    
    1 URB is not queued or already given back.
      usb_hcd_check_unlink_urb() will return an error, we pass the error on
    
    2 We fail to find xhci internal structures from urb private data such as
      virtual device and endpoint ring.
      Give back URB immediately, can't do anything about internal structures.
    
    3 URB private data has valid pointers to xhci internal data, but host is
      not  responding.
      give back URB immedately and remove the URB from the endpoint lists.
    
    4 Everyting is working
      add URB to cancel list, queue a command to stop the endpoint, after
      which the URB can be turned to no-op or skipped, removed from lists,
      and given back.
    
    We failed to give back the urb in case 2 where the correct device and
    endpoint pointers could not be retrieved from URB private data.
    
    This caused a hang on Dell Inspiron 5558/0VNM2T at resume from suspend
    as urb was never returned.
    
    [  245.270505] INFO: task rtsx_usb_ms_1:254 blocked for more than 120 seconds.
    [  245.272244]       Tainted: G        W       4.11.0-rc3-ARCH #2
    [  245.273983] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    [  245.275737] rtsx_usb_ms_1   D    0   254      2 0x00000000
    [  245.277524] Call Trace:
    [  245.279278]  __schedule+0x2d3/0x8a0
    [  245.281077]  schedule+0x3d/0x90
    [  245.281961]  usb_kill_urb.part.3+0x6c/0xa0 [usbcore]
    [  245.282861]  ? wake_atomic_t_function+0x60/0x60
    [  245.283760]  usb_kill_urb+0x21/0x30 [usbcore]
    [  245.284649]  usb_start_wait_urb+0xe5/0x170 [usbcore]
    [  245.285541]  ? try_to_del_timer_sync+0x53/0x80
    [  245.286434]  usb_bulk_msg+0xbd/0x160 [usbcore]
    [  245.287326]  rtsx_usb_send_cmd+0x63/0x90 [rtsx_usb]
    
    Reported-by: [email protected]
    Tested-by: [email protected]
    Cc: [email protected]
    Signed-off-by: Mathias Nyman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    
    * usb: phy: isp1301: Fix build warning when CONFIG_OF is disabled
    
    Commit fd567653bdb9 ("usb: phy: isp1301: Add OF device ID table")
    added an OF device ID table, but used the of_match_ptr() macro
    that will lead to a build warning if CONFIG_OF symbol is disabled:
    
    drivers/usb/phy//phy-isp1301.c:36:34: warning: ‘isp1301_of_match’ defined but not used [-Wunused-const-variable=]
     static const struct of_device_id isp1301_of_match[] = {
                                      ^~~~~~~~~~~~~~~~
    
    Fixes: fd567653bdb9 ("usb: phy: isp1301: Add OF device ID table")
    Reported-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Javier Martinez Canillas <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    
    * netfilter: nfnetlink_queue: fix secctx memory leak
    
    We must call security_release_secctx to free the memory returned by
    security_secid_to_secctx, otherwise memory may be leaked forever.
    
    Fixes: ef493bd930ae ("netfilter: nfnetlink_queue: add security context information")
    Signed-off-by: Liping Zhang <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    
    * mac80211: unconditionally start new netdev queues with iTXQ support
    
    When internal mac80211 TXQs aren't supported, netdev queues must
    always started out started even when driver queues are stopped
    while the interface is added. This is necessary because with the
    internal TXQ support netdev queues are never stopped and packet
    scheduling/dropping is done in mac80211.
    
    Cc: [email protected] # 4.9+
    Fixes: 80a83cfc434b1 ("mac80211: skip netdev queue control with software queuing")
    Reported-and-tested-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Johannes Berg <[email protected]>
    
    * Btrfs: bring back repair during read
    
    Commit 20a7db8ab3f2 ("btrfs: add dummy callback for readpage_io_failed
    and drop checks") made a cleanup around readpage_io_failed_hook, and
    it was supposed to keep the original sematics, but it also
    unexpectedly disabled repair during read for dup, raid1 and raid10.
    
    This fixes the problem by letting data's inode call the generic
    readpage_io_failed callback by returning -EAGAIN from its
    readpage_io_failed_hook in order to notify end_bio_extent_readpage to
    do the rest.  We don't call it directly because the generic one takes
    an offset from end_bio_extent_readpage() to calculate the index in the
    checksum array and inode's readpage_io_failed_hook doesn't offer that
    offset.
    
    Cc: David Sterba <[email protected]>
    Signed-off-by: Liu Bo <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    [ keep the const function attribute ]
    Signed-off-by: David Sterba <[email protected]>
    
    * btrfs: Change qgroup_meta_rsv to 64bit
    
    Using an int value is causing qg->reserved to become negative and
    exclusive -EDQUOT to be reached prematurely.
    
    This affects exclusive qgroups only.
    
    TEST CASE:
    
    DEVICE=/dev/vdb
    MOUNTPOINT=/mnt
    SUBVOL=$MOUNTPOINT/tmp
    
    umount $SUBVOL
    umount $MOUNTPOINT
    
    mkfs.btrfs -f $DEVICE
    mount /dev/vdb $MOUNTPOINT
    btrfs quota enable $MOUNTPOINT
    btrfs subvol create $SUBVOL
    umount $MOUNTPOINT
    mount /dev/vdb $MOUNTPOINT
    mount -o subvol=tmp $DEVICE $SUBVOL
    btrfs qgroup limit -e 3G $SUBVOL
    
    btrfs quota rescan /mnt -w
    
    for i in `seq 1 44000`; do
      dd if=/dev/zero of=/mnt/tmp/test_$i bs=10k count=1
      if [[ $? > 0 ]]; then
         btrfs qgroup show -pcref $SUBVOL
         exit 1
      fi
    done
    
    Signed-off-by: Goldwyn Rodrigues <[email protected]>
    [ add reproducer to changelog ]
    Signed-off-by: David Sterba <[email protected]>
    
    * Btrfs: fix an integer overflow check
    
    This isn't super serious because you need CAP_ADMIN to run this code.
    
    I added this integer overflow check last year but apparently I am
    rubbish at writing integer overflow checks...  There are two issues.
    First, access_ok() works on unsigned long type and not u64 so on 32 bit
    systems the access_ok() could be checking a truncated size.  The other
    issue is that we should be using a stricter limit so we don't overflow
    the kzalloc() setting ctx->clone_roots later in the function after the
    access_ok():
    
    	alloc_size = sizeof(struct clone_root) * (arg->clone_sources_count + 1);
    	sctx->clone_roots = kzalloc(alloc_size, GFP_KERNEL | __GFP_NOWARN);
    
    Fixes: f5ecec3ce21f ("btrfs: send: silence an integer overflow warning")
    Signed-off-by: Dan Carpenter <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    [ added comment ]
    Signed-off-by: David Sterba <[email protected]>
    
    * drm/etnaviv: (re-)protect fence allocation with GPU mutex
    
    The fence allocation needs to be protected by the GPU mutex, otherwise
    the fence seqnos of concurrent submits might not match the insertion order
    of the jobs in the kernel ring. This breaks the assumption that jobs
    complete with monotonically increasing fence seqnos.
    
    Fixes: d9853490176c (drm/etnaviv: take GPU lock later in the submit process)
    CC: [email protected] #4.9+
    Signed-off-by: Lucas Stach <[email protected]>
    
    * xfrm_user: validate XFRM_MSG_NEWAE XFRMA_REPLAY_ESN_VAL replay_window
    
    When a new xfrm state is created during an XFRM_MSG_NEWSA call we
    validate the user supplied replay_esn to ensure that the size is valid
    and to ensure that the replay_window size is within the allocated
    buffer.  However later it is possible to update this replay_esn via a
    XFRM_MSG_NEWAE call.  There we again validate the size of the supplied
    buffer matches the existing state and if so inject the contents.  We do
    not at this point check that the replay_window is within the allocated
    memory.  This leads to out-of-bounds reads and writes triggered by
    netlink packets.  This leads to memory corruption and the potential for
    priviledge escalation.
    
    We already attempt to validate the incoming replay information in
    xfrm_new_ae() via xfrm_replay_verify_len().  This confirms that the user
    is not trying to change the size of the replay state buffer which
    includes the replay_esn.  It however does not check the replay_window
    remains within that buffer.  Add validation of the contained
    replay_window.
    
    CVE-2017-7184
    Signed-off-by: Andy Whitcroft <[email protected]>
    Acked-by: Steffen Klassert <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    
    * xfrm_user: validate XFRM_MSG_NEWAE incoming ESN size harder
    
    Kees Cook has pointed out that xfrm_replay_state_esn_len() is subject to
    wrapping issues.  To ensure we are correctly ensuring that the two ESN
    structures are the same size compare both the overall size as reported
    by xfrm_replay_state_esn_len() and the internal length are the same.
    
    CVE-2017-7184
    Signed-off-by: Andy Whitcroft <[email protected]>
    Acked-by: Steffen Klassert <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    
    * c6x/ptrace: Remove useless PTRACE_SETREGSET implementation
    
    gpr_set won't work correctly and can never have been tested, and the
    correct behaviour is not clear due to the endianness-dependent task
    layout.
    
    So, just remove it.  The core code will now return -EOPNOTSUPPORT when
    trying to set NT_PRSTATUS on this architecture until/unless a correct
    implementation is supplied.
    
    Signed-off-by: Dave Martin <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    
    * h8300/ptrace: Fix incorrect register transfer count
    
    regs_set() and regs_get() are vulnerable to an off-by-1 buffer overrun
    if CONFIG_CPU_H8S is set, since this adds an extra entry to
    register_offset[] but not to user_regs_struct.
    
    So, iterate over user_regs_struct based on its actual size, not based on
    the length of register_offset[].
    
    Signed-off-by: Dave Martin <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    
    * metag/ptrace: Preserve previous registers for short regset write
    
    Ensure that if userspace supplies insufficient data to PTRACE_SETREGSET
    to fill all the registers, the thread's old registers are preserved.
    
    Signed-off-by: Dave Martin <[email protected]>
    Acked-by: James Hogan <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    
    * metag/ptrace: Provide default TXSTATUS for short NT_PRSTATUS
    
    Ensure that if userspace supplies insufficient data to PTRACE_SETREGSET
    to fill TXSTATUS, a well-defined default value is used, based on the
    task's current value.
    
    Suggested-by: James Hogan <[email protected]>
    Signed-off-by: Dave Martin <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    
    * metag/ptrace: Reject partial NT_METAG_RPIPE writes
    
    It's not clear what behaviour is sensible when doing partial write of
    NT_METAG_RPIPE, so just don't bother.
    
    This patch assumes that userspace will never rely on a partial SETREGSET
    in this case, since it's not clear what should happen anyway.
    
    Signed-off-by: Dave Martin <[email protected]>
    Acked-by: James Hogan <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    
    * mips/ptrace: Preserve previous registers for short regset write
    
    Ensure that if userspace supplies insufficient data to PTRACE_SETREGSET
    to fill all the registers, the thread's old registers are preserved.
    
    Signed-off-by: Dave Martin <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    
    * sparc/ptrace: Preserve previous registers for short regset write
    
    Ensure that if userspace supplies insufficient data to PTRACE_SETREGSET
    to fill all the registers, the thread's old registers are preserved.
    
    Signed-off-by: Dave Martin <[email protected]>
    Acked-by: David S. Miller <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    
    * l2tp: hold tunnel socket when handling control frames in l2tp_ip and l2tp_ip6
    
    The code following l2tp_tunnel_find() expects that a new reference is
    held on sk. Either sk_receive_skb() or the discard_put error path will
    drop a reference from the tunnel's socket.
    
    This issue exists in both l2tp_ip and l2tp_ip6.
    
    Fixes: a3c18422a4b4 ("l2tp: hold socket before dropping lock in l2tp_ip{, 6}_recv()")
    Signed-off-by: Guillaume Nault <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    
    * l2tp: purge socket queues in the .destruct() callback
    
    The Rx path may grab the socket right before pppol2tp_release(), but
    nothing guarantees that it will enqueue packets before
    skb_queue_purge(). Therefore, the socket can be destroyed without its
    queues fully purged.
    
    Fix this by purging queues in pppol2tp_session_destruct() where we're
    guaranteed nothing is still referencing the socket.
    
    Fixes: 9e9cb6221aa7 ("l2tp: fix userspace reception on plain L2TP sockets")
    Signed-off-by: Guillaume Nault <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    
    * parisc: Fix access fault handling in pa_memcpy()
    
    pa_memcpy() is the major memcpy implementation in the parisc kernel which is
    used to do any kind of userspace/kernel memory copies.
    
    Al Viro noticed various bugs in the implementation of pa_mempcy(), most notably
    that in case of faults it may report back to have copied more bytes than it
    actually did.
    
    Fixing those bugs is quite hard in the C-implementation, because the compiler
    is messing around with the registers and we are not guaranteed that specific
    variables are always in the same processor registers. This makes proper fault
    handling complicated.
    
    This patch implements pa_memcpy() in assembler. That way we have correct fault
    handling and adding a 64-bit copy routine was quite easy.
    
    Runtime tested with 32- and 64bit kernels.
    
    Reported-by: Al Viro <[email protected]>
    Cc: <[email protected]> # v4.9+
    Signed-off-by: John David Anglin <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    
    * parisc: Clean up fixup routines for get_user()/put_user()
    
    Al Viro noticed that userspace accesses via get_user()/put_user() can be
    simplified a lot with regard to usage of the exception handling.
    
    This patch implements a fixup routine for get_user() and put_user() in such
    that the exception handler will automatically load -EFAULT into the register
    %r8 (the error value) in case on a fault on userspace.  Additionally the fixup
    routine will zero the target register on fault in case of a get_user() call.
    The target register is extracted out of the faulting assembly instruction.
    
    This patch brings a few benefits over the old implementation:
    1. Exception handling gets much cleaner, easier and smaller in size.
    2. Helper functions like fixup_get_user_skip_1 (all of fixup.S) can be dropped.
    3. No need to hardcode %r9 as target register for get_user() any longer. This
       helps the compiler register allocator and thus creates less assembler
       statements.
    4. No dependency on the exception_data contents any longer.
    5. Nested faults will be handled cleanly.
    
    Reported-by: Al Viro <[email protected]>
    Cc: <[email protected]> # v4.9+
    Signed-off-by: Helge Deller <[email protected]>
    
    * parisc: Avoid stalled CPU warnings after system shutdown
    
    Commit 73580dac7618 ("parisc: Fix system shutdown halt") introduced an endless
    loop for systems which don't provide a software power off function.  But the
    soft lockup detector will detect this and report stalled CPUs after some time.
    Avoid those unwanted warnings by disabling the soft lockup detector.
    
    Fixes: 73580dac7618 ("parisc: Fix system shutdown halt")
    Signed-off-by: Helge Deller <[email protected]>
    Cc: [email protected] # 4.9+
    
    * cpuidle: powernv: Pass correct drv->cpumask for registration
    
    drv->cpumask defaults to cpu_possible_mask in __cpuidle_driver_init().
    On PowerNV platform cpu_present could be less than cpu_possible in cases
    where firmware detects the cpu, but it is not available to the OS.  When
    CONFIG_HOTPLUG_CPU=n, such cpus are not hotplugable at runtime and hence
    we skip creating cpu_device.
    
    This breaks cpuidle on powernv where register_cpu() is not called for
    cpus in cpu_possible_mask that cannot be hot-added at runtime.
    
    Trying cpuidle_register_device() on cpu without cpu_device will cause
    crash like this:
    
    cpu 0xf: Vector: 380 (Data SLB Access) at [c000000ff1503490]
        pc: c00000000022c8bc: string+0x34/0x60
        lr: c00000000022ed78: vsnprintf+0x284/0x42c
        sp: c000000ff1503710
       msr: 9000000000009033
       dar: 6000000060000000
      current = 0xc000000ff1480000
      paca    = 0xc00000000fe82d00   softe: 0        irq_happened: 0x01
        pid   = 1, comm = swapper/8
    Linux version 4.11.0-rc2 (sv@sagarika) (gcc version 4.9.4
    (Buildroot 2017.02-00004-gc28573e) ) #15 SMP Fri Mar 17 19:32:02 IST 2017
    enter ? for help
    [link register   ] c00000000022ed78 vsnprintf+0x284/0x42c
    [c000000ff1503710] c00000000022ebb8 vsnprintf+0xc4/0x42c (unreliable)
    [c000000ff1503800] c00000000022ef40 vscnprintf+0x20/0x44
    [c000000ff1503830] c0000000000ab61c vprintk_emit+0x94/0x2cc
    [c000000ff15038a0] c0000000000acc9c vprintk_func+0x60/0x74
    [c000000ff15038c0] c000000000619694 printk+0x38/0x4c
    [c000000ff15038e0] c000000000224950 kobject_get+0x40/0x60
    [c000000ff1503950] c00000000022507c kobject_add_internal+0x60/0x2c4
    [c000000ff15039e0] c000000000225350 kobject_init_and_add+0x70/0x78
    [c000000ff1503a60] c00000000053c288 cpuidle_add_sysfs+0x9c/0xe0
    [c000000ff1503ae0] c00000000053aeac cpuidle_register_device+0xd4/0x12c
    [c000000ff1503b30] c00000000053b108 cpuidle_register+0x98/0xcc
    [c000000ff1503bc0] c00000000085eaf0 powernv_processor_idle_init+0x140/0x1e0
    [c000000ff1503c60] c00000000000cd60 do_one_initcall+0xc0/0x15c
    [c000000ff1503d20] c000000000833e84 kernel_init_freeable+0x1a0/0x25c
    [c000000ff1503dc0] c00000000000d478 kernel_init+0x24/0x12c
    [c000000ff1503e30] c00000000000b564 ret_from_kernel_thread+0x5c/0x78
    
    This patch fixes the bug by passing correct cpumask from
    powernv-cpuidle driver.
    
    Signed-off-by: Vaidyanathan Srinivasan <[email protected]>
    Reviewed-by: Gautham R. Shenoy <[email protected]>
    Acked-by: Michael Ellerman <[email protected]>
    [ rjw: Comment massage ]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    
    * bnxt_en: Fix NULL pointer dereference in reopen failure path
    
    Net device reset can fail when the h/w or f/w is in a bad state.
    Subsequent netdevice open fails in bnxt_hwrm_stat_ctx_alloc().
    The cleanup invokes bnxt_hwrm_resource_free() which inturn
    calls bnxt_disable_int().  In this routine, the code segment
    
    if (ring->fw_ring_id != INVALID_HW_RING_ID)
       BNXT_CP_DB(cpr->cp_doorbell, cpr->cp_raw_cons);
    
    results in NULL pointer dereference as cpr->cp_doorbell is not yet
    initialized, and fw_ring_id is zero.
    
    The fix is to initialize cpr fw_ring_id to INVALID_HW_RING_ID before
    bnxt_init_chip() is invoked.
    
    Signed-off-by: Sankar Patchineelam <[email protected]>
    Signed-off-by: Michael Chan <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    
    * bnxt_en: Correct the order of arguments to netdev_err() in bnxt_set_tpa()
    
    Signed-off-by: Sankar Patchineelam <[email protected]>
    Signed-off-by: Michael Chan <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    
    * bnxt_en: Fix DMA unmapping of the RX buffers in XDP mode during shutdown.
    
    In bnxt_free_rx_skbs(), which is called to free up all RX buffers during
    shutdown, we need to unmap the page if we are running in XDP mode.
    
    Fixes: c61fb99cae51 ("bnxt_en: Add RX page mode support.")
    Signed-off-by: Michael Chan <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    
    * ezchip: nps_enet: check if napi has been completed
    
    After a new NAPI_STATE_MISSED state was added to NAPI we can get into
    this state and in such case we have to reschedule NAPI as some work is
    still pending and we have to process it. napi_complete_done() function
    returns false if we have to reschedule something (e.g. in case we were
    in MISSED state) as current polling have not been completed yet.
    
    nps_enet driver hasn't been verifying the return …
    0xTheProDev authored Apr 7, 2017
    Configuration menu
    Copy the full SHA
    201005f View commit details
    Browse the repository at this point in the history
Loading