linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 4.4 000/193] 4.4.118-stable review
@ 2018-02-23 18:23 Greg Kroah-Hartman
  2018-02-23 18:23 ` [PATCH 4.4 001/193] net: add dst_cache support Greg Kroah-Hartman
                   ` (199 more replies)
  0 siblings, 200 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:23 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, torvalds, akpm, linux, shuahkh, patches,
	ben.hutchings, lkft-triage, stable

This is the start of the stable review cycle for the 4.4.118 release.
There are 193 patches in this series, all will be posted as a response
to this one.  If anyone has any issues with these being applied, please
let me know.

Responses should be made by Sun Feb 25 17:02:20 UTC 2018.
Anything received after that time might be too late.

The whole patch series can be found in one patch at:
	https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.4.118-rc1.gz
or in the git tree and branch at:
	git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.4.y
and the diffstat can be found below.

thanks,

greg k-h

-------------
Pseudo-Shortlog of commits:

Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Linux 4.4.118-rc1

Kamil Konieczny <k.konieczny@partner.samsung.com>
    crypto: s5p-sss - Fix kernel Oops in AES-ECB mode

Jan Dakinevich <jan.dakinevich@gmail.com>
    KVM: nVMX: invvpid handling improvements

Jan Dakinevich <jan.dakinevich@gmail.com>
    KVM: VMX: clean up declaration of VPID/EPT invalidation types

Jim Mattson <jmattson@google.com>
    kvm: nVMX: Fix kernel panics induced by illegal INVEPT/INVVPID types

David Hildenbrand <david@redhat.com>
    KVM: nVMX: vmx_complete_nested_posted_interrupt() can't fail

David Hildenbrand <david@redhat.com>
    KVM: nVMX: kmap() can't fail

Darren Kenny <darren.kenny@oracle.com>
    x86/speculation: Fix typo IBRS_ATT, which should be IBRS_ALL

KarimAllah Ahmed <karahmed@amazon.de>
    x86/spectre: Simplify spectre_v2 command line parsing

David Woodhouse <dwmw@amazon.co.uk>
    x86/retpoline: Avoid retpolines for built-in __init functions

Dan Williams <dan.j.williams@intel.com>
    x86/kvm: Update spectre-v1 mitigation

Josh Poimboeuf <jpoimboe@redhat.com>
    x86/paravirt: Remove 'noreplace-paravirt' cmdline option

Colin Ian King <colin.king@canonical.com>
    x86/spectre: Fix spelling mistake: "vunerable"-> "vulnerable"

Dan Williams <dan.j.williams@intel.com>
    x86/spectre: Report get_user mitigation for spectre_v1

Dan Williams <dan.j.williams@intel.com>
    nl80211: Sanitize array index in parse_txq_params

Dan Williams <dan.j.williams@intel.com>
    vfs, fdtable: Prevent bounds-check bypass via speculative execution

Dan Williams <dan.j.williams@intel.com>
    x86/syscall: Sanitize syscall table de-references under speculation

Dan Williams <dan.j.williams@intel.com>
    x86/get_user: Use pointer masking to limit speculation

Dan Williams <dan.j.williams@intel.com>
    x86: Introduce barrier_nospec

Dan Williams <dan.j.williams@intel.com>
    x86: Implement array_index_mask_nospec

Dan Williams <dan.j.williams@intel.com>
    array_index_nospec: Sanitize speculative array de-references

Mark Rutland <mark.rutland@arm.com>
    Documentation: Document array_index_nospec

Dou Liyang <douly.fnst@cn.fujitsu.com>
    x86/spectre: Check CONFIG_RETPOLINE in command line parser

Thomas Gleixner <tglx@linutronix.de>
    x86/cpu/bugs: Make retpoline module warning conditional

Borislav Petkov <bp@suse.de>
    x86/bugs: Drop one "mitigation" from dmesg

Borislav Petkov <bp@suse.de>
    x86/nospec: Fix header guards names

Andi Kleen <ak@linux.intel.com>
    module/retpoline: Warn about missing retpoline in module

Peter Zijlstra <peterz@infradead.org>
    KVM: VMX: Make indirect call speculation safe

Peter Zijlstra <peterz@infradead.org>
    KVM: x86: Make indirect calls in emulator speculation safe

Waiman Long <longman@redhat.com>
    x86/retpoline: Remove the esp/rsp thunk

Wanpeng Li <wanpeng.li@hotmail.com>
    KVM: async_pf: Fix #DF due to inject "Page not Present" and "Page Ready" exceptions simultaneously

Arnd Bergmann <arnd@arndb.de>
    kasan: rework Kconfig settings

Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    drm/gma500: remove helper function

Borislav Petkov <bp@suse.de>
    x86/microcode/AMD: Change load_microcode_amd()'s param to bool to fix preemptibility bug

Michal Marek <mmarek@suse.com>
    genksyms: Fix segfault with invalid declarations

Andy Lutomirski <luto@kernel.org>
    dell-wmi, dell-laptop: depends DMI

Arnd Bergmann <arnd@arndb.de>
    netlink: fix nla_put_{u8,u16,u32} for KASAN

Vinod Koul <vinod.koul@intel.com>
    ASoC: Intel: Kconfig: fix build when ACPI is not enabled

Arnd Bergmann <arnd@arndb.de>
    ARM: tegra: select USB_ULPI from EHCI rather than platform

Arnd Bergmann <arnd@arndb.de>
    ncr5380: shut up gcc indentation warning

Arnd Bergmann <arnd@arndb.de>
    usb: phy: msm add regulator dependency

Arnd Bergmann <arnd@arndb.de>
    idle: i7300: add PCI dependency

Arnd Bergmann <arnd@arndb.de>
    binfmt_elf: compat: avoid unused function warning

Arnd Bergmann <arnd@arndb.de>
    isdn: sc: work around type mismatch warning

Arnd Bergmann <arnd@arndb.de>
    power: bq27xxx_battery: mark some symbols __maybe_unused

Arnd Bergmann <arnd@arndb.de>
    Revert "power: bq27xxx_battery: Remove unneeded dependency in Kconfig"

Miklos Szeredi <mszeredi@redhat.com>
    ncpfs: fix unused variable warning

Arnd Bergmann <arnd@arndb.de>
    gpio: xgene: mark PM functions as __maybe_unused

Arnd Bergmann <arnd@arndb.de>
    net: hp100: remove unnecessary #ifdefs

Jun Nie <jun.nie@linaro.org>
    dmaengine: zx: fix build warning

Arnd Bergmann <arnd@arndb.de>
    perf/x86: Shut up false-positive -Wmaybe-uninitialized warning

Arnd Bergmann <arnd@arndb.de>
    wireless: cw1200: use __maybe_unused to hide pm functions_

Arnd Bergmann <arnd@arndb.de>
    cw1200: fix bogus maybe-uninitialized warning

Arnd Bergmann <arnd@arndb.de>
    v4l: remove MEDIA_TUNER dependency for VIDEO_TUNER

Arnd Bergmann <arnd@arndb.de>
    hdpvr: hide unused variable

Thierry Reding <treding@nvidia.com>
    drm/gma500: Sanity-check pipe index

Heikki Krogerus <heikki.krogerus@linux.intel.com>
    serial: 8250_mid: fix broken DMA dependency

Arnd Bergmann <arnd@arndb.de>
    ASoC: rockchip: use __maybe_unused to hide st_irq_syscfg_resume

Arnd Bergmann <arnd@arndb.de>
    ISDN: eicon: reduce stack size of sig_ind function

Arnd Bergmann <arnd@arndb.de>
    em28xx: only use mt9v011 if camera support is enabled

Arnd Bergmann <arnd@arndb.de>
    go7007: add MEDIA_CAMERA_SUPPORT dependency

Arnd Bergmann <arnd@arndb.de>
    KVM: add X86_LOCAL_APIC dependency

Arnd Bergmann <arnd@arndb.de>
    Input: tca8418_keypad - hide gcc-4.9 -Wmaybe-uninitialized warning

Arnd Bergmann <arnd@arndb.de>
    drm/nouveau: hide gcc-4.9 -Wmaybe-uninitialized

Arnd Bergmann <arnd@arndb.de>
    tc358743: fix register i2c_rd/wr functions

Randy Dunlap <rdunlap@infradead.org>
    staging: unisys: visorinput depends on INPUT

Luis R. Rodriguez <mcgrof@kernel.org>
    i2c: remove __init from i2c_register_board_info()

Arnd Bergmann <arnd@arndb.de>
    b2c2: flexcop: avoid unused function warnings

Arnd Bergmann <arnd@arndb.de>
    infiniband: cxgb4: use %pR format string for printing resources

Colin Ian King <colin.king@canonical.com>
    iio: adc: axp288: remove redundant duplicate const on axp288_adc_channels

Arnd Bergmann <arnd@arndb.de>
    ASoC: mediatek: add i2c dependency

Arnd Bergmann <arnd@arndb.de>
    genirq/msi: Add stubs for get_cached_msi_msg/pci_write_msi_msg

Arnd Bergmann <arnd@arndb.de>
    tty: cyclades: cyz_interrupt is only used for PCI

Paul Bolle <pebolle@tiscali.nl>
    drm/vmwgfx: use *_32_bits() macros

Arnd Bergmann <arnd@arndb.de>
    tlan: avoid unused label with PCI=n

Colin Ian King <colin.king@canonical.com>
    tc1100-wmi: fix build warning when CONFIG_PM not enabled

Arnd Bergmann <arnd@arndb.de>
    ipv4: ipconfig: avoid unused ic_proto_used symbol

Arnd Bergmann <arnd@arndb.de>
    netfilter: ipvs: avoid unused variable warnings

Borislav Petkov <bp@suse.de>
    x86/platform/olpc: Fix resume handler build warning

Glen Lee <glen.lee@atmel.com>
    staging: wilc1000: fix kbuild test robot error

Arnd Bergmann <arnd@arndb.de>
    rtlwifi: fix gcc-6 indentation warning

Arnd Bergmann <arnd@arndb.de>
    USB: cdc_subset: only build when one driver is enabled

Arnd Bergmann <arnd@arndb.de>
    hwrng: exynos - use __maybe_unused to hide pm functions

Arnd Bergmann <arnd@arndb.de>
    fbdev: sm712fb: avoid unused function warnings

Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    Drivers: hv: vmbus: fix build warning

Arnd Bergmann <arnd@arndb.de>
    modsign: hide openssl output in silent builds

Arnd Bergmann <arnd@arndb.de>
    fbdev: s6e8ax0: avoid unused function warnings

Arnd Bergmann <arnd@arndb.de>
    mtd: cfi: enforce valid geometry configuration

Arnd Bergmann <arnd@arndb.de>
    mtd: sh_flctl: pass FIFO as physical address

Borislav Petkov <bp@suse.de>
    amd-xgbe: Fix unused suspend handlers build warning

Arnd Bergmann <arnd@arndb.de>
    fbdev: auo_k190x: avoid unused function warnings

Arnd Bergmann <arnd@arndb.de>
    driver-core: use 'dev' argument in dev_dbg_ratelimited stub

Arnd Bergmann <arnd@arndb.de>
    target/user: Fix cast from pointer to phys_addr_t

Arnd Bergmann <arnd@arndb.de>
    tty: hvc_xen: hide xen_console_remove when unused

Arnd Bergmann <arnd@arndb.de>
    usb: musb/ux500: remove duplicate check for dma_is_compatible

Arnd Bergmann <arnd@arndb.de>
    pwc: hide unused label

Arnd Bergmann <arnd@arndb.de>
    SCSI: initio: remove duplicate module device table

Arnd Bergmann <arnd@arndb.de>
    scsi: mvumi: use __maybe_unused to hide pm functions

Daniel Wagner <daniel.wagner@bmw-carit.de>
    video: Use bool instead int pointer for get_opt_bool() argument

Arnd Bergmann <arnd@arndb.de>
    fbdev: sis: enforce selection of at least one backend

Arnd Bergmann <arnd@arndb.de>
    staging: ste_rmi4: avoid unused function warnings

Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    video: fbdev: sis: remove unused variable

Arnd Bergmann <arnd@arndb.de>
    scsi: fdomain: drop fdomain_pci_tbl when built-in

Arnd Bergmann <arnd@arndb.de>
    mptfusion: hide unused seq_mpt_print_ioc_summary function

Julia Lawall <julia.lawall@lip6.fr>
    mtd: maps: add __init attribute

Arnd Bergmann <arnd@arndb.de>
    mtd: ichxrom: maybe-uninitialized with gcc-4.9

Arnd Bergmann <arnd@arndb.de>
    md: avoid warning for 32-bit sector_t

Arnd Bergmann <arnd@arndb.de>
    profile: hide unused functions when !CONFIG_PROC_FS

Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    dpt_i2o: fix build warning

Fabian Frederick <fabf@skynet.be>
    drivers/net: fix eisa_driver probe section mismatch

Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    scsi: sim710: fix build warning

Arnd Bergmann <arnd@arndb.de>
    x86/boot: Avoid warning for zero-filling .bss

Arnd Bergmann <arnd@arndb.de>
    thermal: spear: use __maybe_unused for PM functions

Arnd Bergmann <arnd@arndb.de>
    ssb: mark ssb_bus_register as __maybe_unused

Arnd Bergmann <arnd@arndb.de>
    reiserfs: avoid a -Wmaybe-uninitialized warning

Arnd Bergmann <arnd@arndb.de>
    ALSA: hda/ca0132 - fix possible NULL pointer use

Kefeng Wang <wangkefeng.wang@huawei.com>
    arm64: Kconfig: select COMPAT_BINFMT_ELF only when BINFMT_ELF is set

Arnd Bergmann <arnd@arndb.de>
    scsi: advansys: fix uninitialized data access

Arnd Bergmann <arnd@arndb.de>
    x86/platform: Add PCI dependency for PUNIT_ATOM_DEBUG

Arnd Bergmann <arnd@arndb.de>
    x86: add MULTIUSER dependency for KVM

Arnd Bergmann <arnd@arndb.de>
    thermal: fix INTEL_SOC_DTS_IOSF_CORE dependencies

Arnd Bergmann <arnd@arndb.de>
    x86/build: Silence the build with "make -s"

Josh Poimboeuf <jpoimboe@redhat.com>
    tools build: Add tools tree support for 'make -s'

Arnd Bergmann <arnd@arndb.de>
    x86/fpu/math-emu: Fix possible uninitialized variable use

Arnd Bergmann <arnd@arndb.de>
    arm64: define BUG() instruction without CONFIG_BUG

Borislav Petkov <bp@suse.de>
    x86/ras/inject: Make it depend on X86_LOCAL_APIC=y

Arnd Bergmann <arnd@arndb.de>
    scsi: advansys: fix build warning for PCI=n

Arnd Bergmann <arnd@arndb.de>
    video: fbdev: via: remove possibly unused variables

Borislav Petkov <bp@suse.de>
    platform/x86: intel_mid_thermal: Fix suspend handlers unused warning

Augusto Mecking Caringi <augustocaringi@gmail.com>
    gpio: intel-mid: Fix build warning when !CONFIG_PM

Arnd Bergmann <arnd@arndb.de>
    vmxnet3: prevent building with 64K pages

Arnd Bergmann <arnd@arndb.de>
    isdn: icn: remove a #warning

Arnd Bergmann <arnd@arndb.de>
    virtio_balloon: prevent uninitialized variable use

Jia-Ju Bai <baijiaju1990@163.com>
    hippi: Fix a Fix a possible sleep-in-atomic bug in rr_close

Jan Beulich <JBeulich@suse.com>
    xen: XEN_ACPI_PROCESSOR is Dom0-only

Karol Herbst <kherbst@redhat.com>
    x86/mm/kmmio: Fix mmiotrace for page unaligned addresses

Dave Young <dyoung@redhat.com>
    mm/early_ioremap: Fix boot hang with earlyprintk=efi,keep

Tobias Jordan <Tobias.Jordan@elektrobit.com>
    dmaengine: jz4740: disable/unprepare clk if probe fails

Russell King <rmk+kernel@armlinux.org.uk>
    drm/armada: fix leak of crtc structure

Steffen Klassert <steffen.klassert@secunet.com>
    xfrm: Fix stack-out-of-bounds with misconfigured transport mode policies.

Takuo Koguchi <takuo.koguchi@gmail.com>
    spi: sun4i: disable clocks in the remove function

Stefan Potyra <Stefan.Potyra@elektrobit.com>
    ASoC: rockchip: disable clock on error

Cai Li <cai.li@spreadtrum.com>
    clk: fix a panic error caused by accessing NULL pointer

Gustavo A. R. Silva <garsilva@embeddedor.com>
    dmaengine: at_hdmac: fix potential NULL pointer dereference in atc_prep_dma_interleaved

Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    dmaengine: ioat: Fix error handling path

Eric Biggers <ebiggers3@gmail.com>
    509: fix printing uninitialized stack memory when OID is empty

Nikolay Borisov <nborisov@suse.com>
    btrfs: Fix possible off-by-one in btrfs_search_path_in_tree

Nogah Frankel <nogahf@mellanox.com>
    net_sched: red: Avoid illegal values

Nogah Frankel <nogahf@mellanox.com>
    net_sched: red: Avoid devision by zero

Zumeng Chen <zumeng.chen@gmail.com>
    gianfar: fix a flooded alignment reports because of padding issue.

Stefan Haberland <sth@linux.vnet.ibm.com>
    s390/dasd: prevent prefix I/O error

Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
    powerpc/perf: Fix oops when grouping different pmu events

Greg Ungerer <gerg@linux-m68k.org>
    m68k: add missing SOFTIRQENTRY_TEXT linker section

Gao Feng <gfree.wind@vip.163.com>
    ipvlan: Add the skb->mark as flow4's member to lookup route

Will Deacon <will.deacon@arm.com>
    scripts/kernel-doc: Don't fail with status != 0 if error encountered with -none

Moni Shoua <monis@mellanox.com>
    RDMA/cma: Make sure that PSN is not over max allowed

Andre Przywara <andre.przywara@arm.com>
    pinctrl: sunxi: Fix A80 interrupt pin bank

Mauro Carvalho Chehab <mchehab@s-opensource.com>
    media: s5k6aa: describe some function parameters

Satheesh Rajendran <sathnaga@linux.vnet.ibm.com>
    perf bench numa: Fixup discontiguous/sparse numa nodes

Jiri Olsa <jolsa@kernel.org>
    perf top: Fix window dimensions change handling

Peter Ujfalusi <peter.ujfalusi@ti.com>
    ARM: dts: am4372: Correct the interrupts_properties of McASP

Tony Lindgren <tony@atomide.com>
    ARM: dts: Fix omap4 hang with GPS connected to USB by using wakeupgen

Keerthy <j-keerthy@ti.com>
    ARM: AM33xx: PRM: Remove am33xx_pwrdm_read_prev_pwrst function

Tony Lindgren <tony@atomide.com>
    ARM: OMAP2+: Fix SRAM virt to phys translation for save_secure_ram_context

Randy Dunlap <rdunlap@infradead.org>
    usb: build drivers/usb/common/ when USB_SUPPORT is set

Shuah Khan <shuahkh@osg.samsung.com>
    usbip: keep usbip_device sockfd state in sync with tcp_socket

Alexandru Ardelean <alexandru.ardelean@analog.com>
    staging: iio: adc: ad7192: fix external frequency setting

Eric Biggers <ebiggers@google.com>
    binder: check for binder_thread allocation failure in binder_poll()

Ben Hutchings <ben@decadent.org.uk>
    staging: android: ashmem: Fix a race condition in pin ioctls

Paolo Abeni <pabeni@redhat.com>
    dn_getsockoptdecnet: move nf_{get/set}sockopt outside sock lock

Dave Jones <davej@codemonkey.org.uk>
    Make DST_CACHE a silent config option

Arnd Bergmann <arnd@arndb.de>
    arm64: dts: add #cooling-cells to CPU nodes

Arnd Bergmann <arnd@arndb.de>
    video: fbdev/mmp: add MODULE_LICENSE

Arnd Bergmann <arnd@arndb.de>
    ASoC: ux500: add MODULE_LICENSE tag

Willem de Bruijn <willemb@google.com>
    net: avoid skb_warn_bad_offload on IS_ERR

Cong Wang <xiyou.wangcong@gmail.com>
    netfilter: xt_RATEEST: acquire xt_rateest_mutex for hash insert

Paolo Abeni <pabeni@redhat.com>
    netfilter: on sockopt() acquire sock lock only in the required scope

Dmitry Vyukov <dvyukov@google.com>
    netfilter: ipt_CLUSTERIP: fix out-of-bounds accesses in clusterip_tg_check()

Eric Dumazet <edumazet@google.com>
    netfilter: x_tables: avoid out-of-bounds reads in xt_request_find_{match|target}

Dmitry Vyukov <dvyukov@google.com>
    netfilter: x_tables: fix int overflow in xt_alloc_table_info()

Wanpeng Li <wanpeng.li@hotmail.com>
    KVM: x86: fix escape of guest dr6 to the host

Laura Abbott <labbott@redhat.com>
    staging: android: ion: Add __GFP_NOWARN for system contig heap

Eric Biggers <ebiggers@google.com>
    crypto: x86/twofish-3way - Fix %rbp usage

Paul Moore <paul@paul-moore.com>
    selinux: skip bounded transition processing if the policy isn't loaded

Paul Moore <paul@paul-moore.com>
    selinux: ensure the context is NUL terminated in security_context_to_sid_core()

David Howells <dhowells@redhat.com>
    Provide a function to create a NUL-terminated string from unterminated data

Chris Wilson <chris@chris-wilson.co.uk>
    drm: Require __GFP_NOFAIL for the legacy drm_modeset_lock_all

Jens Axboe <axboe@kernel.dk>
    blktrace: fix unlocked registration of tracepoints

Cong Wang <xiyou.wangcong@gmail.com>
    xfrm: check id proto in validate_tmpl()

Steffen Klassert <steffen.klassert@secunet.com>
    xfrm: Fix stack-out-of-bounds read on socket policy lookup.

Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    mm,vmscan: Make unregister_shrinker() no-op if register_shrinker() failed.

Johannes Berg <johannes.berg@intel.com>
    cfg80211: check dev_set_name() return value

Paolo Abeni <pabeni@redhat.com>
    net: replace dst_cache ip6_tunnel implementation with the generic one

Paolo Abeni <pabeni@redhat.com>
    net: add dst_cache support


-------------

Diffstat:

 Documentation/kernel-parameters.txt                |    2 -
 Documentation/speculation.txt                      |   90 ++
 Makefile                                           |   10 +-
 arch/arm/boot/dts/am4372.dtsi                      |    6 +-
 arch/arm/boot/dts/omap4.dtsi                       |    2 -
 arch/arm/mach-omap2/omap-secure.c                  |   19 +
 arch/arm/mach-omap2/omap-secure.h                  |    4 +
 arch/arm/mach-omap2/pm.h                           |    4 -
 arch/arm/mach-omap2/pm34xx.c                       |   13 +-
 arch/arm/mach-omap2/prm33xx.c                      |   12 -
 arch/arm/mach-omap2/sleep34xx.S                    |   26 +-
 arch/arm/mach-tegra/Kconfig                        |    2 -
 arch/arm64/Kconfig                                 |    2 +-
 arch/arm64/Kconfig.platforms                       |    2 -
 arch/arm64/boot/dts/mediatek/mt8173.dtsi           |    2 +
 arch/arm64/include/asm/bug.h                       |   33 +-
 arch/m68k/kernel/vmlinux-nommu.lds                 |    2 +
 arch/m68k/kernel/vmlinux-std.lds                   |    2 +
 arch/m68k/kernel/vmlinux-sun3.lds                  |    2 +
 arch/powerpc/perf/core-book3s.c                    |    4 +-
 arch/x86/Kconfig                                   |    2 +-
 arch/x86/Kconfig.debug                             |    1 +
 arch/x86/boot/Makefile                             |    5 +-
 arch/x86/crypto/twofish-x86_64-asm_64-3way.S       |  112 +-
 arch/x86/entry/common.c                            |    2 +
 arch/x86/include/asm/asm-prototypes.h              |    1 -
 arch/x86/include/asm/barrier.h                     |   28 +
 arch/x86/include/asm/microcode_amd.h               |    1 -
 arch/x86/include/asm/msr.h                         |    3 +-
 arch/x86/include/asm/nospec-branch.h               |    8 +-
 arch/x86/include/asm/vmx.h                         |    5 +-
 arch/x86/kernel/alternative.c                      |   14 -
 arch/x86/kernel/cpu/bugs.c                         |  122 +-
 arch/x86/kernel/cpu/mcheck/mce-inject.c            |    5 +-
 arch/x86/kernel/cpu/microcode/amd.c                |   17 +-
 arch/x86/kernel/cpu/perf_event.c                   |    4 +-
 arch/x86/kernel/head_32.S                          |    9 +-
 arch/x86/kvm/Kconfig                               |    3 +-
 arch/x86/kvm/emulate.c                             |    9 +-
 arch/x86/kvm/vmx.c                                 |   83 +-
 arch/x86/kvm/x86.c                                 |   40 +-
 arch/x86/lib/getuser.S                             |   10 +
 arch/x86/lib/retpoline.S                           |    1 -
 arch/x86/math-emu/Makefile                         |    4 +-
 arch/x86/math-emu/reg_compare.c                    |   16 +-
 arch/x86/mm/ioremap.c                              |    4 +-
 arch/x86/mm/kmmio.c                                |   12 +-
 arch/x86/platform/olpc/olpc-xo15-sci.c             |    2 +
 certs/Makefile                                     |   33 +-
 drivers/Makefile                                   |    1 +
 drivers/android/binder.c                           |    2 +
 drivers/char/hw_random/exynos-rng.c                |   10 +-
 drivers/crypto/s5p-sss.c                           |   13 +-
 drivers/dma/at_hdmac.c                             |    4 +-
 drivers/dma/dma-jz4740.c                           |    4 +-
 drivers/dma/ioat/init.c                            |    2 +-
 drivers/dma/zx296702_dma.c                         |    2 +-
 drivers/gpio/gpio-intel-mid.c                      |    2 +-
 drivers/gpio/gpio-xgene.c                          |   13 +-
 drivers/gpu/drm/armada/armada_crtc.c               |   25 +-
 drivers/gpu/drm/drm_modeset_lock.c                 |    2 +-
 drivers/gpu/drm/gma500/mdfld_dsi_dpi.c             |   10 +-
 drivers/gpu/drm/gma500/mdfld_dsi_output.c          |   12 +-
 drivers/gpu/drm/nouveau/nouveau_gem.c              |    2 +-
 drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf.c             |    7 +-
 drivers/hv/hv.c                                    |    5 +-
 drivers/i2c/i2c-boardinfo.c                        |    4 +-
 drivers/idle/Kconfig                               |    1 +
 drivers/iio/adc/axp288_adc.c                       |    2 +-
 drivers/infiniband/core/cma.c                      |    1 +
 drivers/infiniband/hw/cxgb4/device.c               |    5 +-
 drivers/input/keyboard/tca8418_keypad.c            |   21 +-
 drivers/isdn/hardware/eicon/message.c              |   16 +-
 drivers/isdn/icn/icn.c                             |    2 +-
 drivers/isdn/sc/init.c                             |    7 +-
 drivers/md/md.c                                    |   10 +-
 drivers/media/common/b2c2/flexcop-fe-tuner.c       |    4 +-
 drivers/media/i2c/s5k6aa.c                         |    5 +
 drivers/media/i2c/tc358743.c                       |   46 +-
 drivers/media/usb/em28xx/Kconfig                   |    2 +-
 drivers/media/usb/go7007/Kconfig                   |    2 +-
 drivers/media/usb/hdpvr/hdpvr-core.c               |    2 +
 drivers/media/usb/pwc/pwc-if.c                     |    2 +
 drivers/media/v4l2-core/Kconfig                    |    1 -
 drivers/message/fusion/mptbase.c                   |    2 +
 drivers/mtd/chips/Kconfig                          |    4 +
 drivers/mtd/maps/ck804xrom.c                       |    4 +-
 drivers/mtd/maps/esb2rom.c                         |    4 +-
 drivers/mtd/maps/ichxrom.c                         |   10 +-
 drivers/mtd/nand/sh_flctl.c                        |    5 +-
 drivers/net/Kconfig                                |    3 +
 drivers/net/ethernet/3com/3c509.c                  |    2 +-
 drivers/net/ethernet/3com/3c59x.c                  |    2 +-
 drivers/net/ethernet/amd/xgbe/xgbe-main.c          |    4 +-
 drivers/net/ethernet/dec/tulip/de4x5.c             |    2 +-
 drivers/net/ethernet/freescale/gianfar.c           |    6 +-
 drivers/net/ethernet/hp/hp100.c                    |   20 +-
 drivers/net/ethernet/ti/tlan.c                     |    2 +-
 drivers/net/hippi/rrunner.c                        |    2 +-
 drivers/net/ipvlan/ipvlan_core.c                   |    1 +
 drivers/net/usb/Kconfig                            |   10 +
 drivers/net/usb/Makefile                           |    2 +-
 drivers/net/wireless/cw1200/cw1200_spi.c           |    9 +-
 drivers/net/wireless/cw1200/pm.h                   |    9 +-
 drivers/net/wireless/cw1200/wsm.c                  |    8 +-
 .../net/wireless/realtek/rtlwifi/rtl8821ae/dm.c    |    6 +-
 drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c          |    6 +-
 drivers/platform/x86/Kconfig                       |    2 +
 drivers/platform/x86/intel_mid_thermal.c           |    2 +
 drivers/platform/x86/tc1100-wmi.c                  |    2 +
 drivers/power/Kconfig                              |    1 +
 drivers/power/bq27xxx_battery.c                    |    6 +-
 drivers/s390/block/dasd_eckd.c                     |   16 +-
 drivers/scsi/advansys.c                            |   24 +-
 drivers/scsi/dpt_i2o.c                             |    3 +
 drivers/scsi/fdomain.c                             |    2 +-
 drivers/scsi/g_NCR5380.c                           |    5 +-
 drivers/scsi/initio.c                              |   16 -
 drivers/scsi/mvumi.c                               |    4 +-
 drivers/scsi/sim710.c                              |    3 +-
 drivers/spi/spi-sun4i.c                            |    2 +-
 drivers/ssb/main.c                                 |    7 +-
 drivers/staging/android/ashmem.c                   |   19 +-
 drivers/staging/android/ion/ion_system_heap.c      |    2 +-
 drivers/staging/iio/adc/ad7192.c                   |   27 +-
 drivers/staging/ste_rmi4/synaptics_i2c_rmi4.c      |    7 +-
 drivers/staging/unisys/visorinput/Kconfig          |    2 +-
 drivers/staging/wilc1000/wilc_wlan_if.h            |    1 +
 drivers/target/target_core_user.c                  |    2 +-
 drivers/thermal/Kconfig                            |    4 +-
 drivers/thermal/spear_thermal.c                    |    6 +-
 drivers/tty/Kconfig                                |    2 +-
 drivers/tty/hvc/hvc_xen.c                          |    2 +-
 drivers/tty/serial/8250/Kconfig                    |    2 +-
 drivers/usb/host/Kconfig                           |    2 +
 drivers/usb/musb/ux500_dma.c                       |    3 -
 drivers/usb/phy/Kconfig                            |    1 +
 drivers/usb/usbip/stub_dev.c                       |    3 +
 drivers/usb/usbip/vhci_hcd.c                       |    2 +
 drivers/video/fbdev/Kconfig                        |    1 +
 drivers/video/fbdev/auo_k190x.c                    |   11 +-
 drivers/video/fbdev/exynos/s6e8ax0.c               |   13 +-
 drivers/video/fbdev/intelfb/intelfbdrv.c           |    2 +-
 drivers/video/fbdev/mmp/core.c                     |    5 +
 drivers/video/fbdev/sis/init301.c                  |   10 +-
 drivers/video/fbdev/sm712fb.c                      |   16 +-
 drivers/video/fbdev/via/viafbdev.c                 |    8 +-
 drivers/virtio/virtio_balloon.c                    |    2 +
 drivers/xen/Kconfig                                |    2 +-
 fs/btrfs/ioctl.c                                   |    2 +-
 fs/compat_binfmt_elf.c                             |    2 +
 fs/ncpfs/dir.c                                     |    3 +-
 fs/reiserfs/lbalance.c                             |    2 +-
 fs/reiserfs/reiserfs.h                             |    1 -
 include/linux/device.h                             |    7 +-
 include/linux/fdtable.h                            |    5 +-
 include/linux/init.h                               |    9 +-
 include/linux/module.h                             |    9 +
 include/linux/msi.h                                |   11 +-
 include/linux/mtd/sh_flctl.h                       |    1 +
 include/linux/nospec.h                             |   72 +
 include/linux/string.h                             |    1 +
 include/net/dst_cache.h                            |   97 ++
 include/net/ip6_tunnel.h                           |   15 +-
 include/net/netlink.h                              |   73 +-
 include/net/red.h                                  |   13 +-
 include/trace/events/clk.h                         |    4 +-
 kernel/module.c                                    |   11 +
 kernel/profile.c                                   |    4 +-
 kernel/trace/blktrace.c                            |   32 +-
 lib/Kconfig.debug                                  |    2 +-
 lib/oid_registry.c                                 |    8 +-
 mm/early_ioremap.c                                 |    2 +-
 mm/util.c                                          |   24 +
 mm/vmscan.c                                        |    3 +
 net/Kconfig                                        |    4 +
 net/core/Makefile                                  |    1 +
 net/core/dev.c                                     |    2 +-
 net/core/dst_cache.c                               |  168 ++
 net/decnet/af_decnet.c                             |   62 +-
 net/ipv4/ip_sockglue.c                             |   14 +-
 net/ipv4/ipconfig.c                                |    4 +
 net/ipv4/netfilter/ipt_CLUSTERIP.c                 |   16 +-
 net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c     |    6 +-
 net/ipv6/Kconfig                                   |    1 +
 net/ipv6/ip6_gre.c                                 |   12 +-
 net/ipv6/ip6_tunnel.c                              |  149 +-
 net/ipv6/ip6_vti.c                                 |    2 +-
 net/ipv6/ipv6_sockglue.c                           |   17 +-
 net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c     |   18 +-
 net/netfilter/ipvs/ip_vs_app.c                     |    8 +-
 net/netfilter/ipvs/ip_vs_ctl.c                     |   15 +-
 net/netfilter/x_tables.c                           |   10 +-
 net/netfilter/xt_RATEEST.c                         |   22 +-
 net/sched/sch_choke.c                              |    3 +
 net/sched/sch_gred.c                               |    3 +
 net/sched/sch_red.c                                |    2 +
 net/sched/sch_sfq.c                                |    3 +
 net/wireless/core.c                                |    8 +-
 net/wireless/nl80211.c                             |    9 +-
 net/xfrm/xfrm_policy.c                             |    8 +-
 net/xfrm/xfrm_user.c                               |   24 +
 scripts/genksyms/parse.tab.c_shipped               | 1682 +++++++++-----------
 scripts/genksyms/parse.tab.h_shipped               |  133 +-
 scripts/genksyms/parse.y                           |    2 -
 scripts/kernel-doc                                 |    2 +-
 scripts/mod/modpost.c                              |    9 +
 security/selinux/ss/services.c                     |   21 +-
 sound/pci/hda/patch_ca0132.c                       |    3 +
 sound/soc/intel/Kconfig                            |    7 +-
 sound/soc/mediatek/Kconfig                         |    4 +-
 sound/soc/rockchip/rockchip_spdif.c                |   22 +-
 sound/soc/ux500/mop500.c                           |    4 +
 sound/soc/ux500/ux500_pcm.c                        |    5 +
 tools/build/Makefile.build                         |   10 +
 tools/perf/bench/numa.c                            |   56 +-
 tools/perf/builtin-top.c                           |   15 +-
 tools/scripts/Makefile.include                     |   12 +-
 218 files changed, 2535 insertions(+), 1875 deletions(-)

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 001/193] net: add dst_cache support
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
@ 2018-02-23 18:23 ` Greg Kroah-Hartman
  2018-02-23 18:23 ` [PATCH 4.4 002/193] net: replace dst_cache ip6_tunnel implementation with the generic one Greg Kroah-Hartman
                   ` (198 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:23 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Paolo Abeni, David S. Miller,
	Manoj Boopathi Raj

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Paolo Abeni <pabeni@redhat.com>

commit 911362c70df5b766c243dc297fadeaced786ffd8 upstream.

This patch add a generic, lockless dst cache implementation.
The need for lock is avoided updating the dst cache fields
only in per cpu scope, and requiring that the cache manipulation
functions are invoked with the local bh disabled.

The refresh_ts and reset_ts fields are used to ensure the cache
consistency in case of cuncurrent cache update (dst_cache_set*) and
reset operation (dst_cache_reset).

Consider the following scenario:

CPU1:                                   	CPU2:
  <cache lookup with emtpy cache: it fails>
  <get dst via uncached route lookup>
						<related configuration changes>
                                        	dst_cache_reset()
  dst_cache_set()

The dst entry set passed to dst_cache_set() should not be used
for later dst cache lookup, because it's obtained using old
configuration values.

Since the refresh_ts is updated only on dst_cache lookup, the
cached value in the above scenario will be discarded on the next
lookup.

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Suggested-and-acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Manoj Boopathi Raj <manojboopathi@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 include/net/dst_cache.h |   97 +++++++++++++++++++++++++++
 net/Kconfig             |    4 +
 net/core/Makefile       |    1 
 net/core/dst_cache.c    |  168 ++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 270 insertions(+)

--- /dev/null
+++ b/include/net/dst_cache.h
@@ -0,0 +1,97 @@
+#ifndef _NET_DST_CACHE_H
+#define _NET_DST_CACHE_H
+
+#include <linux/jiffies.h>
+#include <net/dst.h>
+#if IS_ENABLED(CONFIG_IPV6)
+#include <net/ip6_fib.h>
+#endif
+
+struct dst_cache {
+	struct dst_cache_pcpu __percpu *cache;
+	unsigned long reset_ts;
+};
+
+/**
+ *	dst_cache_get - perform cache lookup
+ *	@dst_cache: the cache
+ *
+ *	The caller should use dst_cache_get_ip4() if it need to retrieve the
+ *	source address to be used when xmitting to the cached dst.
+ *	local BH must be disabled.
+ */
+struct dst_entry *dst_cache_get(struct dst_cache *dst_cache);
+
+/**
+ *	dst_cache_get_ip4 - perform cache lookup and fetch ipv4 source address
+ *	@dst_cache: the cache
+ *	@saddr: return value for the retrieved source address
+ *
+ *	local BH must be disabled.
+ */
+struct rtable *dst_cache_get_ip4(struct dst_cache *dst_cache, __be32 *saddr);
+
+/**
+ *	dst_cache_set_ip4 - store the ipv4 dst into the cache
+ *	@dst_cache: the cache
+ *	@dst: the entry to be cached
+ *	@saddr: the source address to be stored inside the cache
+ *
+ *	local BH must be disabled.
+ */
+void dst_cache_set_ip4(struct dst_cache *dst_cache, struct dst_entry *dst,
+		       __be32 saddr);
+
+#if IS_ENABLED(CONFIG_IPV6)
+
+/**
+ *	dst_cache_set_ip6 - store the ipv6 dst into the cache
+ *	@dst_cache: the cache
+ *	@dst: the entry to be cached
+ *	@saddr: the source address to be stored inside the cache
+ *
+ *	local BH must be disabled.
+ */
+void dst_cache_set_ip6(struct dst_cache *dst_cache, struct dst_entry *dst,
+		       const struct in6_addr *addr);
+
+/**
+ *	dst_cache_get_ip6 - perform cache lookup and fetch ipv6 source address
+ *	@dst_cache: the cache
+ *	@saddr: return value for the retrieved source address
+ *
+ *	local BH must be disabled.
+ */
+struct dst_entry *dst_cache_get_ip6(struct dst_cache *dst_cache,
+				    struct in6_addr *saddr);
+#endif
+
+/**
+ *	dst_cache_reset - invalidate the cache contents
+ *	@dst_cache: the cache
+ *
+ *	This do not free the cached dst to avoid races and contentions.
+ *	the dst will be freed on later cache lookup.
+ */
+static inline void dst_cache_reset(struct dst_cache *dst_cache)
+{
+	dst_cache->reset_ts = jiffies;
+}
+
+/**
+ *	dst_cache_init - initialize the cache, allocating the required storage
+ *	@dst_cache: the cache
+ *	@gfp: allocation flags
+ */
+int dst_cache_init(struct dst_cache *dst_cache, gfp_t gfp);
+
+/**
+ *	dst_cache_destroy - empty the cache and free the allocated storage
+ *	@dst_cache: the cache
+ *
+ *	No synchronization is enforced: it must be called only when the cache
+ *	is unsed.
+ */
+void dst_cache_destroy(struct dst_cache *dst_cache);
+
+#endif
--- a/net/Kconfig
+++ b/net/Kconfig
@@ -383,6 +383,10 @@ config LWTUNNEL
 	  weight tunnel endpoint. Tunnel encapsulation parameters are stored
 	  with light weight tunnel state associated with fib routes.
 
+config DST_CACHE
+	bool "dst cache"
+	default n
+
 endif   # if NET
 
 # Used by archs to tell that they support BPF_JIT
--- a/net/core/Makefile
+++ b/net/core/Makefile
@@ -24,3 +24,4 @@ obj-$(CONFIG_NET_PTP_CLASSIFY) += ptp_cl
 obj-$(CONFIG_CGROUP_NET_PRIO) += netprio_cgroup.o
 obj-$(CONFIG_CGROUP_NET_CLASSID) += netclassid_cgroup.o
 obj-$(CONFIG_LWTUNNEL) += lwtunnel.o
+obj-$(CONFIG_DST_CACHE) += dst_cache.o
--- /dev/null
+++ b/net/core/dst_cache.c
@@ -0,0 +1,168 @@
+/*
+ * net/core/dst_cache.c - dst entry cache
+ *
+ * Copyright (c) 2016 Paolo Abeni <pabeni@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#include <linux/kernel.h>
+#include <linux/percpu.h>
+#include <net/dst_cache.h>
+#include <net/route.h>
+#if IS_ENABLED(CONFIG_IPV6)
+#include <net/ip6_fib.h>
+#endif
+#include <uapi/linux/in.h>
+
+struct dst_cache_pcpu {
+	unsigned long refresh_ts;
+	struct dst_entry *dst;
+	u32 cookie;
+	union {
+		struct in_addr in_saddr;
+		struct in6_addr in6_saddr;
+	};
+};
+
+void dst_cache_per_cpu_dst_set(struct dst_cache_pcpu *dst_cache,
+			       struct dst_entry *dst, u32 cookie)
+{
+	dst_release(dst_cache->dst);
+	if (dst)
+		dst_hold(dst);
+
+	dst_cache->cookie = cookie;
+	dst_cache->dst = dst;
+}
+
+struct dst_entry *dst_cache_per_cpu_get(struct dst_cache *dst_cache,
+					struct dst_cache_pcpu *idst)
+{
+	struct dst_entry *dst;
+
+	dst = idst->dst;
+	if (!dst)
+		goto fail;
+
+	/* the cache already hold a dst reference; it can't go away */
+	dst_hold(dst);
+
+	if (unlikely(!time_after(idst->refresh_ts, dst_cache->reset_ts) ||
+		     (dst->obsolete && !dst->ops->check(dst, idst->cookie)))) {
+		dst_cache_per_cpu_dst_set(idst, NULL, 0);
+		dst_release(dst);
+		goto fail;
+	}
+	return dst;
+
+fail:
+	idst->refresh_ts = jiffies;
+	return NULL;
+}
+
+struct dst_entry *dst_cache_get(struct dst_cache *dst_cache)
+{
+	if (!dst_cache->cache)
+		return NULL;
+
+	return dst_cache_per_cpu_get(dst_cache, this_cpu_ptr(dst_cache->cache));
+}
+EXPORT_SYMBOL_GPL(dst_cache_get);
+
+struct rtable *dst_cache_get_ip4(struct dst_cache *dst_cache, __be32 *saddr)
+{
+	struct dst_cache_pcpu *idst;
+	struct dst_entry *dst;
+
+	if (!dst_cache->cache)
+		return NULL;
+
+	idst = this_cpu_ptr(dst_cache->cache);
+	dst = dst_cache_per_cpu_get(dst_cache, idst);
+	if (!dst)
+		return NULL;
+
+	*saddr = idst->in_saddr.s_addr;
+	return container_of(dst, struct rtable, dst);
+}
+EXPORT_SYMBOL_GPL(dst_cache_get_ip4);
+
+void dst_cache_set_ip4(struct dst_cache *dst_cache, struct dst_entry *dst,
+		       __be32 saddr)
+{
+	struct dst_cache_pcpu *idst;
+
+	if (!dst_cache->cache)
+		return;
+
+	idst = this_cpu_ptr(dst_cache->cache);
+	dst_cache_per_cpu_dst_set(idst, dst, 0);
+	idst->in_saddr.s_addr = saddr;
+}
+EXPORT_SYMBOL_GPL(dst_cache_set_ip4);
+
+#if IS_ENABLED(CONFIG_IPV6)
+void dst_cache_set_ip6(struct dst_cache *dst_cache, struct dst_entry *dst,
+		       const struct in6_addr *addr)
+{
+	struct dst_cache_pcpu *idst;
+
+	if (!dst_cache->cache)
+		return;
+
+	idst = this_cpu_ptr(dst_cache->cache);
+	dst_cache_per_cpu_dst_set(this_cpu_ptr(dst_cache->cache), dst,
+				  rt6_get_cookie((struct rt6_info *)dst));
+	idst->in6_saddr = *addr;
+}
+EXPORT_SYMBOL_GPL(dst_cache_set_ip6);
+
+struct dst_entry *dst_cache_get_ip6(struct dst_cache *dst_cache,
+				    struct in6_addr *saddr)
+{
+	struct dst_cache_pcpu *idst;
+	struct dst_entry *dst;
+
+	if (!dst_cache->cache)
+		return NULL;
+
+	idst = this_cpu_ptr(dst_cache->cache);
+	dst = dst_cache_per_cpu_get(dst_cache, idst);
+	if (!dst)
+		return NULL;
+
+	*saddr = idst->in6_saddr;
+	return dst;
+}
+EXPORT_SYMBOL_GPL(dst_cache_get_ip6);
+#endif
+
+int dst_cache_init(struct dst_cache *dst_cache, gfp_t gfp)
+{
+	dst_cache->cache = alloc_percpu_gfp(struct dst_cache_pcpu,
+					    gfp | __GFP_ZERO);
+	if (!dst_cache->cache)
+		return -ENOMEM;
+
+	dst_cache_reset(dst_cache);
+	return 0;
+}
+EXPORT_SYMBOL_GPL(dst_cache_init);
+
+void dst_cache_destroy(struct dst_cache *dst_cache)
+{
+	int i;
+
+	if (!dst_cache->cache)
+		return;
+
+	for_each_possible_cpu(i)
+		dst_release(per_cpu_ptr(dst_cache->cache, i)->dst);
+
+	free_percpu(dst_cache->cache);
+}
+EXPORT_SYMBOL_GPL(dst_cache_destroy);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 002/193] net: replace dst_cache ip6_tunnel implementation with the generic one
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
  2018-02-23 18:23 ` [PATCH 4.4 001/193] net: add dst_cache support Greg Kroah-Hartman
@ 2018-02-23 18:23 ` Greg Kroah-Hartman
  2018-02-23 23:00   ` Nathan Chancellor
  2018-02-27  8:05   ` Michal Kubecek
  2018-02-23 18:23 ` [PATCH 4.4 003/193] cfg80211: check dev_set_name() return value Greg Kroah-Hartman
                   ` (197 subsequent siblings)
  199 siblings, 2 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:23 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Paolo Abeni, David S. Miller,
	Manoj Boopathi Raj

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Paolo Abeni <pabeni@redhat.com>

commit 607f725f6f7d5ec3759fbc16224afb60e2152a5b upstream.

This also fix a potential race into the existing tunnel code, which
could lead to the wrong dst to be permanenty cached:

CPU1:					CPU2:
  <xmit on ip6_tunnel>
  <cache lookup fails>
  dst = ip6_route_output(...)
					<tunnel params are changed via nl>
					dst_cache_reset() // no effect,
							// the cache is empty
  dst_cache_set() // the wrong dst
	// is permanenty stored
	// into the cache

With the new dst implementation the above race is not possible
since the first cache lookup after dst_cache_reset will fail due
to the timestamp check

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Suggested-and-acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Manoj Boopathi Raj <manojboopathi@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 include/net/ip6_tunnel.h |   15 ----
 net/ipv6/Kconfig         |    1 
 net/ipv6/ip6_gre.c       |   12 +--
 net/ipv6/ip6_tunnel.c    |  151 +++++++----------------------------------------
 net/ipv6/ip6_vti.c       |    2 
 5 files changed, 35 insertions(+), 146 deletions(-)

--- a/include/net/ip6_tunnel.h
+++ b/include/net/ip6_tunnel.h
@@ -5,6 +5,8 @@
 #include <linux/netdevice.h>
 #include <linux/if_tunnel.h>
 #include <linux/ip6_tunnel.h>
+#include <net/ip_tunnels.h>
+#include <net/dst_cache.h>
 
 #define IP6TUNNEL_ERR_TIMEO (30*HZ)
 
@@ -32,12 +34,6 @@ struct __ip6_tnl_parm {
 	__be32			o_key;
 };
 
-struct ip6_tnl_dst {
-	seqlock_t lock;
-	struct dst_entry __rcu *dst;
-	u32 cookie;
-};
-
 /* IPv6 tunnel */
 struct ip6_tnl {
 	struct ip6_tnl __rcu *next;	/* next tunnel in list */
@@ -45,7 +41,7 @@ struct ip6_tnl {
 	struct net *net;	/* netns for packet i/o */
 	struct __ip6_tnl_parm parms;	/* tunnel configuration parameters */
 	struct flowi fl;	/* flowi template for xmit */
-	struct ip6_tnl_dst __percpu *dst_cache;	/* cached dst */
+	struct dst_cache dst_cache;	/* cached dst */
 
 	int err_count;
 	unsigned long err_time;
@@ -65,11 +61,6 @@ struct ipv6_tlv_tnl_enc_lim {
 	__u8 encap_limit;	/* tunnel encapsulation limit   */
 } __packed;
 
-struct dst_entry *ip6_tnl_dst_get(struct ip6_tnl *t);
-int ip6_tnl_dst_init(struct ip6_tnl *t);
-void ip6_tnl_dst_destroy(struct ip6_tnl *t);
-void ip6_tnl_dst_reset(struct ip6_tnl *t);
-void ip6_tnl_dst_set(struct ip6_tnl *t, struct dst_entry *dst);
 int ip6_tnl_rcv_ctl(struct ip6_tnl *t, const struct in6_addr *laddr,
 		const struct in6_addr *raddr);
 int ip6_tnl_xmit_ctl(struct ip6_tnl *t, const struct in6_addr *laddr,
--- a/net/ipv6/Kconfig
+++ b/net/ipv6/Kconfig
@@ -205,6 +205,7 @@ config IPV6_NDISC_NODETYPE
 config IPV6_TUNNEL
 	tristate "IPv6: IP-in-IPv6 tunnel (RFC2473)"
 	select INET6_TUNNEL
+	select DST_CACHE
 	---help---
 	  Support for IPv6-in-IPv6 and IPv4-in-IPv6 tunnels described in
 	  RFC 2473.
--- a/net/ipv6/ip6_gre.c
+++ b/net/ipv6/ip6_gre.c
@@ -362,7 +362,7 @@ static void ip6gre_tunnel_uninit(struct
 	struct ip6gre_net *ign = net_generic(t->net, ip6gre_net_id);
 
 	ip6gre_tunnel_unlink(ign, t);
-	ip6_tnl_dst_reset(t);
+	dst_cache_reset(&t->dst_cache);
 	dev_put(dev);
 }
 
@@ -640,7 +640,7 @@ static netdev_tx_t ip6gre_xmit2(struct s
 	}
 
 	if (!fl6->flowi6_mark)
-		dst = ip6_tnl_dst_get(tunnel);
+		dst = dst_cache_get(&tunnel->dst_cache);
 
 	if (!dst) {
 		dst = ip6_route_output(net, NULL, fl6);
@@ -709,7 +709,7 @@ static netdev_tx_t ip6gre_xmit2(struct s
 	}
 
 	if (!fl6->flowi6_mark && ndst)
-		ip6_tnl_dst_set(tunnel, ndst);
+		dst_cache_set_ip6(&tunnel->dst_cache, ndst, &fl6->saddr);
 	skb_dst_set(skb, dst);
 
 	proto = NEXTHDR_GRE;
@@ -1017,7 +1017,7 @@ static int ip6gre_tnl_change(struct ip6_
 	t->parms.o_key = p->o_key;
 	t->parms.i_flags = p->i_flags;
 	t->parms.o_flags = p->o_flags;
-	ip6_tnl_dst_reset(t);
+	dst_cache_reset(&t->dst_cache);
 	ip6gre_tnl_link_config(t, set_mtu);
 	return 0;
 }
@@ -1228,7 +1228,7 @@ static void ip6gre_dev_free(struct net_d
 {
 	struct ip6_tnl *t = netdev_priv(dev);
 
-	ip6_tnl_dst_destroy(t);
+	dst_cache_destroy(&t->dst_cache);
 	free_percpu(dev->tstats);
 	free_netdev(dev);
 }
@@ -1266,7 +1266,7 @@ static int ip6gre_tunnel_init_common(str
 	if (!dev->tstats)
 		return -ENOMEM;
 
-	ret = ip6_tnl_dst_init(tunnel);
+	ret = dst_cache_init(&tunnel->dst_cache, GFP_KERNEL);
 	if (ret) {
 		free_percpu(dev->tstats);
 		dev->tstats = NULL;
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -122,97 +122,6 @@ static struct net_device_stats *ip6_get_
 	return &dev->stats;
 }
 
-/*
- * Locking : hash tables are protected by RCU and RTNL
- */
-
-static void ip6_tnl_per_cpu_dst_set(struct ip6_tnl_dst *idst,
-				    struct dst_entry *dst)
-{
-	write_seqlock_bh(&idst->lock);
-	dst_release(rcu_dereference_protected(
-			    idst->dst,
-			    lockdep_is_held(&idst->lock.lock)));
-	if (dst) {
-		dst_hold(dst);
-		idst->cookie = rt6_get_cookie((struct rt6_info *)dst);
-	} else {
-		idst->cookie = 0;
-	}
-	rcu_assign_pointer(idst->dst, dst);
-	write_sequnlock_bh(&idst->lock);
-}
-
-struct dst_entry *ip6_tnl_dst_get(struct ip6_tnl *t)
-{
-	struct ip6_tnl_dst *idst;
-	struct dst_entry *dst;
-	unsigned int seq;
-	u32 cookie;
-
-	idst = raw_cpu_ptr(t->dst_cache);
-
-	rcu_read_lock();
-	do {
-		seq = read_seqbegin(&idst->lock);
-		dst = rcu_dereference(idst->dst);
-		cookie = idst->cookie;
-	} while (read_seqretry(&idst->lock, seq));
-
-	if (dst && !atomic_inc_not_zero(&dst->__refcnt))
-		dst = NULL;
-	rcu_read_unlock();
-
-	if (dst && dst->obsolete && !dst->ops->check(dst, cookie)) {
-		ip6_tnl_per_cpu_dst_set(idst, NULL);
-		dst_release(dst);
-		dst = NULL;
-	}
-	return dst;
-}
-EXPORT_SYMBOL_GPL(ip6_tnl_dst_get);
-
-void ip6_tnl_dst_reset(struct ip6_tnl *t)
-{
-	int i;
-
-	for_each_possible_cpu(i)
-		ip6_tnl_per_cpu_dst_set(per_cpu_ptr(t->dst_cache, i), NULL);
-}
-EXPORT_SYMBOL_GPL(ip6_tnl_dst_reset);
-
-void ip6_tnl_dst_set(struct ip6_tnl *t, struct dst_entry *dst)
-{
-	ip6_tnl_per_cpu_dst_set(raw_cpu_ptr(t->dst_cache), dst);
-
-}
-EXPORT_SYMBOL_GPL(ip6_tnl_dst_set);
-
-void ip6_tnl_dst_destroy(struct ip6_tnl *t)
-{
-	if (!t->dst_cache)
-		return;
-
-	ip6_tnl_dst_reset(t);
-	free_percpu(t->dst_cache);
-}
-EXPORT_SYMBOL_GPL(ip6_tnl_dst_destroy);
-
-int ip6_tnl_dst_init(struct ip6_tnl *t)
-{
-	int i;
-
-	t->dst_cache = alloc_percpu(struct ip6_tnl_dst);
-	if (!t->dst_cache)
-		return -ENOMEM;
-
-	for_each_possible_cpu(i)
-		seqlock_init(&per_cpu_ptr(t->dst_cache, i)->lock);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(ip6_tnl_dst_init);
-
 /**
  * ip6_tnl_lookup - fetch tunnel matching the end-point addresses
  *   @remote: the address of the tunnel exit-point
@@ -331,7 +240,7 @@ static void ip6_dev_free(struct net_devi
 {
 	struct ip6_tnl *t = netdev_priv(dev);
 
-	ip6_tnl_dst_destroy(t);
+	dst_cache_destroy(&t->dst_cache);
 	free_percpu(dev->tstats);
 	free_netdev(dev);
 }
@@ -464,7 +373,7 @@ ip6_tnl_dev_uninit(struct net_device *de
 		RCU_INIT_POINTER(ip6n->tnls_wc[0], NULL);
 	else
 		ip6_tnl_unlink(ip6n, t);
-	ip6_tnl_dst_reset(t);
+	dst_cache_reset(&t->dst_cache);
 	dev_put(dev);
 }
 
@@ -1053,7 +962,6 @@ static int ip6_tnl_xmit2(struct sk_buff
 	struct ipv6_tel_txoption opt;
 	struct dst_entry *dst = NULL, *ndst = NULL;
 	struct net_device *tdev;
-	bool use_cache = false;
 	int mtu;
 	unsigned int max_headroom = sizeof(struct ipv6hdr);
 	u8 proto;
@@ -1061,39 +969,28 @@ static int ip6_tnl_xmit2(struct sk_buff
 
 	/* NBMA tunnel */
 	if (ipv6_addr_any(&t->parms.raddr)) {
-		if (skb->protocol == htons(ETH_P_IPV6)) {
-			struct in6_addr *addr6;
-			struct neighbour *neigh;
-			int addr_type;
-
-			if (!skb_dst(skb))
-				goto tx_err_link_failure;
-
-			neigh = dst_neigh_lookup(skb_dst(skb),
-						 &ipv6_hdr(skb)->daddr);
-			if (!neigh)
-				goto tx_err_link_failure;
+		struct in6_addr *addr6;
+		struct neighbour *neigh;
+		int addr_type;
+
+		if (!skb_dst(skb))
+			goto tx_err_link_failure;
 
-			addr6 = (struct in6_addr *)&neigh->primary_key;
-			addr_type = ipv6_addr_type(addr6);
+		neigh = dst_neigh_lookup(skb_dst(skb),
+					 &ipv6_hdr(skb)->daddr);
+		if (!neigh)
+			goto tx_err_link_failure;
 
-			if (addr_type == IPV6_ADDR_ANY)
-				addr6 = &ipv6_hdr(skb)->daddr;
+		addr6 = (struct in6_addr *)&neigh->primary_key;
+		addr_type = ipv6_addr_type(addr6);
 
-			memcpy(&fl6->daddr, addr6, sizeof(fl6->daddr));
-			neigh_release(neigh);
-		}
-	} else if (t->parms.proto != 0 && !(t->parms.flags &
-					    (IP6_TNL_F_USE_ORIG_TCLASS |
-					     IP6_TNL_F_USE_ORIG_FWMARK))) {
-		/* enable the cache only if neither the outer protocol nor the
-		 * routing decision depends on the current inner header value
-		 */
-		use_cache = true;
-	}
+		if (addr_type == IPV6_ADDR_ANY)
+			addr6 = &ipv6_hdr(skb)->daddr;
 
-	if (use_cache)
-		dst = ip6_tnl_dst_get(t);
+		memcpy(&fl6->daddr, addr6, sizeof(fl6->daddr));
+		neigh_release(neigh);
+	} else if (!fl6->flowi6_mark)
+		dst = dst_cache_get(&t->dst_cache);
 
 	if (!ip6_tnl_xmit_ctl(t, &fl6->saddr, &fl6->daddr))
 		goto tx_err_link_failure;
@@ -1156,8 +1053,8 @@ static int ip6_tnl_xmit2(struct sk_buff
 		skb = new_skb;
 	}
 
-	if (use_cache && ndst)
-		ip6_tnl_dst_set(t, ndst);
+	if (!fl6->flowi6_mark && ndst)
+		dst_cache_set_ip6(&t->dst_cache, ndst, &fl6->saddr);
 	skb_dst_set(skb, dst);
 
 	skb->transport_header = skb->network_header;
@@ -1392,7 +1289,7 @@ ip6_tnl_change(struct ip6_tnl *t, const
 	t->parms.flowinfo = p->flowinfo;
 	t->parms.link = p->link;
 	t->parms.proto = p->proto;
-	ip6_tnl_dst_reset(t);
+	dst_cache_reset(&t->dst_cache);
 	ip6_tnl_link_config(t);
 	return 0;
 }
@@ -1663,7 +1560,7 @@ ip6_tnl_dev_init_gen(struct net_device *
 	if (!dev->tstats)
 		return -ENOMEM;
 
-	ret = ip6_tnl_dst_init(t);
+	ret = dst_cache_init(&t->dst_cache, GFP_KERNEL);
 	if (ret) {
 		free_percpu(dev->tstats);
 		dev->tstats = NULL;
--- a/net/ipv6/ip6_vti.c
+++ b/net/ipv6/ip6_vti.c
@@ -645,7 +645,7 @@ vti6_tnl_change(struct ip6_tnl *t, const
 	t->parms.i_key = p->i_key;
 	t->parms.o_key = p->o_key;
 	t->parms.proto = p->proto;
-	ip6_tnl_dst_reset(t);
+	dst_cache_reset(&t->dst_cache);
 	vti6_link_config(t);
 	return 0;
 }

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 003/193] cfg80211: check dev_set_name() return value
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
  2018-02-23 18:23 ` [PATCH 4.4 001/193] net: add dst_cache support Greg Kroah-Hartman
  2018-02-23 18:23 ` [PATCH 4.4 002/193] net: replace dst_cache ip6_tunnel implementation with the generic one Greg Kroah-Hartman
@ 2018-02-23 18:23 ` Greg Kroah-Hartman
  2018-02-23 18:23 ` [PATCH 4.4 004/193] mm,vmscan: Make unregister_shrinker() no-op if register_shrinker() failed Greg Kroah-Hartman
                   ` (196 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:23 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, syzbot+1ddfb3357e1d7bb5b5d3, Johannes Berg

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Johannes Berg <johannes.berg@intel.com>

commit 59b179b48ce2a6076448a44531242ac2b3f6cef2 upstream.

syzbot reported a warning from rfkill_alloc(), and after a while
I think that the reason is that it was doing fault injection and
the dev_set_name() failed, leaving the name NULL, and we didn't
check the return value and got to rfkill_alloc() with a NULL name.
Since we really don't want a NULL name, we ought to check the
return value.

Fixes: fb28ad35906a ("net: struct device - replace bus_id with dev_name(), dev_set_name()")
Reported-by: syzbot+1ddfb3357e1d7bb5b5d3@syzkaller.appspotmail.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 net/wireless/core.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -390,6 +390,8 @@ struct wiphy *wiphy_new_nm(const struct
 		if (rv)
 			goto use_default_name;
 	} else {
+		int rv;
+
 use_default_name:
 		/* NOTE:  This is *probably* safe w/out holding rtnl because of
 		 * the restrictions on phy names.  Probably this call could
@@ -397,7 +399,11 @@ use_default_name:
 		 * phyX.  But, might should add some locking and check return
 		 * value, and use a different name if this one exists?
 		 */
-		dev_set_name(&rdev->wiphy.dev, PHY_NAME "%d", rdev->wiphy_idx);
+		rv = dev_set_name(&rdev->wiphy.dev, PHY_NAME "%d", rdev->wiphy_idx);
+		if (rv < 0) {
+			kfree(rdev);
+			return NULL;
+		}
 	}
 
 	INIT_LIST_HEAD(&rdev->wdev_list);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 004/193] mm,vmscan: Make unregister_shrinker() no-op if register_shrinker() failed.
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (2 preceding siblings ...)
  2018-02-23 18:23 ` [PATCH 4.4 003/193] cfg80211: check dev_set_name() return value Greg Kroah-Hartman
@ 2018-02-23 18:23 ` Greg Kroah-Hartman
  2018-02-23 18:23 ` [PATCH 4.4 005/193] xfrm: Fix stack-out-of-bounds read on socket policy lookup Greg Kroah-Hartman
                   ` (195 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:23 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Tetsuo Handa, Aliaksei Karaliou,
	syzbot, Glauber Costa, Al Viro

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>

commit bb422a738f6566f7439cd347d54e321e4fe92a9f upstream.

Syzbot caught an oops at unregister_shrinker() because combination of
commit 1d3d4437eae1bb29 ("vmscan: per-node deferred work") and fault
injection made register_shrinker() fail and the caller of
register_shrinker() did not check for failure.

----------
[  554.881422] FAULT_INJECTION: forcing a failure.
[  554.881422] name failslab, interval 1, probability 0, space 0, times 0
[  554.881438] CPU: 1 PID: 13231 Comm: syz-executor1 Not tainted 4.14.0-rc8+ #82
[  554.881443] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
[  554.881445] Call Trace:
[  554.881459]  dump_stack+0x194/0x257
[  554.881474]  ? arch_local_irq_restore+0x53/0x53
[  554.881486]  ? find_held_lock+0x35/0x1d0
[  554.881507]  should_fail+0x8c0/0xa40
[  554.881522]  ? fault_create_debugfs_attr+0x1f0/0x1f0
[  554.881537]  ? check_noncircular+0x20/0x20
[  554.881546]  ? find_next_zero_bit+0x2c/0x40
[  554.881560]  ? ida_get_new_above+0x421/0x9d0
[  554.881577]  ? find_held_lock+0x35/0x1d0
[  554.881594]  ? __lock_is_held+0xb6/0x140
[  554.881628]  ? check_same_owner+0x320/0x320
[  554.881634]  ? lock_downgrade+0x990/0x990
[  554.881649]  ? find_held_lock+0x35/0x1d0
[  554.881672]  should_failslab+0xec/0x120
[  554.881684]  __kmalloc+0x63/0x760
[  554.881692]  ? lock_downgrade+0x990/0x990
[  554.881712]  ? register_shrinker+0x10e/0x2d0
[  554.881721]  ? trace_event_raw_event_module_request+0x320/0x320
[  554.881737]  register_shrinker+0x10e/0x2d0
[  554.881747]  ? prepare_kswapd_sleep+0x1f0/0x1f0
[  554.881755]  ? _down_write_nest_lock+0x120/0x120
[  554.881765]  ? memcpy+0x45/0x50
[  554.881785]  sget_userns+0xbcd/0xe20
(...snipped...)
[  554.898693] kasan: CONFIG_KASAN_INLINE enabled
[  554.898724] kasan: GPF could be caused by NULL-ptr deref or user memory access
[  554.898732] general protection fault: 0000 [#1] SMP KASAN
[  554.898737] Dumping ftrace buffer:
[  554.898741]    (ftrace buffer empty)
[  554.898743] Modules linked in:
[  554.898752] CPU: 1 PID: 13231 Comm: syz-executor1 Not tainted 4.14.0-rc8+ #82
[  554.898755] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
[  554.898760] task: ffff8801d1dbe5c0 task.stack: ffff8801c9e38000
[  554.898772] RIP: 0010:__list_del_entry_valid+0x7e/0x150
[  554.898775] RSP: 0018:ffff8801c9e3f108 EFLAGS: 00010246
[  554.898780] RAX: dffffc0000000000 RBX: 0000000000000000 RCX: 0000000000000000
[  554.898784] RDX: 0000000000000000 RSI: ffff8801c53c6f98 RDI: ffff8801c53c6fa0
[  554.898788] RBP: ffff8801c9e3f120 R08: 1ffff100393c7d55 R09: 0000000000000004
[  554.898791] R10: ffff8801c9e3ef70 R11: 0000000000000000 R12: 0000000000000000
[  554.898795] R13: dffffc0000000000 R14: 1ffff100393c7e45 R15: ffff8801c53c6f98
[  554.898800] FS:  0000000000000000(0000) GS:ffff8801db300000(0000) knlGS:0000000000000000
[  554.898804] CS:  0010 DS: 002b ES: 002b CR0: 0000000080050033
[  554.898807] CR2: 00000000dbc23000 CR3: 00000001c7269000 CR4: 00000000001406e0
[  554.898813] DR0: 0000000020000000 DR1: 0000000020000000 DR2: 0000000000000000
[  554.898816] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000600
[  554.898818] Call Trace:
[  554.898828]  unregister_shrinker+0x79/0x300
[  554.898837]  ? perf_trace_mm_vmscan_writepage+0x750/0x750
[  554.898844]  ? down_write+0x87/0x120
[  554.898851]  ? deactivate_super+0x139/0x1b0
[  554.898857]  ? down_read+0x150/0x150
[  554.898864]  ? check_same_owner+0x320/0x320
[  554.898875]  deactivate_locked_super+0x64/0xd0
[  554.898883]  deactivate_super+0x141/0x1b0
----------

Since allowing register_shrinker() callers to call unregister_shrinker()
when register_shrinker() failed can simplify error recovery path, this
patch makes unregister_shrinker() no-op when register_shrinker() failed.
Also, reset shrinker->nr_deferred in case unregister_shrinker() was
by error called twice.

Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Signed-off-by: Aliaksei Karaliou <akaraliou.dev@gmail.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Cc: Glauber Costa <glauber@scylladb.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 mm/vmscan.c |    3 +++
 1 file changed, 3 insertions(+)

--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -254,10 +254,13 @@ EXPORT_SYMBOL(register_shrinker);
  */
 void unregister_shrinker(struct shrinker *shrinker)
 {
+	if (!shrinker->nr_deferred)
+		return;
 	down_write(&shrinker_rwsem);
 	list_del(&shrinker->list);
 	up_write(&shrinker_rwsem);
 	kfree(shrinker->nr_deferred);
+	shrinker->nr_deferred = NULL;
 }
 EXPORT_SYMBOL(unregister_shrinker);
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 005/193] xfrm: Fix stack-out-of-bounds read on socket policy lookup.
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (3 preceding siblings ...)
  2018-02-23 18:23 ` [PATCH 4.4 004/193] mm,vmscan: Make unregister_shrinker() no-op if register_shrinker() failed Greg Kroah-Hartman
@ 2018-02-23 18:23 ` Greg Kroah-Hartman
  2018-02-23 18:23 ` [PATCH 4.4 006/193] xfrm: check id proto in validate_tmpl() Greg Kroah-Hartman
                   ` (194 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:23 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, syzbot, Steffen Klassert

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Steffen Klassert <steffen.klassert@secunet.com>

commit ddc47e4404b58f03e98345398fb12d38fe291512 upstream.

When we do tunnel or beet mode, we pass saddr and daddr from the
template to xfrm_state_find(), this is ok. On transport mode,
we pass the addresses from the flowi, assuming that the IP
addresses (and address family) don't change during transformation.
This assumption is wrong in the IPv4 mapped IPv6 case, packet
is IPv4 and template is IPv6.

Fix this by catching address family missmatches of the policy
and the flow already before we do the lookup.

Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 net/xfrm/xfrm_policy.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

--- a/net/xfrm/xfrm_policy.c
+++ b/net/xfrm/xfrm_policy.c
@@ -1225,9 +1225,15 @@ static struct xfrm_policy *xfrm_sk_polic
 	read_lock_bh(&net->xfrm.xfrm_policy_lock);
 	pol = rcu_dereference(sk->sk_policy[dir]);
 	if (pol != NULL) {
-		bool match = xfrm_selector_match(&pol->selector, fl, family);
+		bool match;
 		int err = 0;
 
+		if (pol->family != family) {
+			pol = NULL;
+			goto out;
+		}
+
+		match = xfrm_selector_match(&pol->selector, fl, family);
 		if (match) {
 			if ((sk->sk_mark & pol->mark.m) != pol->mark.v) {
 				pol = NULL;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 006/193] xfrm: check id proto in validate_tmpl()
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (4 preceding siblings ...)
  2018-02-23 18:23 ` [PATCH 4.4 005/193] xfrm: Fix stack-out-of-bounds read on socket policy lookup Greg Kroah-Hartman
@ 2018-02-23 18:23 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 007/193] blktrace: fix unlocked registration of tracepoints Greg Kroah-Hartman
                   ` (193 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:23 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, syzbot, Steffen Klassert, Herbert Xu,
	Cong Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Cong Wang <xiyou.wangcong@gmail.com>

commit 6a53b7593233ab9e4f96873ebacc0f653a55c3e1 upstream.

syzbot reported a kernel warning in xfrm_state_fini(), which
indicates that we have entries left in the list
net->xfrm.state_all whose proto is zero. And
xfrm_id_proto_match() doesn't consider them as a match with
IPSEC_PROTO_ANY in this case.

Proto with value 0 is probably not a valid value, at least
verify_newsa_info() doesn't consider it valid either.

This patch fixes it by checking the proto value in
validate_tmpl() and rejecting invalid ones, like what iproute2
does in xfrm_xfrmproto_getbyname().

Reported-by: syzbot <syzkaller@googlegroups.com>
Cc: Steffen Klassert <steffen.klassert@secunet.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 net/xfrm/xfrm_user.c |   15 +++++++++++++++
 1 file changed, 15 insertions(+)

--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -1402,6 +1402,21 @@ static int validate_tmpl(int nr, struct
 		default:
 			return -EINVAL;
 		}
+
+		switch (ut[i].id.proto) {
+		case IPPROTO_AH:
+		case IPPROTO_ESP:
+		case IPPROTO_COMP:
+#if IS_ENABLED(CONFIG_IPV6)
+		case IPPROTO_ROUTING:
+		case IPPROTO_DSTOPTS:
+#endif
+		case IPSEC_PROTO_ANY:
+			break;
+		default:
+			return -EINVAL;
+		}
+
 	}
 
 	return 0;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 007/193] blktrace: fix unlocked registration of tracepoints
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (5 preceding siblings ...)
  2018-02-23 18:23 ` [PATCH 4.4 006/193] xfrm: check id proto in validate_tmpl() Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 008/193] drm: Require __GFP_NOFAIL for the legacy drm_modeset_lock_all Greg Kroah-Hartman
                   ` (192 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Steven Rostedt, Dmitry Vyukov, Jens Axboe

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Jens Axboe <axboe@kernel.dk>

commit a6da0024ffc19e0d47712bb5ca4fd083f76b07df upstream.

We need to ensure that tracepoints are registered and unregistered
with the users of them. The existing atomic count isn't enough for
that. Add a lock around the tracepoints, so we serialize access
to them.

This fixes cases where we have multiple users setting up and
tearing down tracepoints, like this:

CPU: 0 PID: 2995 Comm: syzkaller857118 Not tainted
4.14.0-rc5-next-20171018+ #36
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
Google 01/01/2011
Call Trace:
  __dump_stack lib/dump_stack.c:16 [inline]
  dump_stack+0x194/0x257 lib/dump_stack.c:52
  panic+0x1e4/0x41c kernel/panic.c:183
  __warn+0x1c4/0x1e0 kernel/panic.c:546
  report_bug+0x211/0x2d0 lib/bug.c:183
  fixup_bug+0x40/0x90 arch/x86/kernel/traps.c:177
  do_trap_no_signal arch/x86/kernel/traps.c:211 [inline]
  do_trap+0x260/0x390 arch/x86/kernel/traps.c:260
  do_error_trap+0x120/0x390 arch/x86/kernel/traps.c:297
  do_invalid_op+0x1b/0x20 arch/x86/kernel/traps.c:310
  invalid_op+0x18/0x20 arch/x86/entry/entry_64.S:905
RIP: 0010:tracepoint_add_func kernel/tracepoint.c:210 [inline]
RIP: 0010:tracepoint_probe_register_prio+0x397/0x9a0 kernel/tracepoint.c:283
RSP: 0018:ffff8801d1d1f6c0 EFLAGS: 00010293
RAX: ffff8801d22e8540 RBX: 00000000ffffffef RCX: ffffffff81710f07
RDX: 0000000000000000 RSI: ffffffff85b679c0 RDI: ffff8801d5f19818
RBP: ffff8801d1d1f7c8 R08: ffffffff81710c10 R09: 0000000000000004
R10: ffff8801d1d1f6b0 R11: 0000000000000003 R12: ffffffff817597f0
R13: 0000000000000000 R14: 00000000ffffffff R15: ffff8801d1d1f7a0
  tracepoint_probe_register+0x2a/0x40 kernel/tracepoint.c:304
  register_trace_block_rq_insert include/trace/events/block.h:191 [inline]
  blk_register_tracepoints+0x1e/0x2f0 kernel/trace/blktrace.c:1043
  do_blk_trace_setup+0xa10/0xcf0 kernel/trace/blktrace.c:542
  blk_trace_setup+0xbd/0x180 kernel/trace/blktrace.c:564
  sg_ioctl+0xc71/0x2d90 drivers/scsi/sg.c:1089
  vfs_ioctl fs/ioctl.c:45 [inline]
  do_vfs_ioctl+0x1b1/0x1520 fs/ioctl.c:685
  SYSC_ioctl fs/ioctl.c:700 [inline]
  SyS_ioctl+0x8f/0xc0 fs/ioctl.c:691
  entry_SYSCALL_64_fastpath+0x1f/0xbe
RIP: 0033:0x444339
RSP: 002b:00007ffe05bb5b18 EFLAGS: 00000206 ORIG_RAX: 0000000000000010
RAX: ffffffffffffffda RBX: 00000000006d66c0 RCX: 0000000000444339
RDX: 000000002084cf90 RSI: 00000000c0481273 RDI: 0000000000000009
RBP: 0000000000000082 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000206 R12: ffffffffffffffff
R13: 00000000c0481273 R14: 0000000000000000 R15: 0000000000000000

since we can now run these in parallel. Ensure that the exported helpers
for doing this are grabbing the queue trace mutex.

Reported-by: Steven Rostedt <rostedt@goodmis.org>
Tested-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 kernel/trace/blktrace.c |   32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -57,7 +57,8 @@ static struct tracer_flags blk_tracer_fl
 };
 
 /* Global reference count of probes */
-static atomic_t blk_probes_ref = ATOMIC_INIT(0);
+static DEFINE_MUTEX(blk_probe_mutex);
+static int blk_probes_ref;
 
 static void blk_register_tracepoints(void);
 static void blk_unregister_tracepoints(void);
@@ -300,11 +301,26 @@ static void blk_trace_free(struct blk_tr
 	kfree(bt);
 }
 
+static void get_probe_ref(void)
+{
+	mutex_lock(&blk_probe_mutex);
+	if (++blk_probes_ref == 1)
+		blk_register_tracepoints();
+	mutex_unlock(&blk_probe_mutex);
+}
+
+static void put_probe_ref(void)
+{
+	mutex_lock(&blk_probe_mutex);
+	if (!--blk_probes_ref)
+		blk_unregister_tracepoints();
+	mutex_unlock(&blk_probe_mutex);
+}
+
 static void blk_trace_cleanup(struct blk_trace *bt)
 {
 	blk_trace_free(bt);
-	if (atomic_dec_and_test(&blk_probes_ref))
-		blk_unregister_tracepoints();
+	put_probe_ref();
 }
 
 int blk_trace_remove(struct request_queue *q)
@@ -522,8 +538,7 @@ int do_blk_trace_setup(struct request_qu
 	if (cmpxchg(&q->blk_trace, NULL, bt))
 		goto err;
 
-	if (atomic_inc_return(&blk_probes_ref) == 1)
-		blk_register_tracepoints();
+	get_probe_ref();
 
 	return 0;
 err:
@@ -1466,9 +1481,7 @@ static int blk_trace_remove_queue(struct
 	if (bt == NULL)
 		return -EINVAL;
 
-	if (atomic_dec_and_test(&blk_probes_ref))
-		blk_unregister_tracepoints();
-
+	put_probe_ref();
 	blk_trace_free(bt);
 	return 0;
 }
@@ -1499,8 +1512,7 @@ static int blk_trace_setup_queue(struct
 	if (cmpxchg(&q->blk_trace, NULL, bt))
 		goto free_bt;
 
-	if (atomic_inc_return(&blk_probes_ref) == 1)
-		blk_register_tracepoints();
+	get_probe_ref();
 	return 0;
 
 free_bt:

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 008/193] drm: Require __GFP_NOFAIL for the legacy drm_modeset_lock_all
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (6 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 007/193] blktrace: fix unlocked registration of tracepoints Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 009/193] Provide a function to create a NUL-terminated string from unterminated data Greg Kroah-Hartman
                   ` (191 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Chris Wilson, Daniel Vetter, syzbot,
	Ville Syrjälä

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Chris Wilson <chris@chris-wilson.co.uk>

commit d18d1a5ac811d12f7ebc1129230312b5f2c50cb8 upstream.

To acquire all modeset locks requires a ww_ctx to be allocated. As this
is the legacy path and the allocation small, to reduce the changes
required (and complex untested error handling) to the legacy drivers, we
simply assume that the allocation succeeds. At present, it relies on the
too-small-to-fail rule, but syzbot found that by injecting a failure
here we would hit the WARN. Document that this allocation must succeed
with __GFP_NOFAIL.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20171031115535.15166-1-chris@chris-wilson.co.uk
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpu/drm/drm_modeset_lock.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/gpu/drm/drm_modeset_lock.c
+++ b/drivers/gpu/drm/drm_modeset_lock.c
@@ -69,7 +69,7 @@ void drm_modeset_lock_all(struct drm_dev
 	struct drm_modeset_acquire_ctx *ctx;
 	int ret;
 
-	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL | __GFP_NOFAIL);
 	if (WARN_ON(!ctx))
 		return;
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 009/193] Provide a function to create a NUL-terminated string from unterminated data
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (7 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 008/193] drm: Require __GFP_NOFAIL for the legacy drm_modeset_lock_all Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 010/193] selinux: ensure the context is NUL terminated in security_context_to_sid_core() Greg Kroah-Hartman
                   ` (190 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, David Howells, Al Viro

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: David Howells <dhowells@redhat.com>

commit f35157417215ec138c920320c746fdb3e04ef1d5 upstream.

Provide a function, kmemdup_nul(), that will create a NUL-terminated string
from an unterminated character array where the length is known in advance.

This is better than kstrndup() in situations where we already know the
string length as the strnlen() in kstrndup() is superfluous.

Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 include/linux/string.h |    1 +
 mm/util.c              |   24 ++++++++++++++++++++++++
 2 files changed, 25 insertions(+)

--- a/include/linux/string.h
+++ b/include/linux/string.h
@@ -122,6 +122,7 @@ extern char *kstrdup(const char *s, gfp_
 extern const char *kstrdup_const(const char *s, gfp_t gfp);
 extern char *kstrndup(const char *s, size_t len, gfp_t gfp);
 extern void *kmemdup(const void *src, size_t len, gfp_t gfp);
+extern char *kmemdup_nul(const char *s, size_t len, gfp_t gfp);
 
 extern char **argv_split(gfp_t gfp, const char *str, int *argcp);
 extern void argv_free(char **argv);
--- a/mm/util.c
+++ b/mm/util.c
@@ -80,6 +80,8 @@ EXPORT_SYMBOL(kstrdup_const);
  * @s: the string to duplicate
  * @max: read at most @max chars from @s
  * @gfp: the GFP mask used in the kmalloc() call when allocating memory
+ *
+ * Note: Use kmemdup_nul() instead if the size is known exactly.
  */
 char *kstrndup(const char *s, size_t max, gfp_t gfp)
 {
@@ -118,6 +120,28 @@ void *kmemdup(const void *src, size_t le
 EXPORT_SYMBOL(kmemdup);
 
 /**
+ * kmemdup_nul - Create a NUL-terminated string from unterminated data
+ * @s: The data to stringify
+ * @len: The size of the data
+ * @gfp: the GFP mask used in the kmalloc() call when allocating memory
+ */
+char *kmemdup_nul(const char *s, size_t len, gfp_t gfp)
+{
+	char *buf;
+
+	if (!s)
+		return NULL;
+
+	buf = kmalloc_track_caller(len + 1, gfp);
+	if (buf) {
+		memcpy(buf, s, len);
+		buf[len] = '\0';
+	}
+	return buf;
+}
+EXPORT_SYMBOL(kmemdup_nul);
+
+/**
  * memdup_user - duplicate memory region from user space
  *
  * @src: source address in user space

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 010/193] selinux: ensure the context is NUL terminated in security_context_to_sid_core()
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (8 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 009/193] Provide a function to create a NUL-terminated string from unterminated data Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 011/193] selinux: skip bounded transition processing if the policy isnt loaded Greg Kroah-Hartman
                   ` (189 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, syzbot, Paul Moore, William Roberts

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Paul Moore <paul@paul-moore.com>

commit ef28df55ac27e1e5cd122e19fa311d886d47a756 upstream.

The syzbot/syzkaller automated tests found a problem in
security_context_to_sid_core() during early boot (before we load the
SELinux policy) where we could potentially feed context strings without
NUL terminators into the strcmp() function.

We already guard against this during normal operation (after the SELinux
policy has been loaded) by making a copy of the context strings and
explicitly adding a NUL terminator to the end.  The patch extends this
protection to the early boot case (no loaded policy) by moving the context
copy earlier in security_context_to_sid_core().

Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Paul Moore <paul@paul-moore.com>
Reviewed-By: William Roberts <william.c.roberts@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 security/selinux/ss/services.c |   18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

--- a/security/selinux/ss/services.c
+++ b/security/selinux/ss/services.c
@@ -1406,27 +1406,25 @@ static int security_context_to_sid_core(
 	if (!scontext_len)
 		return -EINVAL;
 
+	/* Copy the string to allow changes and ensure a NUL terminator */
+	scontext2 = kmemdup_nul(scontext, scontext_len, gfp_flags);
+	if (!scontext2)
+		return -ENOMEM;
+
 	if (!ss_initialized) {
 		int i;
 
 		for (i = 1; i < SECINITSID_NUM; i++) {
-			if (!strcmp(initial_sid_to_string[i], scontext)) {
+			if (!strcmp(initial_sid_to_string[i], scontext2)) {
 				*sid = i;
-				return 0;
+				goto out;
 			}
 		}
 		*sid = SECINITSID_KERNEL;
-		return 0;
+		goto out;
 	}
 	*sid = SECSID_NULL;
 
-	/* Copy the string so that we can modify the copy as we parse it. */
-	scontext2 = kmalloc(scontext_len + 1, gfp_flags);
-	if (!scontext2)
-		return -ENOMEM;
-	memcpy(scontext2, scontext, scontext_len);
-	scontext2[scontext_len] = 0;
-
 	if (force) {
 		/* Save another copy for storing in uninterpreted form */
 		rc = -ENOMEM;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 011/193] selinux: skip bounded transition processing if the policy isnt loaded
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (9 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 010/193] selinux: ensure the context is NUL terminated in security_context_to_sid_core() Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 012/193] crypto: x86/twofish-3way - Fix %rbp usage Greg Kroah-Hartman
                   ` (188 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, syzbot, Paul Moore, Stephen Smalley,
	James Morris

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Paul Moore <paul@paul-moore.com>

commit 4b14752ec4e0d87126e636384cf37c8dd9df157c upstream.

We can't do anything reasonable in security_bounded_transition() if we
don't have a policy loaded, and in fact we could run into problems
with some of the code inside expecting a policy.  Fix these problems
like we do many others in security/selinux/ss/services.c by checking
to see if the policy is loaded (ss_initialized) and returning quickly
if it isn't.

Reported-by: syzbot <syzkaller-bugs@googlegroups.com>
Signed-off-by: Paul Moore <paul@paul-moore.com>
Acked-by: Stephen Smalley <sds@tycho.nsa.gov>
Reviewed-by: James Morris <james.l.morris@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 security/selinux/ss/services.c |    3 +++
 1 file changed, 3 insertions(+)

--- a/security/selinux/ss/services.c
+++ b/security/selinux/ss/services.c
@@ -860,6 +860,9 @@ int security_bounded_transition(u32 old_
 	int index;
 	int rc;
 
+	if (!ss_initialized)
+		return 0;
+
 	read_lock(&policy_rwlock);
 
 	rc = -EINVAL;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 012/193] crypto: x86/twofish-3way - Fix %rbp usage
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (10 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 011/193] selinux: skip bounded transition processing if the policy isnt loaded Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 013/193] staging: android: ion: Add __GFP_NOWARN for system contig heap Greg Kroah-Hartman
                   ` (187 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, syzbot, Eric Biggers, Josh Poimboeuf,
	Herbert Xu

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Eric Biggers <ebiggers@google.com>

commit d8c7fe9f2a486a6e5f0d5229ca43807af5ab22c6 upstream.

Using %rbp as a temporary register breaks frame pointer convention and
breaks stack traces when unwinding from an interrupt in the crypto code.

In twofish-3way, we can't simply replace %rbp with another register
because there are none available.  Instead, we use the stack to hold the
values that %rbp, %r11, and %r12 were holding previously.  Each of these
values represents the half of the output from the previous Feistel round
that is being passed on unchanged to the following round.  They are only
used once per round, when they are exchanged with %rax, %rbx, and %rcx.

As a result, we free up 3 registers (one per block) and can reassign
them so that %rbp is not used, and additionally %r14 and %r15 are not
used so they do not need to be saved/restored.

There may be a small overhead caused by replacing 'xchg REG, REG' with
the needed sequence 'mov MEM, REG; mov REG, MEM; mov REG, REG' once per
round.  But, counterintuitively, when I tested "ctr-twofish-3way" on a
Haswell processor, the new version was actually about 2% faster.
(Perhaps 'xchg' is not as well optimized as plain moves.)

Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Eric Biggers <ebiggers@google.com>
Reviewed-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/x86/crypto/twofish-x86_64-asm_64-3way.S |  118 ++++++++++++++-------------
 1 file changed, 63 insertions(+), 55 deletions(-)

--- a/arch/x86/crypto/twofish-x86_64-asm_64-3way.S
+++ b/arch/x86/crypto/twofish-x86_64-asm_64-3way.S
@@ -55,29 +55,31 @@
 #define RAB1bl %bl
 #define RAB2bl %cl
 
+#define CD0 0x0(%rsp)
+#define CD1 0x8(%rsp)
+#define CD2 0x10(%rsp)
+
+# used only before/after all rounds
 #define RCD0 %r8
 #define RCD1 %r9
 #define RCD2 %r10
 
-#define RCD0d %r8d
-#define RCD1d %r9d
-#define RCD2d %r10d
-
-#define RX0 %rbp
-#define RX1 %r11
-#define RX2 %r12
-
-#define RX0d %ebp
-#define RX1d %r11d
-#define RX2d %r12d
-
-#define RY0 %r13
-#define RY1 %r14
-#define RY2 %r15
-
-#define RY0d %r13d
-#define RY1d %r14d
-#define RY2d %r15d
+# used only during rounds
+#define RX0 %r8
+#define RX1 %r9
+#define RX2 %r10
+
+#define RX0d %r8d
+#define RX1d %r9d
+#define RX2d %r10d
+
+#define RY0 %r11
+#define RY1 %r12
+#define RY2 %r13
+
+#define RY0d %r11d
+#define RY1d %r12d
+#define RY2d %r13d
 
 #define RT0 %rdx
 #define RT1 %rsi
@@ -85,6 +87,8 @@
 #define RT0d %edx
 #define RT1d %esi
 
+#define RT1bl %sil
+
 #define do16bit_ror(rot, op1, op2, T0, T1, tmp1, tmp2, ab, dst) \
 	movzbl ab ## bl,		tmp2 ## d; \
 	movzbl ab ## bh,		tmp1 ## d; \
@@ -92,6 +96,11 @@
 	op1##l T0(CTX, tmp2, 4),	dst ## d; \
 	op2##l T1(CTX, tmp1, 4),	dst ## d;
 
+#define swap_ab_with_cd(ab, cd, tmp)	\
+	movq cd, tmp;			\
+	movq ab, cd;			\
+	movq tmp, ab;
+
 /*
  * Combined G1 & G2 function. Reordered with help of rotates to have moves
  * at begining.
@@ -110,15 +119,15 @@
 	/* G1,2 && G2,2 */ \
 	do16bit_ror(32, xor, xor, Tx2, Tx3, RT0, RT1, ab ## 0, x ## 0); \
 	do16bit_ror(16, xor, xor, Ty3, Ty0, RT0, RT1, ab ## 0, y ## 0); \
-	xchgq cd ## 0, ab ## 0; \
+	swap_ab_with_cd(ab ## 0, cd ## 0, RT0); \
 	\
 	do16bit_ror(32, xor, xor, Tx2, Tx3, RT0, RT1, ab ## 1, x ## 1); \
 	do16bit_ror(16, xor, xor, Ty3, Ty0, RT0, RT1, ab ## 1, y ## 1); \
-	xchgq cd ## 1, ab ## 1; \
+	swap_ab_with_cd(ab ## 1, cd ## 1, RT0); \
 	\
 	do16bit_ror(32, xor, xor, Tx2, Tx3, RT0, RT1, ab ## 2, x ## 2); \
 	do16bit_ror(16, xor, xor, Ty3, Ty0, RT0, RT1, ab ## 2, y ## 2); \
-	xchgq cd ## 2, ab ## 2;
+	swap_ab_with_cd(ab ## 2, cd ## 2, RT0);
 
 #define enc_round_end(ab, x, y, n) \
 	addl y ## d,			x ## d; \
@@ -168,6 +177,16 @@
 	decrypt_round3(ba, dc, (n*2)+1); \
 	decrypt_round3(ba, dc, (n*2));
 
+#define push_cd()	\
+	pushq RCD2;	\
+	pushq RCD1;	\
+	pushq RCD0;
+
+#define pop_cd()	\
+	popq RCD0;	\
+	popq RCD1;	\
+	popq RCD2;
+
 #define inpack3(in, n, xy, m) \
 	movq 4*(n)(in),			xy ## 0; \
 	xorq w+4*m(CTX),		xy ## 0; \
@@ -223,11 +242,8 @@ ENTRY(__twofish_enc_blk_3way)
 	 *	%rdx: src, RIO
 	 *	%rcx: bool, if true: xor output
 	 */
-	pushq %r15;
-	pushq %r14;
 	pushq %r13;
 	pushq %r12;
-	pushq %rbp;
 	pushq %rbx;
 
 	pushq %rcx; /* bool xor */
@@ -235,40 +251,36 @@ ENTRY(__twofish_enc_blk_3way)
 
 	inpack_enc3();
 
-	encrypt_cycle3(RAB, RCD, 0);
-	encrypt_cycle3(RAB, RCD, 1);
-	encrypt_cycle3(RAB, RCD, 2);
-	encrypt_cycle3(RAB, RCD, 3);
-	encrypt_cycle3(RAB, RCD, 4);
-	encrypt_cycle3(RAB, RCD, 5);
-	encrypt_cycle3(RAB, RCD, 6);
-	encrypt_cycle3(RAB, RCD, 7);
+	push_cd();
+	encrypt_cycle3(RAB, CD, 0);
+	encrypt_cycle3(RAB, CD, 1);
+	encrypt_cycle3(RAB, CD, 2);
+	encrypt_cycle3(RAB, CD, 3);
+	encrypt_cycle3(RAB, CD, 4);
+	encrypt_cycle3(RAB, CD, 5);
+	encrypt_cycle3(RAB, CD, 6);
+	encrypt_cycle3(RAB, CD, 7);
+	pop_cd();
 
 	popq RIO; /* dst */
-	popq %rbp; /* bool xor */
+	popq RT1; /* bool xor */
 
-	testb %bpl, %bpl;
+	testb RT1bl, RT1bl;
 	jnz .L__enc_xor3;
 
 	outunpack_enc3(mov);
 
 	popq %rbx;
-	popq %rbp;
 	popq %r12;
 	popq %r13;
-	popq %r14;
-	popq %r15;
 	ret;
 
 .L__enc_xor3:
 	outunpack_enc3(xor);
 
 	popq %rbx;
-	popq %rbp;
 	popq %r12;
 	popq %r13;
-	popq %r14;
-	popq %r15;
 	ret;
 ENDPROC(__twofish_enc_blk_3way)
 
@@ -278,35 +290,31 @@ ENTRY(twofish_dec_blk_3way)
 	 *	%rsi: dst
 	 *	%rdx: src, RIO
 	 */
-	pushq %r15;
-	pushq %r14;
 	pushq %r13;
 	pushq %r12;
-	pushq %rbp;
 	pushq %rbx;
 
 	pushq %rsi; /* dst */
 
 	inpack_dec3();
 
-	decrypt_cycle3(RAB, RCD, 7);
-	decrypt_cycle3(RAB, RCD, 6);
-	decrypt_cycle3(RAB, RCD, 5);
-	decrypt_cycle3(RAB, RCD, 4);
-	decrypt_cycle3(RAB, RCD, 3);
-	decrypt_cycle3(RAB, RCD, 2);
-	decrypt_cycle3(RAB, RCD, 1);
-	decrypt_cycle3(RAB, RCD, 0);
+	push_cd();
+	decrypt_cycle3(RAB, CD, 7);
+	decrypt_cycle3(RAB, CD, 6);
+	decrypt_cycle3(RAB, CD, 5);
+	decrypt_cycle3(RAB, CD, 4);
+	decrypt_cycle3(RAB, CD, 3);
+	decrypt_cycle3(RAB, CD, 2);
+	decrypt_cycle3(RAB, CD, 1);
+	decrypt_cycle3(RAB, CD, 0);
+	pop_cd();
 
 	popq RIO; /* dst */
 
 	outunpack_dec3();
 
 	popq %rbx;
-	popq %rbp;
 	popq %r12;
 	popq %r13;
-	popq %r14;
-	popq %r15;
 	ret;
 ENDPROC(twofish_dec_blk_3way)

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 013/193] staging: android: ion: Add __GFP_NOWARN for system contig heap
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (11 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 012/193] crypto: x86/twofish-3way - Fix %rbp usage Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 20:46   ` Nathan Chancellor
  2018-02-23 18:24 ` [PATCH 4.4 014/193] KVM: x86: fix escape of guest dr6 to the host Greg Kroah-Hartman
                   ` (186 subsequent siblings)
  199 siblings, 1 reply; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, syzbot+76e7efc4748495855a4d, syzbot,
	Laura Abbott

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Laura Abbott <labbott@redhat.com>

commit 0c75f10312a35b149b2cebb1832316b35c2337ca upstream.

syzbot reported a warning from Ion:

  WARNING: CPU: 1 PID: 3485 at mm/page_alloc.c:3926

  ...
   __alloc_pages_nodemask+0x9fb/0xd80 mm/page_alloc.c:4252
  alloc_pages_current+0xb6/0x1e0 mm/mempolicy.c:2036
  alloc_pages include/linux/gfp.h:492 [inline]
  ion_system_contig_heap_allocate+0x40/0x2c0
  drivers/staging/android/ion/ion_system_heap.c:374
  ion_buffer_create drivers/staging/android/ion/ion.c:93 [inline]
  ion_alloc+0x2c1/0x9e0 drivers/staging/android/ion/ion.c:420
  ion_ioctl+0x26d/0x380 drivers/staging/android/ion/ion-ioctl.c:84
  vfs_ioctl fs/ioctl.c:46 [inline]
  do_vfs_ioctl+0x1b1/0x1520 fs/ioctl.c:686
  SYSC_ioctl fs/ioctl.c:701 [inline]
  SyS_ioctl+0x8f/0xc0 fs/ioctl.c:692

This is a warning about attempting to allocate order > MAX_ORDER. This
is coming from a userspace Ion allocation request. Since userspace is
free to request however much memory it wants (and the kernel is free to
deny its allocation), silence the allocation attempt with __GFP_NOWARN
in case it fails.

Reported-by: syzbot+76e7efc4748495855a4d@syzkaller.appspotmail.com
Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Laura Abbott <labbott@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/staging/android/ion/ion_system_heap.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/staging/android/ion/ion_system_heap.c
+++ b/drivers/staging/android/ion/ion_system_heap.c
@@ -336,7 +336,7 @@ static int ion_system_contig_heap_alloca
 	if (align > (PAGE_SIZE << order))
 		return -EINVAL;
 
-	page = alloc_pages(low_order_gfp_flags, order);
+	page = alloc_pages(low_order_gfp_flags | __GFP_NOWARN, order);
 	if (!page)
 		return -ENOMEM;
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 014/193] KVM: x86: fix escape of guest dr6 to the host
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (12 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 013/193] staging: android: ion: Add __GFP_NOWARN for system contig heap Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 015/193] netfilter: x_tables: fix int overflow in xt_alloc_table_info() Greg Kroah-Hartman
                   ` (185 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Dmitry Vyukov, Paolo Bonzini,
	Radim Krčmář,
	David Hildenbrand, Wanpeng Li

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Wanpeng Li <wanpeng.li@hotmail.com>

commit efdab992813fb2ed825745625b83c05032e9cda2 upstream.

syzkaller reported:

   WARNING: CPU: 0 PID: 12927 at arch/x86/kernel/traps.c:780 do_debug+0x222/0x250
   CPU: 0 PID: 12927 Comm: syz-executor Tainted: G           OE    4.15.0-rc2+ #16
   RIP: 0010:do_debug+0x222/0x250
   Call Trace:
    <#DB>
    debug+0x3e/0x70
   RIP: 0010:copy_user_enhanced_fast_string+0x10/0x20
    </#DB>
    _copy_from_user+0x5b/0x90
    SyS_timer_create+0x33/0x80
    entry_SYSCALL_64_fastpath+0x23/0x9a

The testcase sets a watchpoint (with perf_event_open) on a buffer that is
passed to timer_create() as the struct sigevent argument.  In timer_create(),
copy_from_user()'s rep movsb triggers the BP.  The testcase also sets
the debug registers for the guest.

However, KVM only restores host debug registers when the host has active
watchpoints, which triggers a race condition when running the testcase with
multiple threads.  The guest's DR6.BS bit can escape to the host before
another thread invokes timer_create(), and do_debug() complains.

The fix is to respect do_debug()'s dr6 invariant when leaving KVM.

Reported-by: Dmitry Vyukov <dvyukov@google.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/x86/kvm/x86.c |    6 ++++++
 1 file changed, 6 insertions(+)

--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -2755,6 +2755,12 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *
 	kvm_x86_ops->vcpu_put(vcpu);
 	kvm_put_guest_fpu(vcpu);
 	vcpu->arch.last_host_tsc = rdtsc();
+	/*
+	 * If userspace has set any breakpoints or watchpoints, dr6 is restored
+	 * on every vmexit, but if not, we might have a stale dr6 from the
+	 * guest. do_debug expects dr6 to be cleared after it runs, do the same.
+	 */
+	set_debugreg(0, 6);
 }
 
 static int kvm_vcpu_ioctl_get_lapic(struct kvm_vcpu *vcpu,

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 015/193] netfilter: x_tables: fix int overflow in xt_alloc_table_info()
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (13 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 014/193] KVM: x86: fix escape of guest dr6 to the host Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 016/193] netfilter: x_tables: avoid out-of-bounds reads in xt_request_find_{match|target} Greg Kroah-Hartman
                   ` (184 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, syzbot+4396883fa8c4f64e0175,
	Dmitry Vyukov, Pablo Neira Ayuso

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Dmitry Vyukov <dvyukov@google.com>

commit 889c604fd0b5f6d3b8694ade229ee44124de1127 upstream.

syzkaller triggered OOM kills by passing ipt_replace.size = -1
to IPT_SO_SET_REPLACE. The root cause is that SMP_ALIGN() in
xt_alloc_table_info() causes int overflow and the size check passes
when it should not. SMP_ALIGN() is no longer needed leftover.

Remove SMP_ALIGN() call in xt_alloc_table_info().

Reported-by: syzbot+4396883fa8c4f64e0175@syzkaller.appspotmail.com
Signed-off-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 net/netfilter/x_tables.c |    4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

--- a/net/netfilter/x_tables.c
+++ b/net/netfilter/x_tables.c
@@ -38,8 +38,6 @@ MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
 MODULE_DESCRIPTION("{ip,ip6,arp,eb}_tables backend module");
 
-#define SMP_ALIGN(x) (((x) + SMP_CACHE_BYTES-1) & ~(SMP_CACHE_BYTES-1))
-
 struct compat_delta {
 	unsigned int offset; /* offset in kernel */
 	int delta; /* delta in 32bit user land */
@@ -954,7 +952,7 @@ struct xt_table_info *xt_alloc_table_inf
 		return NULL;
 
 	/* Pedantry: prevent them from hitting BUG() in vmalloc.c --RR */
-	if ((SMP_ALIGN(size) >> PAGE_SHIFT) + 2 > totalram_pages)
+	if ((size >> PAGE_SHIFT) + 2 > totalram_pages)
 		return NULL;
 
 	if (sz <= (PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER))

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 016/193] netfilter: x_tables: avoid out-of-bounds reads in xt_request_find_{match|target}
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (14 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 015/193] netfilter: x_tables: fix int overflow in xt_alloc_table_info() Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 017/193] netfilter: ipt_CLUSTERIP: fix out-of-bounds accesses in clusterip_tg_check() Greg Kroah-Hartman
                   ` (183 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Eric Dumazet, syzbot,
	Florian Westphal, Pablo Neira Ayuso

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Eric Dumazet <edumazet@google.com>

commit da17c73b6eb74aad3c3c0654394635675b623b3e upstream.

It looks like syzbot found its way into netfilter territory.

Issue here is that @name comes from user space and might
not be null terminated.

Out-of-bound reads happen, KASAN is not happy.

v2 added similar fix for xt_request_find_target(),
as Florian advised.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Acked-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 net/netfilter/x_tables.c |    6 ++++++
 1 file changed, 6 insertions(+)

--- a/net/netfilter/x_tables.c
+++ b/net/netfilter/x_tables.c
@@ -206,6 +206,9 @@ xt_request_find_match(uint8_t nfproto, c
 {
 	struct xt_match *match;
 
+	if (strnlen(name, XT_EXTENSION_MAXNAMELEN) == XT_EXTENSION_MAXNAMELEN)
+		return ERR_PTR(-EINVAL);
+
 	match = xt_find_match(nfproto, name, revision);
 	if (IS_ERR(match)) {
 		request_module("%st_%s", xt_prefix[nfproto], name);
@@ -248,6 +251,9 @@ struct xt_target *xt_request_find_target
 {
 	struct xt_target *target;
 
+	if (strnlen(name, XT_EXTENSION_MAXNAMELEN) == XT_EXTENSION_MAXNAMELEN)
+		return ERR_PTR(-EINVAL);
+
 	target = xt_find_target(af, name, revision);
 	if (IS_ERR(target)) {
 		request_module("%st_%s", xt_prefix[af], name);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 017/193] netfilter: ipt_CLUSTERIP: fix out-of-bounds accesses in clusterip_tg_check()
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (15 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 016/193] netfilter: x_tables: avoid out-of-bounds reads in xt_request_find_{match|target} Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 018/193] netfilter: on sockopt() acquire sock lock only in the required scope Greg Kroah-Hartman
                   ` (182 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Dmitry Vyukov, syzbot, Pablo Neira Ayuso

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Dmitry Vyukov <dvyukov@google.com>

commit 1a38956cce5eabd7b74f94bab70265e4df83165e upstream.

Commit 136e92bbec0a switched local_nodes from an array to a bitmask
but did not add proper bounds checks. As the result
clusterip_config_init_nodelist() can both over-read
ipt_clusterip_tgt_info.local_nodes and over-write
clusterip_config.local_nodes.

Add bounds checks for both.

Fixes: 136e92bbec0a ("[NETFILTER] CLUSTERIP: use a bitmap to store node responsibility data")
Signed-off-by: Dmitry Vyukov <dvyukov@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 net/ipv4/netfilter/ipt_CLUSTERIP.c |   16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

--- a/net/ipv4/netfilter/ipt_CLUSTERIP.c
+++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c
@@ -365,7 +365,7 @@ static int clusterip_tg_check(const stru
 	struct ipt_clusterip_tgt_info *cipinfo = par->targinfo;
 	const struct ipt_entry *e = par->entryinfo;
 	struct clusterip_config *config;
-	int ret;
+	int ret, i;
 
 	if (par->nft_compat) {
 		pr_err("cannot use CLUSTERIP target from nftables compat\n");
@@ -384,8 +384,18 @@ static int clusterip_tg_check(const stru
 		pr_info("Please specify destination IP\n");
 		return -EINVAL;
 	}
-
-	/* FIXME: further sanity checks */
+	if (cipinfo->num_local_nodes > ARRAY_SIZE(cipinfo->local_nodes)) {
+		pr_info("bad num_local_nodes %u\n", cipinfo->num_local_nodes);
+		return -EINVAL;
+	}
+	for (i = 0; i < cipinfo->num_local_nodes; i++) {
+		if (cipinfo->local_nodes[i] - 1 >=
+		    sizeof(config->local_nodes) * 8) {
+			pr_info("bad local_nodes[%d] %u\n",
+				i, cipinfo->local_nodes[i]);
+			return -EINVAL;
+		}
+	}
 
 	config = clusterip_config_find_get(par->net, e->ip.dst.s_addr, 1);
 	if (!config) {

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 018/193] netfilter: on sockopt() acquire sock lock only in the required scope
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (16 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 017/193] netfilter: ipt_CLUSTERIP: fix out-of-bounds accesses in clusterip_tg_check() Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 019/193] netfilter: xt_RATEEST: acquire xt_rateest_mutex for hash insert Greg Kroah-Hartman
                   ` (181 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, syzbot+a4c2dc980ac1af699b36,
	Florian Westphal, Paolo Abeni, Pablo Neira Ayuso

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Paolo Abeni <pabeni@redhat.com>

commit 3f34cfae1238848fd53f25e5c8fd59da57901f4b upstream.

Syzbot reported several deadlocks in the netfilter area caused by
rtnl lock and socket lock being acquired with a different order on
different code paths, leading to backtraces like the following one:

======================================================
WARNING: possible circular locking dependency detected
4.15.0-rc9+ #212 Not tainted
------------------------------------------------------
syzkaller041579/3682 is trying to acquire lock:
  (sk_lock-AF_INET6){+.+.}, at: [<000000008775e4dd>] lock_sock
include/net/sock.h:1463 [inline]
  (sk_lock-AF_INET6){+.+.}, at: [<000000008775e4dd>]
do_ipv6_setsockopt.isra.8+0x3c5/0x39d0 net/ipv6/ipv6_sockglue.c:167

but task is already holding lock:
  (rtnl_mutex){+.+.}, at: [<000000004342eaa9>] rtnl_lock+0x17/0x20
net/core/rtnetlink.c:74

which lock already depends on the new lock.

the existing dependency chain (in reverse order) is:

-> #1 (rtnl_mutex){+.+.}:
        __mutex_lock_common kernel/locking/mutex.c:756 [inline]
        __mutex_lock+0x16f/0x1a80 kernel/locking/mutex.c:893
        mutex_lock_nested+0x16/0x20 kernel/locking/mutex.c:908
        rtnl_lock+0x17/0x20 net/core/rtnetlink.c:74
        register_netdevice_notifier+0xad/0x860 net/core/dev.c:1607
        tee_tg_check+0x1a0/0x280 net/netfilter/xt_TEE.c:106
        xt_check_target+0x22c/0x7d0 net/netfilter/x_tables.c:845
        check_target net/ipv6/netfilter/ip6_tables.c:538 [inline]
        find_check_entry.isra.7+0x935/0xcf0
net/ipv6/netfilter/ip6_tables.c:580
        translate_table+0xf52/0x1690 net/ipv6/netfilter/ip6_tables.c:749
        do_replace net/ipv6/netfilter/ip6_tables.c:1165 [inline]
        do_ip6t_set_ctl+0x370/0x5f0 net/ipv6/netfilter/ip6_tables.c:1691
        nf_sockopt net/netfilter/nf_sockopt.c:106 [inline]
        nf_setsockopt+0x67/0xc0 net/netfilter/nf_sockopt.c:115
        ipv6_setsockopt+0x115/0x150 net/ipv6/ipv6_sockglue.c:928
        udpv6_setsockopt+0x45/0x80 net/ipv6/udp.c:1422
        sock_common_setsockopt+0x95/0xd0 net/core/sock.c:2978
        SYSC_setsockopt net/socket.c:1849 [inline]
        SyS_setsockopt+0x189/0x360 net/socket.c:1828
        entry_SYSCALL_64_fastpath+0x29/0xa0

-> #0 (sk_lock-AF_INET6){+.+.}:
        lock_acquire+0x1d5/0x580 kernel/locking/lockdep.c:3914
        lock_sock_nested+0xc2/0x110 net/core/sock.c:2780
        lock_sock include/net/sock.h:1463 [inline]
        do_ipv6_setsockopt.isra.8+0x3c5/0x39d0 net/ipv6/ipv6_sockglue.c:167
        ipv6_setsockopt+0xd7/0x150 net/ipv6/ipv6_sockglue.c:922
        udpv6_setsockopt+0x45/0x80 net/ipv6/udp.c:1422
        sock_common_setsockopt+0x95/0xd0 net/core/sock.c:2978
        SYSC_setsockopt net/socket.c:1849 [inline]
        SyS_setsockopt+0x189/0x360 net/socket.c:1828
        entry_SYSCALL_64_fastpath+0x29/0xa0

other info that might help us debug this:

  Possible unsafe locking scenario:

        CPU0                    CPU1
        ----                    ----
   lock(rtnl_mutex);
                                lock(sk_lock-AF_INET6);
                                lock(rtnl_mutex);
   lock(sk_lock-AF_INET6);

  *** DEADLOCK ***

1 lock held by syzkaller041579/3682:
  #0:  (rtnl_mutex){+.+.}, at: [<000000004342eaa9>] rtnl_lock+0x17/0x20
net/core/rtnetlink.c:74

The problem, as Florian noted, is that nf_setsockopt() is always
called with the socket held, even if the lock itself is required only
for very tight scopes and only for some operation.

This patch addresses the issues moving the lock_sock() call only
where really needed, namely in ipv*_getorigdst(), so that nf_setsockopt()
does not need anymore to acquire both locks.

Fixes: 22265a5c3c10 ("netfilter: xt_TEE: resolve oif using netdevice notifiers")
Reported-by: syzbot+a4c2dc980ac1af699b36@syzkaller.appspotmail.com
Suggested-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 net/ipv4/ip_sockglue.c                         |   14 ++++----------
 net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c |    6 +++++-
 net/ipv6/ipv6_sockglue.c                       |   17 +++++------------
 net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c |   18 ++++++++++++------
 4 files changed, 26 insertions(+), 29 deletions(-)

--- a/net/ipv4/ip_sockglue.c
+++ b/net/ipv4/ip_sockglue.c
@@ -1221,11 +1221,8 @@ int ip_setsockopt(struct sock *sk, int l
 	if (err == -ENOPROTOOPT && optname != IP_HDRINCL &&
 			optname != IP_IPSEC_POLICY &&
 			optname != IP_XFRM_POLICY &&
-			!ip_mroute_opt(optname)) {
-		lock_sock(sk);
+			!ip_mroute_opt(optname))
 		err = nf_setsockopt(sk, PF_INET, optname, optval, optlen);
-		release_sock(sk);
-	}
 #endif
 	return err;
 }
@@ -1250,12 +1247,9 @@ int compat_ip_setsockopt(struct sock *sk
 	if (err == -ENOPROTOOPT && optname != IP_HDRINCL &&
 			optname != IP_IPSEC_POLICY &&
 			optname != IP_XFRM_POLICY &&
-			!ip_mroute_opt(optname)) {
-		lock_sock(sk);
-		err = compat_nf_setsockopt(sk, PF_INET, optname,
-					   optval, optlen);
-		release_sock(sk);
-	}
+			!ip_mroute_opt(optname))
+		err = compat_nf_setsockopt(sk, PF_INET, optname, optval,
+					   optlen);
 #endif
 	return err;
 }
--- a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c
+++ b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c
@@ -259,15 +259,19 @@ getorigdst(struct sock *sk, int optval,
 	struct nf_conntrack_tuple tuple;
 
 	memset(&tuple, 0, sizeof(tuple));
+
+	lock_sock(sk);
 	tuple.src.u3.ip = inet->inet_rcv_saddr;
 	tuple.src.u.tcp.port = inet->inet_sport;
 	tuple.dst.u3.ip = inet->inet_daddr;
 	tuple.dst.u.tcp.port = inet->inet_dport;
 	tuple.src.l3num = PF_INET;
 	tuple.dst.protonum = sk->sk_protocol;
+	release_sock(sk);
 
 	/* We only do TCP and SCTP at the moment: is there a better way? */
-	if (sk->sk_protocol != IPPROTO_TCP && sk->sk_protocol != IPPROTO_SCTP) {
+	if (tuple.dst.protonum != IPPROTO_TCP &&
+	    tuple.dst.protonum != IPPROTO_SCTP) {
 		pr_debug("SO_ORIGINAL_DST: Not a TCP/SCTP socket\n");
 		return -ENOPROTOOPT;
 	}
--- a/net/ipv6/ipv6_sockglue.c
+++ b/net/ipv6/ipv6_sockglue.c
@@ -905,12 +905,8 @@ int ipv6_setsockopt(struct sock *sk, int
 #ifdef CONFIG_NETFILTER
 	/* we need to exclude all possible ENOPROTOOPTs except default case */
 	if (err == -ENOPROTOOPT && optname != IPV6_IPSEC_POLICY &&
-			optname != IPV6_XFRM_POLICY) {
-		lock_sock(sk);
-		err = nf_setsockopt(sk, PF_INET6, optname, optval,
-				optlen);
-		release_sock(sk);
-	}
+			optname != IPV6_XFRM_POLICY)
+		err = nf_setsockopt(sk, PF_INET6, optname, optval, optlen);
 #endif
 	return err;
 }
@@ -940,12 +936,9 @@ int compat_ipv6_setsockopt(struct sock *
 #ifdef CONFIG_NETFILTER
 	/* we need to exclude all possible ENOPROTOOPTs except default case */
 	if (err == -ENOPROTOOPT && optname != IPV6_IPSEC_POLICY &&
-	    optname != IPV6_XFRM_POLICY) {
-		lock_sock(sk);
-		err = compat_nf_setsockopt(sk, PF_INET6, optname,
-					   optval, optlen);
-		release_sock(sk);
-	}
+	    optname != IPV6_XFRM_POLICY)
+		err = compat_nf_setsockopt(sk, PF_INET6, optname, optval,
+					   optlen);
 #endif
 	return err;
 }
--- a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
+++ b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
@@ -226,20 +226,27 @@ static struct nf_hook_ops ipv6_conntrack
 static int
 ipv6_getorigdst(struct sock *sk, int optval, void __user *user, int *len)
 {
-	const struct inet_sock *inet = inet_sk(sk);
+	struct nf_conntrack_tuple tuple = { .src.l3num = NFPROTO_IPV6 };
 	const struct ipv6_pinfo *inet6 = inet6_sk(sk);
+	const struct inet_sock *inet = inet_sk(sk);
 	const struct nf_conntrack_tuple_hash *h;
 	struct sockaddr_in6 sin6;
-	struct nf_conntrack_tuple tuple = { .src.l3num = NFPROTO_IPV6 };
 	struct nf_conn *ct;
+	__be32 flow_label;
+	int bound_dev_if;
 
+	lock_sock(sk);
 	tuple.src.u3.in6 = sk->sk_v6_rcv_saddr;
 	tuple.src.u.tcp.port = inet->inet_sport;
 	tuple.dst.u3.in6 = sk->sk_v6_daddr;
 	tuple.dst.u.tcp.port = inet->inet_dport;
 	tuple.dst.protonum = sk->sk_protocol;
+	bound_dev_if = sk->sk_bound_dev_if;
+	flow_label = inet6->flow_label;
+	release_sock(sk);
 
-	if (sk->sk_protocol != IPPROTO_TCP && sk->sk_protocol != IPPROTO_SCTP)
+	if (tuple.dst.protonum != IPPROTO_TCP &&
+	    tuple.dst.protonum != IPPROTO_SCTP)
 		return -ENOPROTOOPT;
 
 	if (*len < 0 || (unsigned int) *len < sizeof(sin6))
@@ -257,14 +264,13 @@ ipv6_getorigdst(struct sock *sk, int opt
 
 	sin6.sin6_family = AF_INET6;
 	sin6.sin6_port = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u.tcp.port;
-	sin6.sin6_flowinfo = inet6->flow_label & IPV6_FLOWINFO_MASK;
+	sin6.sin6_flowinfo = flow_label & IPV6_FLOWINFO_MASK;
 	memcpy(&sin6.sin6_addr,
 		&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u3.in6,
 					sizeof(sin6.sin6_addr));
 
 	nf_ct_put(ct);
-	sin6.sin6_scope_id = ipv6_iface_scope_id(&sin6.sin6_addr,
-						 sk->sk_bound_dev_if);
+	sin6.sin6_scope_id = ipv6_iface_scope_id(&sin6.sin6_addr, bound_dev_if);
 	return copy_to_user(user, &sin6, sizeof(sin6)) ? -EFAULT : 0;
 }
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 019/193] netfilter: xt_RATEEST: acquire xt_rateest_mutex for hash insert
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (17 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 018/193] netfilter: on sockopt() acquire sock lock only in the required scope Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 020/193] net: avoid skb_warn_bad_offload on IS_ERR Greg Kroah-Hartman
                   ` (180 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, syzbot+5cb189720978275e4c75,
	Cong Wang, Florian Westphal, Eric Dumazet, Pablo Neira Ayuso

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Cong Wang <xiyou.wangcong@gmail.com>

commit 7dc68e98757a8eccf8ca7a53a29b896f1eef1f76 upstream.

rateest_hash is supposed to be protected by xt_rateest_mutex,
and, as suggested by Eric, lookup and insert should be atomic,
so we should acquire the xt_rateest_mutex once for both.

So introduce a non-locking helper for internal use and keep the
locking one for external.

Reported-by: <syzbot+5cb189720978275e4c75@syzkaller.appspotmail.com>
Fixes: 5859034d7eb8 ("[NETFILTER]: x_tables: add RATEEST target")
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Reviewed-by: Florian Westphal <fw@strlen.de>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 net/netfilter/xt_RATEEST.c |   22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

--- a/net/netfilter/xt_RATEEST.c
+++ b/net/netfilter/xt_RATEEST.c
@@ -40,23 +40,31 @@ static void xt_rateest_hash_insert(struc
 	hlist_add_head(&est->list, &rateest_hash[h]);
 }
 
-struct xt_rateest *xt_rateest_lookup(const char *name)
+static struct xt_rateest *__xt_rateest_lookup(const char *name)
 {
 	struct xt_rateest *est;
 	unsigned int h;
 
 	h = xt_rateest_hash(name);
-	mutex_lock(&xt_rateest_mutex);
 	hlist_for_each_entry(est, &rateest_hash[h], list) {
 		if (strcmp(est->name, name) == 0) {
 			est->refcnt++;
-			mutex_unlock(&xt_rateest_mutex);
 			return est;
 		}
 	}
-	mutex_unlock(&xt_rateest_mutex);
+
 	return NULL;
 }
+
+struct xt_rateest *xt_rateest_lookup(const char *name)
+{
+	struct xt_rateest *est;
+
+	mutex_lock(&xt_rateest_mutex);
+	est = __xt_rateest_lookup(name);
+	mutex_unlock(&xt_rateest_mutex);
+	return est;
+}
 EXPORT_SYMBOL_GPL(xt_rateest_lookup);
 
 void xt_rateest_put(struct xt_rateest *est)
@@ -104,8 +112,10 @@ static int xt_rateest_tg_checkentry(cons
 		rnd_inited = true;
 	}
 
-	est = xt_rateest_lookup(info->name);
+	mutex_lock(&xt_rateest_mutex);
+	est = __xt_rateest_lookup(info->name);
 	if (est) {
+		mutex_unlock(&xt_rateest_mutex);
 		/*
 		 * If estimator parameters are specified, they must match the
 		 * existing estimator.
@@ -143,11 +153,13 @@ static int xt_rateest_tg_checkentry(cons
 
 	info->est = est;
 	xt_rateest_hash_insert(est);
+	mutex_unlock(&xt_rateest_mutex);
 	return 0;
 
 err2:
 	kfree(est);
 err1:
+	mutex_unlock(&xt_rateest_mutex);
 	return ret;
 }
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 020/193] net: avoid skb_warn_bad_offload on IS_ERR
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (18 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 019/193] netfilter: xt_RATEEST: acquire xt_rateest_mutex for hash insert Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 021/193] ASoC: ux500: add MODULE_LICENSE tag Greg Kroah-Hartman
                   ` (179 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Willem de Bruijn, David S. Miller

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Willem de Bruijn <willemb@google.com>

commit 8d74e9f88d65af8bb2e095aff506aa6eac755ada upstream.

skb_warn_bad_offload warns when packets enter the GSO stack that
require skb_checksum_help or vice versa. Do not warn on arbitrary
bad packets. Packet sockets can craft many. Syzkaller was able to
demonstrate another one with eth_type games.

In particular, suppress the warning when segmentation returns an
error, which is for reasons other than checksum offload.

See also commit 36c92474498a ("net: WARN if skb_checksum_help() is
called on skb requiring segmentation") for context on this warning.

Signed-off-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 net/core/dev.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2598,7 +2598,7 @@ struct sk_buff *__skb_gso_segment(struct
 
 	segs = skb_mac_gso_segment(skb, features);
 
-	if (unlikely(skb_needs_check(skb, tx_path)))
+	if (unlikely(skb_needs_check(skb, tx_path) && !IS_ERR(segs)))
 		skb_warn_bad_offload(skb);
 
 	return segs;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 021/193] ASoC: ux500: add MODULE_LICENSE tag
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (19 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 020/193] net: avoid skb_warn_bad_offload on IS_ERR Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 022/193] video: fbdev/mmp: add MODULE_LICENSE Greg Kroah-Hartman
                   ` (178 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Mark Brown

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 1783c9d7cb7bc3181b9271665959b87280d98d8e upstream.

This adds MODULE_LICENSE/AUTHOR/DESCRIPTION tags to the ux500
platform drivers, to avoid these build warnings:

WARNING: modpost: missing MODULE_LICENSE() in sound/soc/ux500/snd-soc-ux500-plat-dma.o
WARNING: modpost: missing MODULE_LICENSE() in sound/soc/ux500/snd-soc-ux500-mach-mop500.o

The company no longer exists, so the email addresses of the authors
don't work any more, but I've added them anyway for consistency.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 sound/soc/ux500/mop500.c    |    4 ++++
 sound/soc/ux500/ux500_pcm.c |    5 +++++
 2 files changed, 9 insertions(+)

--- a/sound/soc/ux500/mop500.c
+++ b/sound/soc/ux500/mop500.c
@@ -164,3 +164,7 @@ static struct platform_driver snd_soc_mo
 };
 
 module_platform_driver(snd_soc_mop500_driver);
+
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("ASoC MOP500 board driver");
+MODULE_AUTHOR("Ola Lilja");
--- a/sound/soc/ux500/ux500_pcm.c
+++ b/sound/soc/ux500/ux500_pcm.c
@@ -165,3 +165,8 @@ int ux500_pcm_unregister_platform(struct
 	return 0;
 }
 EXPORT_SYMBOL_GPL(ux500_pcm_unregister_platform);
+
+MODULE_AUTHOR("Ola Lilja");
+MODULE_AUTHOR("Roger Nilsson");
+MODULE_DESCRIPTION("ASoC UX500 driver");
+MODULE_LICENSE("GPL v2");

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 022/193] video: fbdev/mmp: add MODULE_LICENSE
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (20 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 021/193] ASoC: ux500: add MODULE_LICENSE tag Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 023/193] arm64: dts: add #cooling-cells to CPU nodes Greg Kroah-Hartman
                   ` (177 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Bartlomiej Zolnierkiewicz

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit c1530ac5a3ce93a1f02adabc4508b5fbf862dfe2 upstream.

Kbuild complains about the lack of a license tag in this driver:

WARNING: modpost: missing MODULE_LICENSE() in drivers/video/fbdev/mmp/mmp_disp.o

This adds the license, author and description tags.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/video/fbdev/mmp/core.c |    5 +++++
 1 file changed, 5 insertions(+)

--- a/drivers/video/fbdev/mmp/core.c
+++ b/drivers/video/fbdev/mmp/core.c
@@ -23,6 +23,7 @@
 #include <linux/slab.h>
 #include <linux/dma-mapping.h>
 #include <linux/export.h>
+#include <linux/module.h>
 #include <video/mmp_disp.h>
 
 static struct mmp_overlay *path_get_overlay(struct mmp_path *path,
@@ -249,3 +250,7 @@ void mmp_unregister_path(struct mmp_path
 	mutex_unlock(&disp_lock);
 }
 EXPORT_SYMBOL_GPL(mmp_unregister_path);
+
+MODULE_AUTHOR("Zhou Zhu <zzhu3@marvell.com>");
+MODULE_DESCRIPTION("Marvell MMP display framework");
+MODULE_LICENSE("GPL");

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 023/193] arm64: dts: add #cooling-cells to CPU nodes
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (21 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 022/193] video: fbdev/mmp: add MODULE_LICENSE Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 024/193] Make DST_CACHE a silent config option Greg Kroah-Hartman
                   ` (176 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Chunfeng Yun, Olof Johansson

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit acbf76ee05067c3942852019993f7beb69a0f45f upstream.

dtc complains about the lack of #coolin-cells properties for the
CPU nodes that are referred to as "cooling-device":

arch/arm64/boot/dts/mediatek/mt8173-evb.dtb: Warning (cooling_device_property): Missing property '#cooling-cells' in node /cpus/cpu@0 or bad phandle (referred from /thermal-zones/cpu_thermal/cooling-maps/map@0:cooling-device[0])
arch/arm64/boot/dts/mediatek/mt8173-evb.dtb: Warning (cooling_device_property): Missing property '#cooling-cells' in node /cpus/cpu@100 or bad phandle (referred from /thermal-zones/cpu_thermal/cooling-maps/map@1:cooling-device[0])

Apparently this property must be '<2>' to match the binding.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Tested-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
Signed-off-by: Olof Johansson <olof@lixom.net>
[arnd: backported to 4.15]
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/arm64/boot/dts/mediatek/mt8173.dtsi |    2 ++
 1 file changed, 2 insertions(+)

--- a/arch/arm64/boot/dts/mediatek/mt8173.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
@@ -54,6 +54,7 @@
 			reg = <0x000>;
 			enable-method = "psci";
 			cpu-idle-states = <&CPU_SLEEP_0>;
+			#cooling-cells = <2>;
 		};
 
 		cpu1: cpu@1 {
@@ -70,6 +71,7 @@
 			reg = <0x100>;
 			enable-method = "psci";
 			cpu-idle-states = <&CPU_SLEEP_0>;
+			#cooling-cells = <2>;
 		};
 
 		cpu3: cpu@101 {

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 024/193] Make DST_CACHE a silent config option
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (22 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 023/193] arm64: dts: add #cooling-cells to CPU nodes Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 025/193] dn_getsockoptdecnet: move nf_{get/set}sockopt outside sock lock Greg Kroah-Hartman
                   ` (175 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Dave Jones, David S. Miller,
	Paolo Abeni, manojboopathi

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Dave Jones <davej@codemonkey.org.uk>

commit 9b246841f4041f85265dec5f769c017fc36a0d33 upstream.

commit 911362c70d ("net: add dst_cache support") added a new
kconfig option that gets selected by other networking options.
It seems the intent wasn't to offer this as a user-selectable
option given the lack of help text, so this patch converts it
to a silent option.

Signed-off-by: Dave Jones <davej@codemonkey.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: <manojboopathi@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 net/Kconfig |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/net/Kconfig
+++ b/net/Kconfig
@@ -384,7 +384,7 @@ config LWTUNNEL
 	  with light weight tunnel state associated with fib routes.
 
 config DST_CACHE
-	bool "dst cache"
+	bool
 	default n
 
 endif   # if NET

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 025/193] dn_getsockoptdecnet: move nf_{get/set}sockopt outside sock lock
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (23 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 024/193] Make DST_CACHE a silent config option Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 026/193] staging: android: ashmem: Fix a race condition in pin ioctls Greg Kroah-Hartman
                   ` (174 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Petr Vandrovec, Paolo Abeni, David S. Miller

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Paolo Abeni <pabeni@redhat.com>

commit dfec091439bb2acf763497cfc58f2bdfc67c56b7 upstream.

After commit 3f34cfae1238 ("netfilter: on sockopt() acquire sock lock
only in the required scope"), the caller of nf_{get/set}sockopt() must
not hold any lock, but, in such changeset, I forgot to cope with DECnet.

This commit addresses the issue moving the nf call outside the lock,
in the dn_{get,set}sockopt() with the same schema currently used by
ipv4 and ipv6. Also moves the unhandled sockopts of the end of the main
switch statements, to improve code readability.

Reported-by: Petr Vandrovec <petr@vandrovec.name>
BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=198791#c2
Fixes: 3f34cfae1238 ("netfilter: on sockopt() acquire sock lock only in the required scope")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 net/decnet/af_decnet.c |   62 ++++++++++++++++++++++++++-----------------------
 1 file changed, 33 insertions(+), 29 deletions(-)

--- a/net/decnet/af_decnet.c
+++ b/net/decnet/af_decnet.c
@@ -1337,6 +1337,12 @@ static int dn_setsockopt(struct socket *
 	lock_sock(sk);
 	err = __dn_setsockopt(sock, level, optname, optval, optlen, 0);
 	release_sock(sk);
+#ifdef CONFIG_NETFILTER
+	/* we need to exclude all possible ENOPROTOOPTs except default case */
+	if (err == -ENOPROTOOPT && optname != DSO_LINKINFO &&
+	    optname != DSO_STREAM && optname != DSO_SEQPACKET)
+		err = nf_setsockopt(sk, PF_DECnet, optname, optval, optlen);
+#endif
 
 	return err;
 }
@@ -1444,15 +1450,6 @@ static int __dn_setsockopt(struct socket
 		dn_nsp_send_disc(sk, 0x38, 0, sk->sk_allocation);
 		break;
 
-	default:
-#ifdef CONFIG_NETFILTER
-		return nf_setsockopt(sk, PF_DECnet, optname, optval, optlen);
-#endif
-	case DSO_LINKINFO:
-	case DSO_STREAM:
-	case DSO_SEQPACKET:
-		return -ENOPROTOOPT;
-
 	case DSO_MAXWINDOW:
 		if (optlen != sizeof(unsigned long))
 			return -EINVAL;
@@ -1500,6 +1497,12 @@ static int __dn_setsockopt(struct socket
 			return -EINVAL;
 		scp->info_loc = u.info;
 		break;
+
+	case DSO_LINKINFO:
+	case DSO_STREAM:
+	case DSO_SEQPACKET:
+	default:
+		return -ENOPROTOOPT;
 	}
 
 	return 0;
@@ -1513,6 +1516,20 @@ static int dn_getsockopt(struct socket *
 	lock_sock(sk);
 	err = __dn_getsockopt(sock, level, optname, optval, optlen, 0);
 	release_sock(sk);
+#ifdef CONFIG_NETFILTER
+	if (err == -ENOPROTOOPT && optname != DSO_STREAM &&
+	    optname != DSO_SEQPACKET && optname != DSO_CONACCEPT &&
+	    optname != DSO_CONREJECT) {
+		int len;
+
+		if (get_user(len, optlen))
+			return -EFAULT;
+
+		err = nf_getsockopt(sk, PF_DECnet, optname, optval, &len);
+		if (err >= 0)
+			err = put_user(len, optlen);
+	}
+#endif
 
 	return err;
 }
@@ -1578,26 +1595,6 @@ static int __dn_getsockopt(struct socket
 		r_data = &link;
 		break;
 
-	default:
-#ifdef CONFIG_NETFILTER
-	{
-		int ret, len;
-
-		if (get_user(len, optlen))
-			return -EFAULT;
-
-		ret = nf_getsockopt(sk, PF_DECnet, optname, optval, &len);
-		if (ret >= 0)
-			ret = put_user(len, optlen);
-		return ret;
-	}
-#endif
-	case DSO_STREAM:
-	case DSO_SEQPACKET:
-	case DSO_CONACCEPT:
-	case DSO_CONREJECT:
-		return -ENOPROTOOPT;
-
 	case DSO_MAXWINDOW:
 		if (r_len > sizeof(unsigned long))
 			r_len = sizeof(unsigned long);
@@ -1629,6 +1626,13 @@ static int __dn_getsockopt(struct socket
 			r_len = sizeof(unsigned char);
 		r_data = &scp->info_rem;
 		break;
+
+	case DSO_STREAM:
+	case DSO_SEQPACKET:
+	case DSO_CONACCEPT:
+	case DSO_CONREJECT:
+	default:
+		return -ENOPROTOOPT;
 	}
 
 	if (r_data) {

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 026/193] staging: android: ashmem: Fix a race condition in pin ioctls
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (24 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 025/193] dn_getsockoptdecnet: move nf_{get/set}sockopt outside sock lock Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 027/193] binder: check for binder_thread allocation failure in binder_poll() Greg Kroah-Hartman
                   ` (173 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Ben Hutchings

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Ben Hutchings <ben@decadent.org.uk>

commit ce8a3a9e76d0193e2e8d74a06d275b3c324ca652 upstream.

ashmem_pin_unpin() reads asma->file and asma->size before taking the
ashmem_mutex, so it can race with other operations that modify them.

Build-tested only.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/staging/android/ashmem.c |   19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

--- a/drivers/staging/android/ashmem.c
+++ b/drivers/staging/android/ashmem.c
@@ -704,30 +704,32 @@ static int ashmem_pin_unpin(struct ashme
 	size_t pgstart, pgend;
 	int ret = -EINVAL;
 
+	mutex_lock(&ashmem_mutex);
+
 	if (unlikely(!asma->file))
-		return -EINVAL;
+		goto out_unlock;
 
-	if (unlikely(copy_from_user(&pin, p, sizeof(pin))))
-		return -EFAULT;
+	if (unlikely(copy_from_user(&pin, p, sizeof(pin)))) {
+		ret = -EFAULT;
+		goto out_unlock;
+	}
 
 	/* per custom, you can pass zero for len to mean "everything onward" */
 	if (!pin.len)
 		pin.len = PAGE_ALIGN(asma->size) - pin.offset;
 
 	if (unlikely((pin.offset | pin.len) & ~PAGE_MASK))
-		return -EINVAL;
+		goto out_unlock;
 
 	if (unlikely(((__u32)-1) - pin.offset < pin.len))
-		return -EINVAL;
+		goto out_unlock;
 
 	if (unlikely(PAGE_ALIGN(asma->size) < pin.offset + pin.len))
-		return -EINVAL;
+		goto out_unlock;
 
 	pgstart = pin.offset / PAGE_SIZE;
 	pgend = pgstart + (pin.len / PAGE_SIZE) - 1;
 
-	mutex_lock(&ashmem_mutex);
-
 	switch (cmd) {
 	case ASHMEM_PIN:
 		ret = ashmem_pin(asma, pgstart, pgend);
@@ -740,6 +742,7 @@ static int ashmem_pin_unpin(struct ashme
 		break;
 	}
 
+out_unlock:
 	mutex_unlock(&ashmem_mutex);
 
 	return ret;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 027/193] binder: check for binder_thread allocation failure in binder_poll()
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (25 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 026/193] staging: android: ashmem: Fix a race condition in pin ioctls Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-26 17:21   ` [4.4, " Guenter Roeck
  2018-02-23 18:24 ` [PATCH 4.4 028/193] staging: iio: adc: ad7192: fix external frequency setting Greg Kroah-Hartman
                   ` (172 subsequent siblings)
  199 siblings, 1 reply; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, syzbot, Eric Biggers

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Eric Biggers <ebiggers@google.com>

commit f88982679f54f75daa5b8eff3da72508f1e7422f upstream.

If the kzalloc() in binder_get_thread() fails, binder_poll()
dereferences the resulting NULL pointer.

Fix it by returning POLLERR if the memory allocation failed.

This bug was found by syzkaller using fault injection.

Reported-by: syzbot <syzkaller@googlegroups.com>
Fixes: 457b9a6f09f0 ("Staging: android: add binder driver")
Cc: stable@vger.kernel.org
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/android/binder.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -2622,6 +2622,8 @@ static unsigned int binder_poll(struct f
 	binder_lock(__func__);
 
 	thread = binder_get_thread(proc);
+	if (!thread)
+		return POLLERR;
 
 	wait_for_proc_work = thread->transaction_stack == NULL &&
 		list_empty(&thread->todo) && thread->return_error == BR_OK;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 028/193] staging: iio: adc: ad7192: fix external frequency setting
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (26 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 027/193] binder: check for binder_thread allocation failure in binder_poll() Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 029/193] usbip: keep usbip_device sockfd state in sync with tcp_socket Greg Kroah-Hartman
                   ` (171 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Alexandru Ardelean, Stable, Jonathan Cameron

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Alexandru Ardelean <alexandru.ardelean@analog.com>

commit e31b617d0a63c6558485aaa730fd162faa95a766 upstream.

The external clock frequency was set only when selecting
the internal clock, which is fixed at 4.9152 Mhz.

This is incorrect, since it should be set when any of
the external clock or crystal settings is selected.

Added range validation for the external (crystal/clock)
frequency setting.
Valid values are between 2.4576 and 5.12 Mhz.

Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/staging/iio/adc/ad7192.c |   27 +++++++++++++++++++--------
 1 file changed, 19 insertions(+), 8 deletions(-)

--- a/drivers/staging/iio/adc/ad7192.c
+++ b/drivers/staging/iio/adc/ad7192.c
@@ -124,6 +124,8 @@
 #define AD7192_GPOCON_P1DAT	BIT(1) /* P1 state */
 #define AD7192_GPOCON_P0DAT	BIT(0) /* P0 state */
 
+#define AD7192_EXT_FREQ_MHZ_MIN	2457600
+#define AD7192_EXT_FREQ_MHZ_MAX	5120000
 #define AD7192_INT_FREQ_MHZ	4915200
 
 /* NOTE:
@@ -199,6 +201,12 @@ static int ad7192_calibrate_all(struct a
 				ARRAY_SIZE(ad7192_calib_arr));
 }
 
+static inline bool ad7192_valid_external_frequency(u32 freq)
+{
+	return (freq >= AD7192_EXT_FREQ_MHZ_MIN &&
+		freq <= AD7192_EXT_FREQ_MHZ_MAX);
+}
+
 static int ad7192_setup(struct ad7192_state *st,
 			const struct ad7192_platform_data *pdata)
 {
@@ -224,17 +232,20 @@ static int ad7192_setup(struct ad7192_st
 			 id);
 
 	switch (pdata->clock_source_sel) {
-	case AD7192_CLK_EXT_MCLK1_2:
-	case AD7192_CLK_EXT_MCLK2:
-		st->mclk = AD7192_INT_FREQ_MHZ;
-		break;
 	case AD7192_CLK_INT:
 	case AD7192_CLK_INT_CO:
-		if (pdata->ext_clk_hz)
-			st->mclk = pdata->ext_clk_hz;
-		else
-			st->mclk = AD7192_INT_FREQ_MHZ;
+		st->mclk = AD7192_INT_FREQ_MHZ;
 		break;
+	case AD7192_CLK_EXT_MCLK1_2:
+	case AD7192_CLK_EXT_MCLK2:
+		if (ad7192_valid_external_frequency(pdata->ext_clk_hz)) {
+			st->mclk = pdata->ext_clk_hz;
+			break;
+		}
+		dev_err(&st->sd.spi->dev, "Invalid frequency setting %u\n",
+			pdata->ext_clk_hz);
+		ret = -EINVAL;
+		goto out;
 	default:
 		ret = -EINVAL;
 		goto out;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 029/193] usbip: keep usbip_device sockfd state in sync with tcp_socket
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (27 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 028/193] staging: iio: adc: ad7192: fix external frequency setting Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 030/193] usb: build drivers/usb/common/ when USB_SUPPORT is set Greg Kroah-Hartman
                   ` (170 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Shuah Khan

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Shuah Khan <shuahkh@osg.samsung.com>

commit 009f41aed4b3e11e6dc1e3c07377a10c20f1a5ed upstream.

Keep usbip_device sockfd state in sync with tcp_socket. When tcp_socket
is reset to null, reset sockfd to -1 to keep it in sync.

Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/usb/usbip/stub_dev.c |    3 +++
 drivers/usb/usbip/vhci_hcd.c |    2 ++
 2 files changed, 5 insertions(+)

--- a/drivers/usb/usbip/stub_dev.c
+++ b/drivers/usb/usbip/stub_dev.c
@@ -87,6 +87,7 @@ static ssize_t store_sockfd(struct devic
 			goto err;
 
 		sdev->ud.tcp_socket = socket;
+		sdev->ud.sockfd = sockfd;
 
 		spin_unlock_irq(&sdev->ud.lock);
 
@@ -186,6 +187,7 @@ static void stub_shutdown_connection(str
 	if (ud->tcp_socket) {
 		sockfd_put(ud->tcp_socket);
 		ud->tcp_socket = NULL;
+		ud->sockfd = -1;
 	}
 
 	/* 3. free used data */
@@ -280,6 +282,7 @@ static struct stub_device *stub_device_a
 	sdev->ud.status		= SDEV_ST_AVAILABLE;
 	spin_lock_init(&sdev->ud.lock);
 	sdev->ud.tcp_socket	= NULL;
+	sdev->ud.sockfd		= -1;
 
 	INIT_LIST_HEAD(&sdev->priv_init);
 	INIT_LIST_HEAD(&sdev->priv_tx);
--- a/drivers/usb/usbip/vhci_hcd.c
+++ b/drivers/usb/usbip/vhci_hcd.c
@@ -797,6 +797,7 @@ static void vhci_shutdown_connection(str
 	if (vdev->ud.tcp_socket) {
 		sockfd_put(vdev->ud.tcp_socket);
 		vdev->ud.tcp_socket = NULL;
+		vdev->ud.sockfd = -1;
 	}
 	pr_info("release socket\n");
 
@@ -844,6 +845,7 @@ static void vhci_device_reset(struct usb
 	if (ud->tcp_socket) {
 		sockfd_put(ud->tcp_socket);
 		ud->tcp_socket = NULL;
+		ud->sockfd = -1;
 	}
 	ud->status = VDEV_ST_NULL;
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 030/193] usb: build drivers/usb/common/ when USB_SUPPORT is set
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (28 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 029/193] usbip: keep usbip_device sockfd state in sync with tcp_socket Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 031/193] ARM: OMAP2+: Fix SRAM virt to phys translation for save_secure_ram_context Greg Kroah-Hartman
                   ` (169 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Randy Dunlap, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Randy Dunlap <rdunlap@infradead.org>


[ Upstream commit c9d24f78268be444e803fb2bb138a2f598de9c23 ]

PHY drivers can use ULPI interfaces when CONFIG_USB (which is host side
support) is not enabled, so also build drivers/usb/ when CONFIG_USB_SUPPORT
is enabled so that drivers/usb/common/ is built.

ERROR: "ulpi_unregister_driver" [drivers/phy/ti/phy-tusb1210.ko] undefined!
ERROR: "__ulpi_register_driver" [drivers/phy/ti/phy-tusb1210.ko] undefined!
ERROR: "ulpi_read" [drivers/phy/ti/phy-tusb1210.ko] undefined!
ERROR: "ulpi_write" [drivers/phy/ti/phy-tusb1210.ko] undefined!
ERROR: "ulpi_unregister_driver" [drivers/phy/qualcomm/phy-qcom-usb-hs.ko] undefined!
ERROR: "__ulpi_register_driver" [drivers/phy/qualcomm/phy-qcom-usb-hs.ko] undefined!
ERROR: "ulpi_write" [drivers/phy/qualcomm/phy-qcom-usb-hs.ko] undefined!

Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/Makefile |    1 +
 1 file changed, 1 insertion(+)

--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -96,6 +96,7 @@ obj-$(CONFIG_TC)		+= tc/
 obj-$(CONFIG_UWB)		+= uwb/
 obj-$(CONFIG_USB_PHY)		+= usb/
 obj-$(CONFIG_USB)		+= usb/
+obj-$(CONFIG_USB_SUPPORT)	+= usb/
 obj-$(CONFIG_PCI)		+= usb/
 obj-$(CONFIG_USB_GADGET)	+= usb/
 obj-$(CONFIG_OF)		+= usb/

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 031/193] ARM: OMAP2+: Fix SRAM virt to phys translation for save_secure_ram_context
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (29 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 030/193] usb: build drivers/usb/common/ when USB_SUPPORT is set Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-03-05 23:45   ` Ben Hutchings
  2018-02-23 18:24 ` [PATCH 4.4 032/193] ARM: AM33xx: PRM: Remove am33xx_pwrdm_read_prev_pwrst function Greg Kroah-Hartman
                   ` (168 subsequent siblings)
  199 siblings, 1 reply; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Tony Lindgren, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Tony Lindgren <tony@atomide.com>


[ Upstream commit d09220a887f70368afa79e850c95e74890c0a32d ]

With the CMA changes from Joonsoo Kim <iamjoonsoo.kim@lge.com>, it
was noticed that n900 stopped booting. After investigating it turned
out that n900 save_secure_ram_context does some whacky virtual to
physical address translation for the SRAM data address.

As we now only have minimal parts of omap3 idle code copied to SRAM,
running save_secure_ram_context() in SRAM is not needed. It only gets
called on PM init. And it seems there's no need to ever call this from
SRAM idle code.

So let's just keep save_secure_ram_context() in DDR, and pass it the
physical address of the parameters. We can do everything else in
omap-secure.c like we already do for other secure code.

And since we don't have any documentation, I still have no clue what
the values for 0, 1 and 1 for the parameters might be. If somebody has
figured it out, please do send a patch to add some comments.

Debugged-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/arm/mach-omap2/omap-secure.c |   19 +++++++++++++++++++
 arch/arm/mach-omap2/omap-secure.h |    4 ++++
 arch/arm/mach-omap2/pm.h          |    4 ----
 arch/arm/mach-omap2/pm34xx.c      |   13 ++++---------
 arch/arm/mach-omap2/sleep34xx.S   |   26 ++++----------------------
 5 files changed, 31 insertions(+), 35 deletions(-)

--- a/arch/arm/mach-omap2/omap-secure.c
+++ b/arch/arm/mach-omap2/omap-secure.c
@@ -73,6 +73,25 @@ phys_addr_t omap_secure_ram_mempool_base
 	return omap_secure_memblock_base;
 }
 
+u32 omap3_save_secure_ram(void __iomem *addr, int size)
+{
+	u32 ret;
+	u32 param[5];
+
+	if (size != OMAP3_SAVE_SECURE_RAM_SZ)
+		return OMAP3_SAVE_SECURE_RAM_SZ;
+
+	param[0] = 4;		/* Number of arguments */
+	param[1] = __pa(addr);	/* Physical address for saving */
+	param[2] = 0;
+	param[3] = 1;
+	param[4] = 1;
+
+	ret = save_secure_ram_context(__pa(param));
+
+	return ret;
+}
+
 /**
  * rx51_secure_dispatcher: Routine to dispatch secure PPA API calls
  * @idx: The PPA API index
--- a/arch/arm/mach-omap2/omap-secure.h
+++ b/arch/arm/mach-omap2/omap-secure.h
@@ -31,6 +31,8 @@
 /* Maximum Secure memory storage size */
 #define OMAP_SECURE_RAM_STORAGE	(88 * SZ_1K)
 
+#define OMAP3_SAVE_SECURE_RAM_SZ	0x803F
+
 /* Secure low power HAL API index */
 #define OMAP4_HAL_SAVESECURERAM_INDEX	0x1a
 #define OMAP4_HAL_SAVEHW_INDEX		0x1b
@@ -64,6 +66,8 @@ extern u32 omap_smc2(u32 id, u32 falg, u
 extern u32 omap_smc3(u32 id, u32 process, u32 flag, u32 pargs);
 extern phys_addr_t omap_secure_ram_mempool_base(void);
 extern int omap_secure_ram_reserve_memblock(void);
+extern u32 save_secure_ram_context(u32 args_pa);
+extern u32 omap3_save_secure_ram(void __iomem *save_regs, int size);
 
 extern u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs,
 				  u32 arg1, u32 arg2, u32 arg3, u32 arg4);
--- a/arch/arm/mach-omap2/pm.h
+++ b/arch/arm/mach-omap2/pm.h
@@ -81,10 +81,6 @@ extern unsigned int omap3_do_wfi_sz;
 /* ... and its pointer from SRAM after copy */
 extern void (*omap3_do_wfi_sram)(void);
 
-/* save_secure_ram_context function pointer and size, for copy to SRAM */
-extern int save_secure_ram_context(u32 *addr);
-extern unsigned int save_secure_ram_context_sz;
-
 extern void omap3_save_scratchpad_contents(void);
 
 #define PM_RTA_ERRATUM_i608		(1 << 0)
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -48,6 +48,7 @@
 #include "prm3xxx.h"
 #include "pm.h"
 #include "sdrc.h"
+#include "omap-secure.h"
 #include "sram.h"
 #include "control.h"
 #include "vc.h"
@@ -66,7 +67,6 @@ struct power_state {
 
 static LIST_HEAD(pwrst_list);
 
-static int (*_omap_save_secure_sram)(u32 *addr);
 void (*omap3_do_wfi_sram)(void);
 
 static struct powerdomain *mpu_pwrdm, *neon_pwrdm;
@@ -121,8 +121,8 @@ static void omap3_save_secure_ram_contex
 		 * will hang the system.
 		 */
 		pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_ON);
-		ret = _omap_save_secure_sram((u32 *)(unsigned long)
-				__pa(omap3_secure_ram_storage));
+		ret = omap3_save_secure_ram(omap3_secure_ram_storage,
+					    OMAP3_SAVE_SECURE_RAM_SZ);
 		pwrdm_set_next_pwrst(mpu_pwrdm, mpu_next_state);
 		/* Following is for error tracking, it should not happen */
 		if (ret) {
@@ -431,15 +431,10 @@ static int __init pwrdms_setup(struct po
  *
  * The minimum set of functions is pushed to SRAM for execution:
  * - omap3_do_wfi for erratum i581 WA,
- * - save_secure_ram_context for security extensions.
  */
 void omap_push_sram_idle(void)
 {
 	omap3_do_wfi_sram = omap_sram_push(omap3_do_wfi, omap3_do_wfi_sz);
-
-	if (omap_type() != OMAP2_DEVICE_TYPE_GP)
-		_omap_save_secure_sram = omap_sram_push(save_secure_ram_context,
-				save_secure_ram_context_sz);
 }
 
 static void __init pm_errata_configure(void)
@@ -551,7 +546,7 @@ int __init omap3_pm_init(void)
 	clkdm_add_wkdep(neon_clkdm, mpu_clkdm);
 	if (omap_type() != OMAP2_DEVICE_TYPE_GP) {
 		omap3_secure_ram_storage =
-			kmalloc(0x803F, GFP_KERNEL);
+			kmalloc(OMAP3_SAVE_SECURE_RAM_SZ, GFP_KERNEL);
 		if (!omap3_secure_ram_storage)
 			pr_err("Memory allocation failed when allocating for secure sram context\n");
 
--- a/arch/arm/mach-omap2/sleep34xx.S
+++ b/arch/arm/mach-omap2/sleep34xx.S
@@ -93,20 +93,13 @@ ENTRY(enable_omap3630_toggle_l2_on_resto
 ENDPROC(enable_omap3630_toggle_l2_on_restore)
 
 /*
- * Function to call rom code to save secure ram context. This gets
- * relocated to SRAM, so it can be all in .data section. Otherwise
- * we need to initialize api_params separately.
+ * Function to call rom code to save secure ram context.
+ *
+ * r0 = physical address of the parameters
  */
-	.data
-	.align	3
 ENTRY(save_secure_ram_context)
 	stmfd	sp!, {r4 - r11, lr}	@ save registers on stack
-	adr	r3, api_params		@ r3 points to parameters
-	str	r0, [r3,#0x4]		@ r0 has sdram address
-	ldr	r12, high_mask
-	and	r3, r3, r12
-	ldr	r12, sram_phy_addr_mask
-	orr	r3, r3, r12
+	mov	r3, r0			@ physical address of parameters
 	mov	r0, #25			@ set service ID for PPA
 	mov	r12, r0			@ copy secure service ID in r12
 	mov	r1, #0			@ set task id for ROM code in r1
@@ -120,18 +113,7 @@ ENTRY(save_secure_ram_context)
 	nop
 	nop
 	ldmfd	sp!, {r4 - r11, pc}
-	.align
-sram_phy_addr_mask:
-	.word	SRAM_BASE_P
-high_mask:
-	.word	0xffff
-api_params:
-	.word	0x4, 0x0, 0x0, 0x1, 0x1
 ENDPROC(save_secure_ram_context)
-ENTRY(save_secure_ram_context_sz)
-	.word	. - save_secure_ram_context
-
-	.text
 
 /*
  * ======================

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 032/193] ARM: AM33xx: PRM: Remove am33xx_pwrdm_read_prev_pwrst function
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (30 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 031/193] ARM: OMAP2+: Fix SRAM virt to phys translation for save_secure_ram_context Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 033/193] ARM: dts: Fix omap4 hang with GPS connected to USB by using wakeupgen Greg Kroah-Hartman
                   ` (167 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Keerthy, Tony Lindgren, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Keerthy <j-keerthy@ti.com>


[ Upstream commit b6d6af7226465b6d11eac09d0be2ab78a4a9eb62 ]

Referring TRM Am335X series:
http://www.ti.com/lit/ug/spruh73p/spruh73p.pdf

The LastPowerStateEntered bitfield is present only for PM_CEFUSE
domain. This is not present in any of the other power domains. Hence
remove the generic am33xx_pwrdm_read_prev_pwrst hook which wrongly
reads the reserved bit fields for all the other power domains.

Reading the reserved bits leads to wrongly interpreting the low
power transitions for various power domains that do not have the
LastPowerStateEntered field. The pm debug counters values are wrong
currently as we are incrementing them based on the reserved bits.

Signed-off-by: Keerthy <j-keerthy@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/arm/mach-omap2/prm33xx.c |   12 ------------
 1 file changed, 12 deletions(-)

--- a/arch/arm/mach-omap2/prm33xx.c
+++ b/arch/arm/mach-omap2/prm33xx.c
@@ -176,17 +176,6 @@ static int am33xx_pwrdm_read_pwrst(struc
 	return v;
 }
 
-static int am33xx_pwrdm_read_prev_pwrst(struct powerdomain *pwrdm)
-{
-	u32 v;
-
-	v = am33xx_prm_read_reg(pwrdm->prcm_offs, pwrdm->pwrstst_offs);
-	v &= AM33XX_LASTPOWERSTATEENTERED_MASK;
-	v >>= AM33XX_LASTPOWERSTATEENTERED_SHIFT;
-
-	return v;
-}
-
 static int am33xx_pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm)
 {
 	am33xx_prm_rmw_reg_bits(AM33XX_LOWPOWERSTATECHANGE_MASK,
@@ -357,7 +346,6 @@ struct pwrdm_ops am33xx_pwrdm_operations
 	.pwrdm_set_next_pwrst		= am33xx_pwrdm_set_next_pwrst,
 	.pwrdm_read_next_pwrst		= am33xx_pwrdm_read_next_pwrst,
 	.pwrdm_read_pwrst		= am33xx_pwrdm_read_pwrst,
-	.pwrdm_read_prev_pwrst		= am33xx_pwrdm_read_prev_pwrst,
 	.pwrdm_set_logic_retst		= am33xx_pwrdm_set_logic_retst,
 	.pwrdm_read_logic_pwrst		= am33xx_pwrdm_read_logic_pwrst,
 	.pwrdm_read_logic_retst		= am33xx_pwrdm_read_logic_retst,

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 033/193] ARM: dts: Fix omap4 hang with GPS connected to USB by using wakeupgen
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (31 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 032/193] ARM: AM33xx: PRM: Remove am33xx_pwrdm_read_prev_pwrst function Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 034/193] ARM: dts: am4372: Correct the interrupts_properties of McASP Greg Kroah-Hartman
                   ` (166 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Dave Gerlach, Nishanth Menon,
	Marc Zyngier, Sebastian Reichel, Roger Quadros, Tony Lindgren,
	Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Tony Lindgren <tony@atomide.com>


[ Upstream commit cf87634c8b24e24bf379b8c6807c8b0fb5f23567 ]

There's been a reproducable USB OHCI/EHCI cpuidle related hang on omap4
for a while that happens after about 20 - 40 minutes on an idle system
with some data feeding device being connected, like a USB GPS device or
a cellular modem.

This issue happens in cpuidle states C2 and C3 and does not happen if
cpuidle is limited to C1 state only. The symptoms are that the whole
system hangs and never wakes up from idle, and if a watchdog is
configured the system reboots after a while.

Turns out that OHCI/EHCI devices on omap4 are trying to use the GIC
interrupt controller directly as a parent instead of the WUGEN. We
need to pass the interrupts through WUGEN to GIC to provide the wakeup
events for the processor.

Let's fix the issue by removing the gic interrupt-parent and use the
default interrupt-parent wakeupgen instead. Note that omap5.dtsi had
this already fixes earlier by commit 7136d457f365 ("ARM: omap: convert
wakeupgen to stacked domains") but we somehow missed omap4 at that
point.

Fixes: 7136d457f365 ("ARM: omap: convert wakeupgen to stacked domains")
Cc: Dave Gerlach <d-gerlach@ti.com>
Cc: Nishanth Menon <nm@ti.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
Reviewed-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/arm/boot/dts/omap4.dtsi |    2 --
 1 file changed, 2 deletions(-)

--- a/arch/arm/boot/dts/omap4.dtsi
+++ b/arch/arm/boot/dts/omap4.dtsi
@@ -844,14 +844,12 @@
 			usbhsohci: ohci@4a064800 {
 				compatible = "ti,ohci-omap3";
 				reg = <0x4a064800 0x400>;
-				interrupt-parent = <&gic>;
 				interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
 			};
 
 			usbhsehci: ehci@4a064c00 {
 				compatible = "ti,ehci-omap";
 				reg = <0x4a064c00 0x400>;
-				interrupt-parent = <&gic>;
 				interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
 			};
 		};

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 034/193] ARM: dts: am4372: Correct the interrupts_properties of McASP
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (32 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 033/193] ARM: dts: Fix omap4 hang with GPS connected to USB by using wakeupgen Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 035/193] perf top: Fix window dimensions change handling Greg Kroah-Hartman
                   ` (165 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Peter Ujfalusi, Tony Lindgren, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Peter Ujfalusi <peter.ujfalusi@ti.com>


[ Upstream commit 627395a6f8091c0aa18f49dca7df59ba3ec147ef ]

Fixes the following warnings:

arch/arm/boot/dts/am437x-cm-t43.dtb: Warning (interrupts_property):
interrupts size is (8), expected multiple of 12 in
/ocp@44000000/mcasp@48038000

arch/arm/boot/dts/am437x-cm-t43.dtb: Warning (interrupts_property):
interrupts size is (8), expected multiple of 12 in
/ocp@44000000/mcasp@4803C000

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/arm/boot/dts/am4372.dtsi |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

--- a/arch/arm/boot/dts/am4372.dtsi
+++ b/arch/arm/boot/dts/am4372.dtsi
@@ -807,7 +807,8 @@
 			reg = <0x48038000 0x2000>,
 			      <0x46000000 0x400000>;
 			reg-names = "mpu", "dat";
-			interrupts = <80>, <81>;
+			interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>;
 			interrupt-names = "tx", "rx";
 			status = "disabled";
 			dmas = <&edma 8>,
@@ -821,7 +822,8 @@
 			reg = <0x4803C000 0x2000>,
 			      <0x46400000 0x400000>;
 			reg-names = "mpu", "dat";
-			interrupts = <82>, <83>;
+			interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
 			interrupt-names = "tx", "rx";
 			status = "disabled";
 			dmas = <&edma 10>,

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 035/193] perf top: Fix window dimensions change handling
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (33 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 034/193] ARM: dts: am4372: Correct the interrupts_properties of McASP Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 036/193] perf bench numa: Fixup discontiguous/sparse numa nodes Greg Kroah-Hartman
                   ` (164 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Jiri Olsa, Arnaldo Carvalho de Melo,
	Ravi Bangoria, Adrian Hunter, Andi Kleen, David Ahern,
	Namhyung Kim, Wang Nan, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Jiri Olsa <jolsa@kernel.org>


[ Upstream commit 89d0aeab4252adc2a7ea693637dd21c588bfa2d1 ]

The stdio perf top crashes when we change the terminal
window size. The reason is that we assumed we get the
perf_top pointer as a signal handler argument which is
not the case.

Changing the SIGWINCH handler logic to change global
resize variable, which is checked in the main thread
loop.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Tested-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/n/tip-ysuzwz77oev1ftgvdscn9bpu@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 tools/perf/builtin-top.c |   15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -70,6 +70,7 @@
 #include <linux/types.h>
 
 static volatile int done;
+static volatile int resize;
 
 #define HEADER_LINE_NR  5
 
@@ -79,10 +80,13 @@ static void perf_top__update_print_entri
 }
 
 static void perf_top__sig_winch(int sig __maybe_unused,
-				siginfo_t *info __maybe_unused, void *arg)
+				siginfo_t *info __maybe_unused, void *arg __maybe_unused)
 {
-	struct perf_top *top = arg;
+	resize = 1;
+}
 
+static void perf_top__resize(struct perf_top *top)
+{
 	get_term_dimensions(&top->winsize);
 	perf_top__update_print_entries(top);
 }
@@ -466,7 +470,7 @@ static bool perf_top__handle_keypress(st
 					.sa_sigaction = perf_top__sig_winch,
 					.sa_flags     = SA_SIGINFO,
 				};
-				perf_top__sig_winch(SIGWINCH, NULL, top);
+				perf_top__resize(top);
 				sigaction(SIGWINCH, &act, NULL);
 			} else {
 				signal(SIGWINCH, SIG_DFL);
@@ -1023,6 +1027,11 @@ static int __cmd_top(struct perf_top *to
 
 		if (hits == top->samples)
 			ret = perf_evlist__poll(top->evlist, 100);
+
+		if (resize) {
+			perf_top__resize(top);
+			resize = 0;
+		}
 	}
 
 	ret = 0;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 036/193] perf bench numa: Fixup discontiguous/sparse numa nodes
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (34 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 035/193] perf top: Fix window dimensions change handling Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 037/193] media: s5k6aa: describe some function parameters Greg Kroah-Hartman
                   ` (163 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Satheesh Rajendran,
	Srikar Dronamraju, Naveen N. Rao, Balamuruhan S,
	Arnaldo Carvalho de Melo, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Satheesh Rajendran <sathnaga@linux.vnet.ibm.com>


[ Upstream commit 321a7c35c90cc834851ceda18a8ee18f1d032b92 ]

Certain systems are designed to have sparse/discontiguous nodes.  On
such systems, 'perf bench numa' hangs, shows wrong number of nodes and
shows values for non-existent nodes. Handle this by only taking nodes
that are exposed by kernel to userspace.

Signed-off-by: Satheesh Rajendran <sathnaga@linux.vnet.ibm.com>
Reviewed-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Acked-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Link: http://lkml.kernel.org/r/1edbcd353c009e109e93d78f2f46381930c340fe.1511368645.git.sathnaga@linux.vnet.ibm.com
Signed-off-by: Balamuruhan S <bala24@linux.vnet.ibm.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 tools/perf/bench/numa.c |   56 +++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 51 insertions(+), 5 deletions(-)

--- a/tools/perf/bench/numa.c
+++ b/tools/perf/bench/numa.c
@@ -208,6 +208,47 @@ static const char * const numa_usage[] =
 	NULL
 };
 
+/*
+ * To get number of numa nodes present.
+ */
+static int nr_numa_nodes(void)
+{
+	int i, nr_nodes = 0;
+
+	for (i = 0; i < g->p.nr_nodes; i++) {
+		if (numa_bitmask_isbitset(numa_nodes_ptr, i))
+			nr_nodes++;
+	}
+
+	return nr_nodes;
+}
+
+/*
+ * To check if given numa node is present.
+ */
+static int is_node_present(int node)
+{
+	return numa_bitmask_isbitset(numa_nodes_ptr, node);
+}
+
+/*
+ * To check given numa node has cpus.
+ */
+static bool node_has_cpus(int node)
+{
+	struct bitmask *cpu = numa_allocate_cpumask();
+	unsigned int i;
+
+	if (cpu && !numa_node_to_cpus(node, cpu)) {
+		for (i = 0; i < cpu->size; i++) {
+			if (numa_bitmask_isbitset(cpu, i))
+				return true;
+		}
+	}
+
+	return false; /* lets fall back to nocpus safely */
+}
+
 static cpu_set_t bind_to_cpu(int target_cpu)
 {
 	cpu_set_t orig_mask, mask;
@@ -236,12 +277,12 @@ static cpu_set_t bind_to_cpu(int target_
 
 static cpu_set_t bind_to_node(int target_node)
 {
-	int cpus_per_node = g->p.nr_cpus/g->p.nr_nodes;
+	int cpus_per_node = g->p.nr_cpus / nr_numa_nodes();
 	cpu_set_t orig_mask, mask;
 	int cpu;
 	int ret;
 
-	BUG_ON(cpus_per_node*g->p.nr_nodes != g->p.nr_cpus);
+	BUG_ON(cpus_per_node * nr_numa_nodes() != g->p.nr_cpus);
 	BUG_ON(!cpus_per_node);
 
 	ret = sched_getaffinity(0, sizeof(orig_mask), &orig_mask);
@@ -641,7 +682,7 @@ static int parse_setup_node_list(void)
 			int i;
 
 			for (i = 0; i < mul; i++) {
-				if (t >= g->p.nr_tasks) {
+				if (t >= g->p.nr_tasks || !node_has_cpus(bind_node)) {
 					printf("\n# NOTE: ignoring bind NODEs starting at NODE#%d\n", bind_node);
 					goto out;
 				}
@@ -956,6 +997,8 @@ static void calc_convergence(double runt
 	sum = 0;
 
 	for (node = 0; node < g->p.nr_nodes; node++) {
+		if (!is_node_present(node))
+			continue;
 		nr = nodes[node];
 		nr_min = min(nr, nr_min);
 		nr_max = max(nr, nr_max);
@@ -976,8 +1019,11 @@ static void calc_convergence(double runt
 	process_groups = 0;
 
 	for (node = 0; node < g->p.nr_nodes; node++) {
-		int processes = count_node_processes(node);
+		int processes;
 
+		if (!is_node_present(node))
+			continue;
+		processes = count_node_processes(node);
 		nr = nodes[node];
 		tprintf(" %2d/%-2d", nr, processes);
 
@@ -1283,7 +1329,7 @@ static void print_summary(void)
 
 	printf("\n ###\n");
 	printf(" # %d %s will execute (on %d nodes, %d CPUs):\n",
-		g->p.nr_tasks, g->p.nr_tasks == 1 ? "task" : "tasks", g->p.nr_nodes, g->p.nr_cpus);
+		g->p.nr_tasks, g->p.nr_tasks == 1 ? "task" : "tasks", nr_numa_nodes(), g->p.nr_cpus);
 	printf(" #      %5dx %5ldMB global  shared mem operations\n",
 			g->p.nr_loops, g->p.bytes_global/1024/1024);
 	printf(" #      %5dx %5ldMB process shared mem operations\n",

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 037/193] media: s5k6aa: describe some function parameters
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (35 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 036/193] perf bench numa: Fixup discontiguous/sparse numa nodes Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 038/193] pinctrl: sunxi: Fix A80 interrupt pin bank Greg Kroah-Hartman
                   ` (162 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Mauro Carvalho Chehab, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Mauro Carvalho Chehab <mchehab@s-opensource.com>


[ Upstream commit 070250a1715cee2297de0d9e7e2cea58be999d37 ]

as warned:
  drivers/media/i2c/s5k6aa.c:429: warning: No description found for parameter 's5k6aa'
  drivers/media/i2c/s5k6aa.c:679: warning: No description found for parameter 's5k6aa'
  drivers/media/i2c/s5k6aa.c:733: warning: No description found for parameter 's5k6aa'
  drivers/media/i2c/s5k6aa.c:733: warning: No description found for parameter 'preset'
  drivers/media/i2c/s5k6aa.c:787: warning: No description found for parameter 'sd'

Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/media/i2c/s5k6aa.c |    5 +++++
 1 file changed, 5 insertions(+)

--- a/drivers/media/i2c/s5k6aa.c
+++ b/drivers/media/i2c/s5k6aa.c
@@ -421,6 +421,7 @@ static int s5k6aa_set_ahb_address(struct
 
 /**
  * s5k6aa_configure_pixel_clock - apply ISP main clock/PLL configuration
+ * @s5k6aa: pointer to &struct s5k6aa describing the device
  *
  * Configure the internal ISP PLL for the required output frequency.
  * Locking: called with s5k6aa.lock mutex held.
@@ -669,6 +670,7 @@ static int s5k6aa_set_input_params(struc
 
 /**
  * s5k6aa_configure_video_bus - configure the video output interface
+ * @s5k6aa: pointer to &struct s5k6aa describing the device
  * @bus_type: video bus type: parallel or MIPI-CSI
  * @nlanes: number of MIPI lanes to be used (MIPI-CSI only)
  *
@@ -724,6 +726,8 @@ static int s5k6aa_new_config_sync(struct
 
 /**
  * s5k6aa_set_prev_config - write user preview register set
+ * @s5k6aa: pointer to &struct s5k6aa describing the device
+ * @preset: s5kaa preset to be applied
  *
  * Configure output resolution and color fromat, pixel clock
  * frequency range, device frame rate type and frame period range.
@@ -777,6 +781,7 @@ static int s5k6aa_set_prev_config(struct
 
 /**
  * s5k6aa_initialize_isp - basic ISP MCU initialization
+ * @sd: pointer to V4L2 sub-device descriptor
  *
  * Configure AHB addresses for registers read/write; configure PLLs for
  * required output pixel clock. The ISP power supply needs to be already

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 038/193] pinctrl: sunxi: Fix A80 interrupt pin bank
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (36 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 037/193] media: s5k6aa: describe some function parameters Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 039/193] RDMA/cma: Make sure that PSN is not over max allowed Greg Kroah-Hartman
                   ` (161 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Andre Przywara, Chen-Yu Tsai,
	Linus Walleij, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Andre Przywara <andre.przywara@arm.com>


[ Upstream commit 6ad4cc8d1ac483e0fd33f605fb2788b0ecf51ed4 ]

On the A80 the pins on port B can trigger interrupts, and those are
assigned to the second interrupt bank.
Having two pins assigned to the same interrupt bank/pin combination does
not look healthy (instead more like a copy&paste bug from pins PA14-PA16),
so fix the interrupt bank for pins PB14-PB16, which is actually 1.

I don't have any A80 board, so could not test this.

Fixes: d5e9fb31baa2 ("pinctrl: sunxi: Add A80 pinctrl muxing options")
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Acked-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

--- a/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c
+++ b/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c
@@ -145,19 +145,19 @@ static const struct sunxi_desc_pin sun9i
 		  SUNXI_FUNCTION(0x0, "gpio_in"),
 		  SUNXI_FUNCTION(0x1, "gpio_out"),
 		  SUNXI_FUNCTION(0x3, "mcsi"),		/* MCLK */
-		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 14)),	/* PB_EINT14 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 14)),	/* PB_EINT14 */
 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 15),
 		  SUNXI_FUNCTION(0x0, "gpio_in"),
 		  SUNXI_FUNCTION(0x1, "gpio_out"),
 		  SUNXI_FUNCTION(0x3, "mcsi"),		/* SCK */
 		  SUNXI_FUNCTION(0x4, "i2c4"),		/* SCK */
-		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 15)),	/* PB_EINT15 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 15)),	/* PB_EINT15 */
 	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 16),
 		  SUNXI_FUNCTION(0x0, "gpio_in"),
 		  SUNXI_FUNCTION(0x1, "gpio_out"),
 		  SUNXI_FUNCTION(0x3, "mcsi"),		/* SDA */
 		  SUNXI_FUNCTION(0x4, "i2c4"),		/* SDA */
-		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 16)),	/* PB_EINT16 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 16)),	/* PB_EINT16 */
 
 	/* Hole */
 	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0),

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 039/193] RDMA/cma: Make sure that PSN is not over max allowed
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (37 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 038/193] pinctrl: sunxi: Fix A80 interrupt pin bank Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 040/193] scripts/kernel-doc: Dont fail with status != 0 if error encountered with -none Greg Kroah-Hartman
                   ` (160 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Moni Shoua, Mukesh Kacker,
	Daniel Jurgens, Parav Pandit, Leon Romanovsky, Jason Gunthorpe,
	Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Moni Shoua <monis@mellanox.com>


[ Upstream commit 23a9cd2ad90543e9da3786878d2b2729c095439d ]

This patch limits the initial value for PSN to 24 bits as
spec requires.

Signed-off-by: Moni Shoua <monis@mellanox.com>
Signed-off-by: Mukesh Kacker <mukesh.kacker@oracle.com>
Signed-off-by: Daniel Jurgens <danielj@mellanox.com>
Reviewed-by: Parav Pandit <parav@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/infiniband/core/cma.c |    1 +
 1 file changed, 1 insertion(+)

--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -626,6 +626,7 @@ struct rdma_cm_id *rdma_create_id(struct
 	INIT_LIST_HEAD(&id_priv->mc_list);
 	get_random_bytes(&id_priv->seq_num, sizeof id_priv->seq_num);
 	id_priv->id.route.addr.dev_addr.net = get_net(net);
+	id_priv->seq_num &= 0x00ffffff;
 
 	return &id_priv->id;
 }

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 040/193] scripts/kernel-doc: Dont fail with status != 0 if error encountered with -none
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (38 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 039/193] RDMA/cma: Make sure that PSN is not over max allowed Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 041/193] ipvlan: Add the skb->mark as flow4s member to lookup route Greg Kroah-Hartman
                   ` (159 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Matthew Wilcox, Jonathan Corbet,
	Will Deacon, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Will Deacon <will.deacon@arm.com>


[ Upstream commit e814bccbafece52a24e152d2395b5d49eef55841 ]

My bisect scripts starting running into build failures when trying to
compile 4.15-rc1 with the builds failing with things like:

drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c:2078: error: Cannot parse struct or union!

The line in question is actually just a #define, but after some digging
it turns out that my scripts pass W=1 and since commit 3a025e1d1c2ea
("Add optional check for bad kernel-doc comments") that results in
kernel-doc running on each source file. The file in question has a
badly formatted comment immediately before the #define:

/**
 * struct brcmf_skbuff_cb reserves first two bytes in sk_buff::cb for
 * bus layer usage.
 */

which causes the regex in dump_struct to fail (lack of braces following
struct declaration) and kernel-doc returns 1, which causes the build
to fail.

Fix the issue by always returning 0 from kernel-doc when invoked with
-none. It successfully generates no documentation, and prints out any
issues.

Cc: Matthew Wilcox <mawilcox@microsoft.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 scripts/kernel-doc |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -2742,4 +2742,4 @@ if ($verbose && $warnings) {
   print STDERR "$warnings warnings\n";
 }
 
-exit($errors);
+exit($output_mode eq "none" ? 0 : $errors);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 041/193] ipvlan: Add the skb->mark as flow4s member to lookup route
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (39 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 040/193] scripts/kernel-doc: Dont fail with status != 0 if error encountered with -none Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 042/193] m68k: add missing SOFTIRQENTRY_TEXT linker section Greg Kroah-Hartman
                   ` (158 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Gao Feng, David S. Miller, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Gao Feng <gfree.wind@vip.163.com>


[ Upstream commit a98a4ebc8c61d20f0150d6be66e0e65223a347af ]

Current codes don't use skb->mark to assign flowi4_mark, it would
make the policy route rule with fwmark doesn't work as expected.

Signed-off-by: Gao Feng <gfree.wind@vip.163.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/net/ipvlan/ipvlan_core.c |    1 +
 1 file changed, 1 insertion(+)

--- a/drivers/net/ipvlan/ipvlan_core.c
+++ b/drivers/net/ipvlan/ipvlan_core.c
@@ -353,6 +353,7 @@ static int ipvlan_process_v4_outbound(st
 		.flowi4_oif = dev->ifindex,
 		.flowi4_tos = RT_TOS(ip4h->tos),
 		.flowi4_flags = FLOWI_FLAG_ANYSRC,
+		.flowi4_mark = skb->mark,
 		.daddr = ip4h->daddr,
 		.saddr = ip4h->saddr,
 	};

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 042/193] m68k: add missing SOFTIRQENTRY_TEXT linker section
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (40 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 041/193] ipvlan: Add the skb->mark as flow4s member to lookup route Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 043/193] powerpc/perf: Fix oops when grouping different pmu events Greg Kroah-Hartman
                   ` (157 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Greg Ungerer, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Greg Ungerer <gerg@linux-m68k.org>


[ Upstream commit 969de0988b77e5a57aac2f7270191a3c50540c52 ]

Commit be7635e7287e ("arch, ftrace: for KASAN put hard/soft IRQ entries
into separate sections") added a new linker section, SOFTIRQENTRY_TEXT,
to the linker scripts for most architectures. It didn't add it to any of
the linker scripts for the m68k architecture. This was not really a problem
because it is only defined if either of CONFIG_FUNCTION_GRAPH_TRACER or
CONFIG_KASAN are enabled - which can never be true for m68k.

However commit 229a71860547 ("irq: Make the irqentry text section
unconditional") means that SOFTIRQENTRY_TEXT is now always defined. So on
m68k we now end up with a separate ELF section for .softirqentry.text
instead of it being part of the .text section. On some m68k targets in some
configurations this can also cause a fatal link error:

  LD      vmlinux
/usr/local/bin/../m68k-uclinux/bin/ld.real: section .softirqentry.text loaded at [0000000010de10c0,0000000010de12dd] overlaps section .rodata loaded at [0000000010de10c0,0000000010e0fd67]

To fix add in the missing SOFTIRQENTRY_TEXT section into the m68k linker
scripts. I noticed that m68k is also missing the IRQENTRY_TEXT section,
so this patch also adds an entry for that too.

Signed-off-by: Greg Ungerer <gerg@linux-m68k.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/m68k/kernel/vmlinux-nommu.lds |    2 ++
 arch/m68k/kernel/vmlinux-std.lds   |    2 ++
 arch/m68k/kernel/vmlinux-sun3.lds  |    2 ++
 3 files changed, 6 insertions(+)

--- a/arch/m68k/kernel/vmlinux-nommu.lds
+++ b/arch/m68k/kernel/vmlinux-nommu.lds
@@ -44,6 +44,8 @@ SECTIONS {
 	.text : {
 		HEAD_TEXT
 		TEXT_TEXT
+		IRQENTRY_TEXT
+		SOFTIRQENTRY_TEXT
 		SCHED_TEXT
 		LOCK_TEXT
 		*(.fixup)
--- a/arch/m68k/kernel/vmlinux-std.lds
+++ b/arch/m68k/kernel/vmlinux-std.lds
@@ -15,6 +15,8 @@ SECTIONS
   .text : {
 	HEAD_TEXT
 	TEXT_TEXT
+	IRQENTRY_TEXT
+	SOFTIRQENTRY_TEXT
 	SCHED_TEXT
 	LOCK_TEXT
 	*(.fixup)
--- a/arch/m68k/kernel/vmlinux-sun3.lds
+++ b/arch/m68k/kernel/vmlinux-sun3.lds
@@ -15,6 +15,8 @@ SECTIONS
   .text : {
 	HEAD_TEXT
 	TEXT_TEXT
+	IRQENTRY_TEXT
+	SOFTIRQENTRY_TEXT
 	SCHED_TEXT
 	LOCK_TEXT
 	*(.fixup)

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 043/193] powerpc/perf: Fix oops when grouping different pmu events
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (41 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 042/193] m68k: add missing SOFTIRQENTRY_TEXT linker section Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 044/193] s390/dasd: prevent prefix I/O error Greg Kroah-Hartman
                   ` (156 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Ravi Bangoria, Madhavan Srinivasan,
	Michael Ellerman, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>


[ Upstream commit 5aa04b3eb6fca63d2e9827be656dcadc26d54e11 ]

When user tries to group imc (In-Memory Collections) event with
normal event, (sometime) kernel crashes with following log:

    Faulting instruction address: 0x00000000
    [link register   ] c00000000010ce88 power_check_constraints+0x128/0x980
    ...
    c00000000010e238 power_pmu_event_init+0x268/0x6f0
    c0000000002dc60c perf_try_init_event+0xdc/0x1a0
    c0000000002dce88 perf_event_alloc+0x7b8/0xac0
    c0000000002e92e0 SyS_perf_event_open+0x530/0xda0
    c00000000000b004 system_call+0x38/0xe0

'event_base' field of 'struct hw_perf_event' is used as flags for
normal hw events and used as memory address for imc events. While
grouping these two types of events, collect_events() tries to
interpret imc 'event_base' as a flag, which causes a corruption
resulting in a crash.

Consider only those events which belongs to 'perf_hw_context' in
collect_events().

Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
Reviewed-By: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/powerpc/perf/core-book3s.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/arch/powerpc/perf/core-book3s.c
+++ b/arch/powerpc/perf/core-book3s.c
@@ -1381,7 +1381,7 @@ static int collect_events(struct perf_ev
 	int n = 0;
 	struct perf_event *event;
 
-	if (!is_software_event(group)) {
+	if (group->pmu->task_ctx_nr == perf_hw_context) {
 		if (n >= max_count)
 			return -1;
 		ctrs[n] = group;
@@ -1389,7 +1389,7 @@ static int collect_events(struct perf_ev
 		events[n++] = group->hw.config;
 	}
 	list_for_each_entry(event, &group->sibling_list, group_entry) {
-		if (!is_software_event(event) &&
+		if (event->pmu->task_ctx_nr == perf_hw_context &&
 		    event->state != PERF_EVENT_STATE_OFF) {
 			if (n >= max_count)
 				return -1;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 044/193] s390/dasd: prevent prefix I/O error
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (42 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 043/193] powerpc/perf: Fix oops when grouping different pmu events Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 045/193] gianfar: fix a flooded alignment reports because of padding issue Greg Kroah-Hartman
                   ` (155 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Stefan Haberland, Jan Hoeppner,
	Martin Schwidefsky, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Stefan Haberland <sth@linux.vnet.ibm.com>


[ Upstream commit da340f921d3454f1521671c7a5a43ad3331fbe50 ]

Prevent that a prefix flag is set based on invalid configuration data.
The validity.verify_base flag should only be set for alias devices.
Usually the unit address type is either one of base, PAV alias or
HyperPAV alias. But in cases where the unit address type is not set or
any other value the validity.verify_base flag might be set as well.
This would lead to follow on errors.
Explicitly check for alias devices and set the validity flag only for
them.

Signed-off-by: Stefan Haberland <sth@linux.vnet.ibm.com>
Reviewed-by: Jan Hoeppner <hoeppner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/s390/block/dasd_eckd.c |   16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

--- a/drivers/s390/block/dasd_eckd.c
+++ b/drivers/s390/block/dasd_eckd.c
@@ -518,10 +518,12 @@ static int prefix_LRE(struct ccw1 *ccw,
 	pfxdata->validity.define_extent = 1;
 
 	/* private uid is kept up to date, conf_data may be outdated */
-	if (startpriv->uid.type != UA_BASE_DEVICE) {
+	if (startpriv->uid.type == UA_BASE_PAV_ALIAS)
 		pfxdata->validity.verify_base = 1;
-		if (startpriv->uid.type == UA_HYPER_PAV_ALIAS)
-			pfxdata->validity.hyper_pav = 1;
+
+	if (startpriv->uid.type == UA_HYPER_PAV_ALIAS) {
+		pfxdata->validity.verify_base = 1;
+		pfxdata->validity.hyper_pav = 1;
 	}
 
 	/* define extend data (mostly)*/
@@ -3002,10 +3004,12 @@ static int prepare_itcw(struct itcw *itc
 	pfxdata.validity.define_extent = 1;
 
 	/* private uid is kept up to date, conf_data may be outdated */
-	if (startpriv->uid.type != UA_BASE_DEVICE) {
+	if (startpriv->uid.type == UA_BASE_PAV_ALIAS)
+		pfxdata.validity.verify_base = 1;
+
+	if (startpriv->uid.type == UA_HYPER_PAV_ALIAS) {
 		pfxdata.validity.verify_base = 1;
-		if (startpriv->uid.type == UA_HYPER_PAV_ALIAS)
-			pfxdata.validity.hyper_pav = 1;
+		pfxdata.validity.hyper_pav = 1;
 	}
 
 	switch (cmd) {

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 045/193] gianfar: fix a flooded alignment reports because of padding issue.
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (43 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 044/193] s390/dasd: prevent prefix I/O error Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 046/193] net_sched: red: Avoid devision by zero Greg Kroah-Hartman
                   ` (154 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Zumeng Chen, David S. Miller, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Zumeng Chen <zumeng.chen@gmail.com>


[ Upstream commit 58117672943734715bbe7565ac9f062effa524f0 ]

According to LS1021A RM, the value of PAL can be set so that the start of the
IP header in the receive data buffer is aligned to a 32-bit boundary. Normally,
setting PAL = 2 provides minimal padding to ensure such alignment of the IP
header.

However every incoming packet's 8-byte time stamp will be inserted into the
packet data buffer as padding alignment bytes when hardware time stamping is
enabled.

So we set the padding 8+2 here to avoid the flooded alignment faults:

root@128:~# cat /proc/cpu/alignment
User:           0
System:         17539 (inet_gro_receive+0x114/0x2c0)
Skipped:        0
Half:           0
Word:           0
DWord:          0
Multi:          17539
User faults:    2 (fixup)

Also shown when exception report enablement

CPU: 0 PID: 161 Comm: irq/66-eth1_g0_ Not tainted 4.1.21-rt13-WR8.0.0.0_preempt-rt #16
Hardware name: Freescale LS1021A
[<8001b420>] (unwind_backtrace) from [<8001476c>] (show_stack+0x20/0x24)
[<8001476c>] (show_stack) from [<807cfb48>] (dump_stack+0x94/0xac)
[<807cfb48>] (dump_stack) from [<80025d70>] (do_alignment+0x720/0x958)
[<80025d70>] (do_alignment) from [<80009224>] (do_DataAbort+0x40/0xbc)
[<80009224>] (do_DataAbort) from [<80015398>] (__dabt_svc+0x38/0x60)
Exception stack(0x86ad1cc0 to 0x86ad1d08)
1cc0: f9b3e080 86b3d072 2d78d287 00000000 866816c0 86b3d05e 86e785d0 00000000
1ce0: 00000011 0000000e 80840ab0 86ad1d3c 86ad1d08 86ad1d08 806d7fc0 806d806c
1d00: 40070013 ffffffff
[<80015398>] (__dabt_svc) from [<806d806c>] (inet_gro_receive+0x114/0x2c0)
[<806d806c>] (inet_gro_receive) from [<80660eec>] (dev_gro_receive+0x21c/0x3c0)
[<80660eec>] (dev_gro_receive) from [<8066133c>] (napi_gro_receive+0x44/0x17c)
[<8066133c>] (napi_gro_receive) from [<804f0538>] (gfar_clean_rx_ring+0x39c/0x7d4)
[<804f0538>] (gfar_clean_rx_ring) from [<804f0bf4>] (gfar_poll_rx_sq+0x58/0xe0)
[<804f0bf4>] (gfar_poll_rx_sq) from [<80660b10>] (net_rx_action+0x27c/0x43c)
[<80660b10>] (net_rx_action) from [<80033638>] (do_current_softirqs+0x1e0/0x3dc)
[<80033638>] (do_current_softirqs) from [<800338c4>] (__local_bh_enable+0x90/0xa8)
[<800338c4>] (__local_bh_enable) from [<8008025c>] (irq_forced_thread_fn+0x70/0x84)
[<8008025c>] (irq_forced_thread_fn) from [<800805e8>] (irq_thread+0x16c/0x244)
[<800805e8>] (irq_thread) from [<8004e490>] (kthread+0xe8/0x104)
[<8004e490>] (kthread) from [<8000fda8>] (ret_from_fork+0x14/0x2c)

Signed-off-by: Zumeng Chen <zumeng.chen@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/net/ethernet/freescale/gianfar.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c
@@ -1375,9 +1375,11 @@ static int gfar_probe(struct platform_de
 
 	gfar_init_addr_hash_table(priv);
 
-	/* Insert receive time stamps into padding alignment bytes */
+	/* Insert receive time stamps into padding alignment bytes, and
+	 * plus 2 bytes padding to ensure the cpu alignment.
+	 */
 	if (priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER)
-		priv->padding = 8;
+		priv->padding = 8 + DEFAULT_PADDING;
 
 	if (dev->features & NETIF_F_IP_CSUM ||
 	    priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER)

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 046/193] net_sched: red: Avoid devision by zero
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (44 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 045/193] gianfar: fix a flooded alignment reports because of padding issue Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 047/193] net_sched: red: Avoid illegal values Greg Kroah-Hartman
                   ` (153 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Nogah Frankel, David S. Miller, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Nogah Frankel <nogahf@mellanox.com>


[ Upstream commit 5c472203421ab4f928aa1ae9e1dbcfdd80324148 ]

Do not allow delta value to be zero since it is used as a divisor.

Fixes: 8af2a218de38 ("sch_red: Adaptative RED AQM")
Signed-off-by: Nogah Frankel <nogahf@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 include/net/red.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/include/net/red.h
+++ b/include/net/red.h
@@ -178,7 +178,7 @@ static inline void red_set_parms(struct
 	p->qth_max	= qth_max << Wlog;
 	p->Wlog		= Wlog;
 	p->Plog		= Plog;
-	if (delta < 0)
+	if (delta <= 0)
 		delta = 1;
 	p->qth_delta	= delta;
 	if (!max_P) {

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 047/193] net_sched: red: Avoid illegal values
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (45 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 046/193] net_sched: red: Avoid devision by zero Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 048/193] btrfs: Fix possible off-by-one in btrfs_search_path_in_tree Greg Kroah-Hartman
                   ` (152 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Nogah Frankel, David S. Miller, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Nogah Frankel <nogahf@mellanox.com>


[ Upstream commit 8afa10cbe281b10371fee5a87ab266e48d71a7f9 ]

Check the qmin & qmax values doesn't overflow for the given Wlog value.
Check that qmin <= qmax.

Fixes: a783474591f2 ("[PKT_SCHED]: Generic RED layer")
Signed-off-by: Nogah Frankel <nogahf@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 include/net/red.h     |   11 +++++++++++
 net/sched/sch_choke.c |    3 +++
 net/sched/sch_gred.c  |    3 +++
 net/sched/sch_red.c   |    2 ++
 net/sched/sch_sfq.c   |    3 +++
 5 files changed, 22 insertions(+)

--- a/include/net/red.h
+++ b/include/net/red.h
@@ -167,6 +167,17 @@ static inline void red_set_vars(struct r
 	v->qcount	= -1;
 }
 
+static inline bool red_check_params(u32 qth_min, u32 qth_max, u8 Wlog)
+{
+	if (fls(qth_min) + Wlog > 32)
+		return false;
+	if (fls(qth_max) + Wlog > 32)
+		return false;
+	if (qth_max < qth_min)
+		return false;
+	return true;
+}
+
 static inline void red_set_parms(struct red_parms *p,
 				 u32 qth_min, u32 qth_max, u8 Wlog, u8 Plog,
 				 u8 Scell_log, u8 *stab, u32 max_P)
--- a/net/sched/sch_choke.c
+++ b/net/sched/sch_choke.c
@@ -438,6 +438,9 @@ static int choke_change(struct Qdisc *sc
 
 	ctl = nla_data(tb[TCA_CHOKE_PARMS]);
 
+	if (!red_check_params(ctl->qth_min, ctl->qth_max, ctl->Wlog))
+		return -EINVAL;
+
 	if (ctl->limit > CHOKE_MAX_QUEUE)
 		return -EINVAL;
 
--- a/net/sched/sch_gred.c
+++ b/net/sched/sch_gred.c
@@ -389,6 +389,9 @@ static inline int gred_change_vq(struct
 	struct gred_sched *table = qdisc_priv(sch);
 	struct gred_sched_data *q = table->tab[dp];
 
+	if (!red_check_params(ctl->qth_min, ctl->qth_max, ctl->Wlog))
+		return -EINVAL;
+
 	if (!q) {
 		table->tab[dp] = q = *prealloc;
 		*prealloc = NULL;
--- a/net/sched/sch_red.c
+++ b/net/sched/sch_red.c
@@ -199,6 +199,8 @@ static int red_change(struct Qdisc *sch,
 	max_P = tb[TCA_RED_MAX_P] ? nla_get_u32(tb[TCA_RED_MAX_P]) : 0;
 
 	ctl = nla_data(tb[TCA_RED_PARMS]);
+	if (!red_check_params(ctl->qth_min, ctl->qth_max, ctl->Wlog))
+		return -EINVAL;
 
 	if (ctl->limit > 0) {
 		child = fifo_create_dflt(sch, &bfifo_qdisc_ops, ctl->limit);
--- a/net/sched/sch_sfq.c
+++ b/net/sched/sch_sfq.c
@@ -633,6 +633,9 @@ static int sfq_change(struct Qdisc *sch,
 	if (ctl->divisor &&
 	    (!is_power_of_2(ctl->divisor) || ctl->divisor > 65536))
 		return -EINVAL;
+	if (ctl_v1 && !red_check_params(ctl_v1->qth_min, ctl_v1->qth_max,
+					ctl_v1->Wlog))
+		return -EINVAL;
 	if (ctl_v1 && ctl_v1->qth_min) {
 		p = kmalloc(sizeof(*p), GFP_KERNEL);
 		if (!p)

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 048/193] btrfs: Fix possible off-by-one in btrfs_search_path_in_tree
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (46 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 047/193] net_sched: red: Avoid illegal values Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 049/193] 509: fix printing uninitialized stack memory when OID is empty Greg Kroah-Hartman
                   ` (151 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Nikolay Borisov, David Sterba, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Nikolay Borisov <nborisov@suse.com>


[ Upstream commit c8bcbfbd239ed60a6562964b58034ac8a25f4c31 ]

The name char array passed to btrfs_search_path_in_tree is of size
BTRFS_INO_LOOKUP_PATH_MAX (4080). So the actual accessible char indexes
are in the range of [0, 4079]. Currently the code uses the define but this
represents an off-by-one.

Implications:

Size of btrfs_ioctl_ino_lookup_args is 4096, so the new byte will be
written to extra space, not some padding that could be provided by the
allocator.

btrfs-progs store the arguments on stack, but kernel does own copy of
the ioctl buffer and the off-by-one overwrite does not affect userspace,
but the ending 0 might be lost.

Kernel ioctl buffer is allocated dynamically so we're overwriting
somebody else's memory, and the ioctl is privileged if args.objectid is
not 256. Which is in most cases, but resolving a subvolume stored in
another directory will trigger that path.

Before this patch the buffer was one byte larger, but then the -1 was
not added.

Fixes: ac8e9819d71f907 ("Btrfs: add search and inode lookup ioctls")
Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
[ added implications ]
Signed-off-by: David Sterba <dsterba@suse.com>

Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/btrfs/ioctl.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -2231,7 +2231,7 @@ static noinline int btrfs_search_path_in
 	if (!path)
 		return -ENOMEM;
 
-	ptr = &name[BTRFS_INO_LOOKUP_PATH_MAX];
+	ptr = &name[BTRFS_INO_LOOKUP_PATH_MAX - 1];
 
 	key.objectid = tree_id;
 	key.type = BTRFS_ROOT_ITEM_KEY;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 049/193] 509: fix printing uninitialized stack memory when OID is empty
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (47 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 048/193] btrfs: Fix possible off-by-one in btrfs_search_path_in_tree Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 050/193] dmaengine: ioat: Fix error handling path Greg Kroah-Hartman
                   ` (150 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Eric Biggers, David Howells, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Eric Biggers <ebiggers3@gmail.com>


[ Upstream commit 8dfd2f22d3bf3ab7714f7495ad5d897b8845e8c1 ]

Callers of sprint_oid() do not check its return value before printing
the result.  In the case where the OID is zero-length, -EBADMSG was
being returned without anything being written to the buffer, resulting
in uninitialized stack memory being printed.  Fix this by writing
"(bad)" to the buffer in the cases where -EBADMSG is returned.

Fixes: 4f73175d0375 ("X.509: Add utility functions to render OIDs as strings")
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 lib/oid_registry.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

--- a/lib/oid_registry.c
+++ b/lib/oid_registry.c
@@ -116,7 +116,7 @@ int sprint_oid(const void *data, size_t
 	int count;
 
 	if (v >= end)
-		return -EBADMSG;
+		goto bad;
 
 	n = *v++;
 	ret = count = snprintf(buffer, bufsize, "%u.%u", n / 40, n % 40);
@@ -134,7 +134,7 @@ int sprint_oid(const void *data, size_t
 			num = n & 0x7f;
 			do {
 				if (v >= end)
-					return -EBADMSG;
+					goto bad;
 				n = *v++;
 				num <<= 7;
 				num |= n & 0x7f;
@@ -148,6 +148,10 @@ int sprint_oid(const void *data, size_t
 	}
 
 	return ret;
+
+bad:
+	snprintf(buffer, bufsize, "(bad)");
+	return -EBADMSG;
 }
 EXPORT_SYMBOL_GPL(sprint_oid);
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 050/193] dmaengine: ioat: Fix error handling path
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (48 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 049/193] 509: fix printing uninitialized stack memory when OID is empty Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 051/193] dmaengine: at_hdmac: fix potential NULL pointer dereference in atc_prep_dma_interleaved Greg Kroah-Hartman
                   ` (149 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Christophe JAILLET, Dave Jiang,
	Vinod Koul, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>


[ Upstream commit 5c9afbda911ce20b3f2181d1e440a0222e1027dd ]

If the last test in 'ioat_dma_self_test()' fails, we must release all
the allocated resources and not just part of them.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Acked-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/dma/ioat/init.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/dma/ioat/init.c
+++ b/drivers/dma/ioat/init.c
@@ -395,7 +395,7 @@ static int ioat_dma_self_test(struct ioa
 	if (memcmp(src, dest, IOAT_TEST_SIZE)) {
 		dev_err(dev, "Self-test copy failed compare, disabling\n");
 		err = -ENODEV;
-		goto free_resources;
+		goto unmap_dma;
 	}
 
 unmap_dma:

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 051/193] dmaengine: at_hdmac: fix potential NULL pointer dereference in atc_prep_dma_interleaved
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (49 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 050/193] dmaengine: ioat: Fix error handling path Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 052/193] clk: fix a panic error caused by accessing NULL pointer Greg Kroah-Hartman
                   ` (148 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Gustavo A. R. Silva,
	Ludovic Desroches, Vinod Koul, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: "Gustavo A. R. Silva" <garsilva@embeddedor.com>


[ Upstream commit 62a277d43d47e74972de44d33bd3763e31992414 ]

_xt_ is being dereferenced before it is null checked, hence there is a
potential null pointer dereference.

Fix this by moving the pointer dereference after _xt_ has been null
checked.

This issue was detected with the help of Coccinelle.

Fixes: 4483320e241c ("dmaengine: Use Pointer xt after NULL check.")
Signed-off-by: Gustavo A. R. Silva <garsilva@embeddedor.com>
Acked-by: Ludovic Desroches <ludovic.desroches@microchip.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/dma/at_hdmac.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

--- a/drivers/dma/at_hdmac.c
+++ b/drivers/dma/at_hdmac.c
@@ -716,7 +716,7 @@ atc_prep_dma_interleaved(struct dma_chan
 			 unsigned long flags)
 {
 	struct at_dma_chan	*atchan = to_at_dma_chan(chan);
-	struct data_chunk	*first = xt->sgl;
+	struct data_chunk	*first;
 	struct at_desc		*desc = NULL;
 	size_t			xfer_count;
 	unsigned int		dwidth;
@@ -728,6 +728,8 @@ atc_prep_dma_interleaved(struct dma_chan
 	if (unlikely(!xt || xt->numf != 1 || !xt->frame_size))
 		return NULL;
 
+	first = xt->sgl;
+
 	dev_info(chan2dev(chan),
 		 "%s: src=%pad, dest=%pad, numf=%d, frame_size=%d, flags=0x%lx\n",
 		__func__, &xt->src_start, &xt->dst_start, xt->numf,

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 052/193] clk: fix a panic error caused by accessing NULL pointer
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (50 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 051/193] dmaengine: at_hdmac: fix potential NULL pointer dereference in atc_prep_dma_interleaved Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 053/193] ASoC: rockchip: disable clock on error Greg Kroah-Hartman
                   ` (147 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Cai Li, Chunyan Zhang, Stephen Boyd,
	Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Cai Li <cai.li@spreadtrum.com>


[ Upstream commit 975b820b6836b6b6c42fb84cd2e772e2b41bca67 ]

In some cases the clock parent would be set NULL when doing re-parent,
it will cause a NULL pointer accessing if clk_set trace event is
enabled.

This patch sets the parent as "none" if the input parameter is NULL.

Fixes: dfc202ead312 (clk: Add tracepoints for hardware operations)
Signed-off-by: Cai Li <cai.li@spreadtrum.com>
Signed-off-by: Chunyan Zhang <chunyan.zhang@spreadtrum.com>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 include/trace/events/clk.h |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/include/trace/events/clk.h
+++ b/include/trace/events/clk.h
@@ -134,12 +134,12 @@ DECLARE_EVENT_CLASS(clk_parent,
 
 	TP_STRUCT__entry(
 		__string(        name,           core->name                )
-		__string(        pname,          parent->name              )
+		__string(        pname, parent ? parent->name : "none"     )
 	),
 
 	TP_fast_assign(
 		__assign_str(name, core->name);
-		__assign_str(pname, parent->name);
+		__assign_str(pname, parent ? parent->name : "none");
 	),
 
 	TP_printk("%s %s", __get_str(name), __get_str(pname))

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 053/193] ASoC: rockchip: disable clock on error
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (51 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 052/193] clk: fix a panic error caused by accessing NULL pointer Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 054/193] spi: sun4i: disable clocks in the remove function Greg Kroah-Hartman
                   ` (146 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Stefan Potyra, Mark Brown, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Stefan Potyra <Stefan.Potyra@elektrobit.com>


[ Upstream commit c7b92172a61b91936be985cb9bc499a4ebc6489b ]

Disable the clocks in  rk_spdif_probe when an error occurs after one
of the clocks has been enabled previously.

Found by Linux Driver Verification project (linuxtesting.org).

Fixes: f874b80e1571 ASoC: rockchip: Add rockchip SPDIF transceiver driver
Signed-off-by: Stefan Potyra <Stefan.Potyra@elektrobit.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/soc/rockchip/rockchip_spdif.c |   18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

--- a/sound/soc/rockchip/rockchip_spdif.c
+++ b/sound/soc/rockchip/rockchip_spdif.c
@@ -316,26 +316,30 @@ static int rk_spdif_probe(struct platfor
 	spdif->mclk = devm_clk_get(&pdev->dev, "mclk");
 	if (IS_ERR(spdif->mclk)) {
 		dev_err(&pdev->dev, "Can't retrieve rk_spdif master clock\n");
-		return PTR_ERR(spdif->mclk);
+		ret = PTR_ERR(spdif->mclk);
+		goto err_disable_hclk;
 	}
 
 	ret = clk_prepare_enable(spdif->mclk);
 	if (ret) {
 		dev_err(spdif->dev, "clock enable failed %d\n", ret);
-		return ret;
+		goto err_disable_clocks;
 	}
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	regs = devm_ioremap_resource(&pdev->dev, res);
-	if (IS_ERR(regs))
-		return PTR_ERR(regs);
+	if (IS_ERR(regs)) {
+		ret = PTR_ERR(regs);
+		goto err_disable_clocks;
+	}
 
 	spdif->regmap = devm_regmap_init_mmio_clk(&pdev->dev, "hclk", regs,
 						  &rk_spdif_regmap_config);
 	if (IS_ERR(spdif->regmap)) {
 		dev_err(&pdev->dev,
 			"Failed to initialise managed register map\n");
-		return PTR_ERR(spdif->regmap);
+		ret = PTR_ERR(spdif->regmap);
+		goto err_disable_clocks;
 	}
 
 	spdif->playback_dma_data.addr = res->start + SPDIF_SMPDR;
@@ -367,6 +371,10 @@ static int rk_spdif_probe(struct platfor
 
 err_pm_runtime:
 	pm_runtime_disable(&pdev->dev);
+err_disable_clocks:
+	clk_disable_unprepare(spdif->mclk);
+err_disable_hclk:
+	clk_disable_unprepare(spdif->hclk);
 
 	return ret;
 }

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 054/193] spi: sun4i: disable clocks in the remove function
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (52 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 053/193] ASoC: rockchip: disable clock on error Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 055/193] xfrm: Fix stack-out-of-bounds with misconfigured transport mode policies Greg Kroah-Hartman
                   ` (145 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Takuo Koguchi, Maxime Ripard,
	Mark Brown, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Takuo Koguchi <takuo.koguchi@gmail.com>


[ Upstream commit c810daba0ab5226084a56893a789af427a801146 ]

mclk and hclk need to be disabled. Since pm_runtime_disable does
not disable the clocks, use pm_runtime_force_suspend instead.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Takuo Koguchi <takuo.koguchi.sw@hitachi.com>
Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/spi/spi-sun4i.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/spi/spi-sun4i.c
+++ b/drivers/spi/spi-sun4i.c
@@ -458,7 +458,7 @@ err_free_master:
 
 static int sun4i_spi_remove(struct platform_device *pdev)
 {
-	pm_runtime_disable(&pdev->dev);
+	pm_runtime_force_suspend(&pdev->dev);
 
 	return 0;
 }

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 055/193] xfrm: Fix stack-out-of-bounds with misconfigured transport mode policies.
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (53 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 054/193] spi: sun4i: disable clocks in the remove function Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 056/193] drm/armada: fix leak of crtc structure Greg Kroah-Hartman
                   ` (144 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Steffen Klassert, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Steffen Klassert <steffen.klassert@secunet.com>


[ Upstream commit 732706afe1cc46ef48493b3d2b69c98f36314ae4 ]

On policies with a transport mode template, we pass the addresses
from the flowi to xfrm_state_find(), assuming that the IP addresses
(and address family) don't change during transformation.

Unfortunately our policy template validation is not strict enough.
It is possible to configure policies with transport mode template
where the address family of the template does not match the selectors
address family. This lead to stack-out-of-bound reads because
we compare arddesses of the wrong family. Fix this by refusing
such a configuration, address family can not change on transport
mode.

We use the assumption that, on transport mode, the first templates
address family must match the address family of the policy selector.
Subsequent transport mode templates must mach the address family of
the previous template.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 net/xfrm/xfrm_user.c |    9 +++++++++
 1 file changed, 9 insertions(+)

--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -1376,11 +1376,14 @@ static void copy_templates(struct xfrm_p
 
 static int validate_tmpl(int nr, struct xfrm_user_tmpl *ut, u16 family)
 {
+	u16 prev_family;
 	int i;
 
 	if (nr > XFRM_MAX_DEPTH)
 		return -EINVAL;
 
+	prev_family = family;
+
 	for (i = 0; i < nr; i++) {
 		/* We never validated the ut->family value, so many
 		 * applications simply leave it at zero.  The check was
@@ -1392,6 +1395,12 @@ static int validate_tmpl(int nr, struct
 		if (!ut[i].family)
 			ut[i].family = family;
 
+		if ((ut[i].mode == XFRM_MODE_TRANSPORT) &&
+		    (ut[i].family != prev_family))
+			return -EINVAL;
+
+		prev_family = ut[i].family;
+
 		switch (ut[i].family) {
 		case AF_INET:
 			break;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 056/193] drm/armada: fix leak of crtc structure
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (54 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 055/193] xfrm: Fix stack-out-of-bounds with misconfigured transport mode policies Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 057/193] dmaengine: jz4740: disable/unprepare clk if probe fails Greg Kroah-Hartman
                   ` (143 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Russell King, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Russell King <rmk+kernel@armlinux.org.uk>


[ Upstream commit 33cd3c07a976e11c3c4cc6b0b3db6760ad1590c5 ]

Fix the leak of the CRTC structure in the failure paths of
armada_drm_crtc_create().

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/gpu/drm/armada/armada_crtc.c |   25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

--- a/drivers/gpu/drm/armada/armada_crtc.c
+++ b/drivers/gpu/drm/armada/armada_crtc.c
@@ -1182,17 +1182,13 @@ static int armada_drm_crtc_create(struct
 
 	ret = devm_request_irq(dev, irq, armada_drm_irq, 0, "armada_drm_crtc",
 			       dcrtc);
-	if (ret < 0) {
-		kfree(dcrtc);
-		return ret;
-	}
+	if (ret < 0)
+		goto err_crtc;
 
 	if (dcrtc->variant->init) {
 		ret = dcrtc->variant->init(dcrtc, dev);
-		if (ret) {
-			kfree(dcrtc);
-			return ret;
-		}
+		if (ret)
+			goto err_crtc;
 	}
 
 	/* Ensure AXI pipeline is enabled */
@@ -1203,13 +1199,15 @@ static int armada_drm_crtc_create(struct
 	dcrtc->crtc.port = port;
 
 	primary = kzalloc(sizeof(*primary), GFP_KERNEL);
-	if (!primary)
-		return -ENOMEM;
+	if (!primary) {
+		ret = -ENOMEM;
+		goto err_crtc;
+	}
 
 	ret = armada_drm_plane_init(primary);
 	if (ret) {
 		kfree(primary);
-		return ret;
+		goto err_crtc;
 	}
 
 	ret = drm_universal_plane_init(drm, &primary->base, 0,
@@ -1219,7 +1217,7 @@ static int armada_drm_crtc_create(struct
 				       DRM_PLANE_TYPE_PRIMARY);
 	if (ret) {
 		kfree(primary);
-		return ret;
+		goto err_crtc;
 	}
 
 	ret = drm_crtc_init_with_planes(drm, &dcrtc->crtc, &primary->base, NULL,
@@ -1238,6 +1236,9 @@ static int armada_drm_crtc_create(struct
 
 err_crtc_init:
 	primary->base.funcs->destroy(&primary->base);
+err_crtc:
+	kfree(dcrtc);
+
 	return ret;
 }
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 057/193] dmaengine: jz4740: disable/unprepare clk if probe fails
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (55 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 056/193] drm/armada: fix leak of crtc structure Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 058/193] mm/early_ioremap: Fix boot hang with earlyprintk=efi,keep Greg Kroah-Hartman
                   ` (142 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Tobias Jordan, Vinod Koul, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Tobias Jordan <Tobias.Jordan@elektrobit.com>


[ Upstream commit eb9436966fdc84cebdf222952a99898ab46d9bb0 ]

in error path of jz4740_dma_probe(), call clk_disable_unprepare() to clean
up.

Found by Linux Driver Verification project (linuxtesting.org).

Fixes: 25ce6c35fea0 MIPS: jz4740: Remove custom DMA API
Signed-off-by: Tobias Jordan <Tobias.Jordan@elektrobit.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/dma/dma-jz4740.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

--- a/drivers/dma/dma-jz4740.c
+++ b/drivers/dma/dma-jz4740.c
@@ -557,7 +557,7 @@ static int jz4740_dma_probe(struct platf
 
 	ret = dma_async_device_register(dd);
 	if (ret)
-		return ret;
+		goto err_clk;
 
 	irq = platform_get_irq(pdev, 0);
 	ret = request_irq(irq, jz4740_dma_irq, 0, dev_name(&pdev->dev), dmadev);
@@ -570,6 +570,8 @@ static int jz4740_dma_probe(struct platf
 
 err_unregister:
 	dma_async_device_unregister(dd);
+err_clk:
+	clk_disable_unprepare(dmadev->clk);
 	return ret;
 }
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 058/193] mm/early_ioremap: Fix boot hang with earlyprintk=efi,keep
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (56 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 057/193] dmaengine: jz4740: disable/unprepare clk if probe fails Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 059/193] x86/mm/kmmio: Fix mmiotrace for page unaligned addresses Greg Kroah-Hartman
                   ` (141 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Dave Young, Thomas Gleixner,
	Linus Torvalds, Peter Zijlstra, bp, linux-efi, linux-mm,
	Ingo Molnar, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Dave Young <dyoung@redhat.com>


[ Upstream commit 7f6f60a1ba52538c16f26930bfbcfe193d9d746a ]

earlyprintk=efi,keep does not work any more with a warning
in mm/early_ioremap.c: WARN_ON(system_state != SYSTEM_BOOTING):
Boot just hangs because of the earlyprintk within the earlyprintk
implementation code itself.

This is caused by a new introduced middle state in:

  69a78ff226fe ("init: Introduce SYSTEM_SCHEDULING state")

early_ioremap() is fine in both SYSTEM_BOOTING and SYSTEM_SCHEDULING
states, original condition should be updated accordingly.

Signed-off-by: Dave Young <dyoung@redhat.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: bp@suse.de
Cc: linux-efi@vger.kernel.org
Cc: linux-mm@kvack.org
Link: http://lkml.kernel.org/r/20171209041610.GA3249@dhcp-128-65.nay.redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 mm/early_ioremap.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/mm/early_ioremap.c
+++ b/mm/early_ioremap.c
@@ -103,7 +103,7 @@ __early_ioremap(resource_size_t phys_add
 	enum fixed_addresses idx;
 	int i, slot;
 
-	WARN_ON(system_state != SYSTEM_BOOTING);
+	WARN_ON(system_state >= SYSTEM_RUNNING);
 
 	slot = -1;
 	for (i = 0; i < FIX_BTMAPS_SLOTS; i++) {

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 059/193] x86/mm/kmmio: Fix mmiotrace for page unaligned addresses
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (57 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 058/193] mm/early_ioremap: Fix boot hang with earlyprintk=efi,keep Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 060/193] xen: XEN_ACPI_PROCESSOR is Dom0-only Greg Kroah-Hartman
                   ` (140 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Lyude, Karol Herbst, Pekka Paalanen,
	Linus Torvalds, Peter Zijlstra, Steven Rostedt, Thomas Gleixner,
	nouveau, Ingo Molnar, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Karol Herbst <kherbst@redhat.com>


[ Upstream commit 6d60ce384d1d5ca32b595244db4077a419acc687 ]

If something calls ioremap() with an address not aligned to PAGE_SIZE, the
returned address might be not aligned as well. This led to a probe
registered on exactly the returned address, but the entire page was armed
for mmiotracing.

On calling iounmap() the address passed to unregister_kmmio_probe() was
PAGE_SIZE aligned by the caller leading to a complete freeze of the
machine.

We should always page align addresses while (un)registerung mappings,
because the mmiotracer works on top of pages, not mappings. We still keep
track of the probes based on their real addresses and lengths though,
because the mmiotrace still needs to know what are mapped memory regions.

Also move the call to mmiotrace_iounmap() prior page aligning the address,
so that all probes are unregistered properly, otherwise the kernel ends up
failing memory allocations randomly after disabling the mmiotracer.

Tested-by: Lyude <lyude@redhat.com>
Signed-off-by: Karol Herbst <kherbst@redhat.com>
Acked-by: Pekka Paalanen <ppaalanen@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: nouveau@lists.freedesktop.org
Link: http://lkml.kernel.org/r/20171127075139.4928-1-kherbst@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/mm/ioremap.c |    4 ++--
 arch/x86/mm/kmmio.c   |   12 +++++++-----
 2 files changed, 9 insertions(+), 7 deletions(-)

--- a/arch/x86/mm/ioremap.c
+++ b/arch/x86/mm/ioremap.c
@@ -348,11 +348,11 @@ void iounmap(volatile void __iomem *addr
 	    (void __force *)addr < phys_to_virt(ISA_END_ADDRESS))
 		return;
 
+	mmiotrace_iounmap(addr);
+
 	addr = (volatile void __iomem *)
 		(PAGE_MASK & (unsigned long __force)addr);
 
-	mmiotrace_iounmap(addr);
-
 	/* Use the vm area unlocked, assuming the caller
 	   ensures there isn't another iounmap for the same address
 	   in parallel. Reuse of the virtual address is prevented by
--- a/arch/x86/mm/kmmio.c
+++ b/arch/x86/mm/kmmio.c
@@ -434,17 +434,18 @@ int register_kmmio_probe(struct kmmio_pr
 	unsigned long flags;
 	int ret = 0;
 	unsigned long size = 0;
+	unsigned long addr = p->addr & PAGE_MASK;
 	const unsigned long size_lim = p->len + (p->addr & ~PAGE_MASK);
 	unsigned int l;
 	pte_t *pte;
 
 	spin_lock_irqsave(&kmmio_lock, flags);
-	if (get_kmmio_probe(p->addr)) {
+	if (get_kmmio_probe(addr)) {
 		ret = -EEXIST;
 		goto out;
 	}
 
-	pte = lookup_address(p->addr, &l);
+	pte = lookup_address(addr, &l);
 	if (!pte) {
 		ret = -EINVAL;
 		goto out;
@@ -453,7 +454,7 @@ int register_kmmio_probe(struct kmmio_pr
 	kmmio_count++;
 	list_add_rcu(&p->list, &kmmio_probes);
 	while (size < size_lim) {
-		if (add_kmmio_fault_page(p->addr + size))
+		if (add_kmmio_fault_page(addr + size))
 			pr_err("Unable to set page fault.\n");
 		size += page_level_size(l);
 	}
@@ -527,19 +528,20 @@ void unregister_kmmio_probe(struct kmmio
 {
 	unsigned long flags;
 	unsigned long size = 0;
+	unsigned long addr = p->addr & PAGE_MASK;
 	const unsigned long size_lim = p->len + (p->addr & ~PAGE_MASK);
 	struct kmmio_fault_page *release_list = NULL;
 	struct kmmio_delayed_release *drelease;
 	unsigned int l;
 	pte_t *pte;
 
-	pte = lookup_address(p->addr, &l);
+	pte = lookup_address(addr, &l);
 	if (!pte)
 		return;
 
 	spin_lock_irqsave(&kmmio_lock, flags);
 	while (size < size_lim) {
-		release_kmmio_fault_page(p->addr + size, &release_list);
+		release_kmmio_fault_page(addr + size, &release_list);
 		size += page_level_size(l);
 	}
 	list_del_rcu(&p->list);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 060/193] xen: XEN_ACPI_PROCESSOR is Dom0-only
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (58 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 059/193] x86/mm/kmmio: Fix mmiotrace for page unaligned addresses Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 061/193] hippi: Fix a Fix a possible sleep-in-atomic bug in rr_close Greg Kroah-Hartman
                   ` (139 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Jan Beulich, Juergen Gross,
	Boris Ostrovsky, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Jan Beulich <JBeulich@suse.com>


[ Upstream commit c4f9d9cb2c29ff04c6b4bb09b72802d8aedfc7cb ]

Add a respective dependency.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/xen/Kconfig |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/xen/Kconfig
+++ b/drivers/xen/Kconfig
@@ -239,7 +239,7 @@ config XEN_ACPI_HOTPLUG_CPU
 
 config XEN_ACPI_PROCESSOR
 	tristate "Xen ACPI processor"
-	depends on XEN && X86 && ACPI_PROCESSOR && CPU_FREQ
+	depends on XEN && XEN_DOM0 && X86 && ACPI_PROCESSOR && CPU_FREQ
 	default m
 	help
           This ACPI processor uploads Power Management information to the Xen

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 061/193] hippi: Fix a Fix a possible sleep-in-atomic bug in rr_close
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (59 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 060/193] xen: XEN_ACPI_PROCESSOR is Dom0-only Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 062/193] virtio_balloon: prevent uninitialized variable use Greg Kroah-Hartman
                   ` (138 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Jia-Ju Bai, David S. Miller, Sasha Levin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Jia-Ju Bai <baijiaju1990@163.com>


[ Upstream commit 6e266610eb6553cfb7e7eb5d11914bd01509c406 ]

The driver may sleep under a spinlock.
The function call path is:
rr_close (acquire the spinlock)
  free_irq --> may sleep

To fix it, free_irq is moved to the place without holding the spinlock.

This bug is found by my static analysis tool(DSAC) and checked by my code review.

Signed-off-by: Jia-Ju Bai <baijiaju1990@163.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/net/hippi/rrunner.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/net/hippi/rrunner.c
+++ b/drivers/net/hippi/rrunner.c
@@ -1381,8 +1381,8 @@ static int rr_close(struct net_device *d
 			    rrpriv->info_dma);
 	rrpriv->info = NULL;
 
-	free_irq(pdev->irq, dev);
 	spin_unlock_irqrestore(&rrpriv->lock, flags);
+	free_irq(pdev->irq, dev);
 
 	return 0;
 }

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 062/193] virtio_balloon: prevent uninitialized variable use
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (60 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 061/193] hippi: Fix a Fix a possible sleep-in-atomic bug in rr_close Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 063/193] isdn: icn: remove a #warning Greg Kroah-Hartman
                   ` (137 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Ladi Prosek,
	Michael S. Tsirkin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit f0bb2d50dfcc519f06f901aac88502be6ff1df2c upstream.

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 <arnd@arndb.de>
Signed-off-by: Ladi Prosek <lprosek@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/virtio/virtio_balloon.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/virtio/virtio_balloon.c
+++ b/drivers/virtio/virtio_balloon.c
@@ -239,12 +239,14 @@ static void update_balloon_stats(struct
 	all_vm_events(events);
 	si_meminfo(&i);
 
+#ifdef CONFIG_VM_EVENT_COUNTERS
 	update_stat(vb, idx++, VIRTIO_BALLOON_S_SWAP_IN,
 				pages_to_bytes(events[PSWPIN]));
 	update_stat(vb, idx++, VIRTIO_BALLOON_S_SWAP_OUT,
 				pages_to_bytes(events[PSWPOUT]));
 	update_stat(vb, idx++, VIRTIO_BALLOON_S_MAJFLT, events[PGMAJFAULT]);
 	update_stat(vb, idx++, VIRTIO_BALLOON_S_MINFLT, events[PGFAULT]);
+#endif
 	update_stat(vb, idx++, VIRTIO_BALLOON_S_MEMFREE,
 				pages_to_bytes(i.freeram));
 	update_stat(vb, idx++, VIRTIO_BALLOON_S_MEMTOT,

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 063/193] isdn: icn: remove a #warning
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (61 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 062/193] virtio_balloon: prevent uninitialized variable use Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 064/193] vmxnet3: prevent building with 64K pages Greg Kroah-Hartman
                   ` (136 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 01ed1e1504ac83a8b0b365c9f55d3427babbd7d9 upstream.

The icn driver currently produces an unconditional #warning whenever
we build it, introduced by Karsten Keil back in 2003:

 #warning TODO test headroom or use skb->nb to flag ACK

Karsten's original commit (from BitKeeper) contains this description:

    - here are lot of bugs left, so ISDN is not stable yet but
      I think it's really time to fix it, even if it need some cycles
      to get it right (normally I'm only send patches if it works 100% for
      me).
    - I add some additional #warnings to address places which need fixing
      (I hope that some of the other ISDN developer jump in)

Apparently this has not happened, and it is unlikely that it ever will,
given that the driver doesn't seem to work. No substantial bug fixes
other than janitorial cleanups have happened in the driver since then,
and I see no indication that anyone who patched it had the hardware.

We should probably either remove the driver, or remove all of i4l,
but for now, this shuts up the distracting #warning by turning it
into a comment.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Link: http://git.meleeweb.net/linux.git/commit/?id=b0deac0886b0056765afd149e9834373b38e096b
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/isdn/icn/icn.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/isdn/icn/icn.c
+++ b/drivers/isdn/icn/icn.c
@@ -718,7 +718,7 @@ icn_sendbuf(int channel, int ack, struct
 			return 0;
 		if (card->sndcount[channel] > ICN_MAX_SQUEUE)
 			return 0;
-#warning TODO test headroom or use skb->nb to flag ACK
+		/* TODO test headroom or use skb->nb to flag ACK */
 		nskb = skb_clone(skb, GFP_ATOMIC);
 		if (nskb) {
 			/* Push ACK flag as one

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 064/193] vmxnet3: prevent building with 64K pages
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (62 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 063/193] isdn: icn: remove a #warning Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 065/193] gpio: intel-mid: Fix build warning when !CONFIG_PM Greg Kroah-Hartman
                   ` (135 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, David S. Miller

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit fbdf0e28d061708cf18ba0f8e0db5360dc9a15b9 upstream.

I got a warning about broken code on ARM64 with 64K pages:

drivers/net/vmxnet3/vmxnet3_drv.c: In function 'vmxnet3_rq_init':
drivers/net/vmxnet3/vmxnet3_drv.c:1679:29: error: large integer implicitly truncated to unsigned type [-Werror=overflow]
    rq->buf_info[0][i].len = PAGE_SIZE;

'len' here is a 16-bit integer, so this clearly won't work. I don't think
this driver is used much on anything other than x86, so there is no need
to fix this properly and we can work around it with a Kconfig dependency
to forbid known-broken configurations. qemu in theory supports it on
other architectures too, but presumably only for compatibility with x86
guests that also run on vmware.

CONFIG_PAGE_SIZE_64KB is used on hexagon, mips, sh and tile, the other
symbols are architecture-specific names for the same thing.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/net/Kconfig |    3 +++
 1 file changed, 3 insertions(+)

--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -411,6 +411,9 @@ config XEN_NETDEV_BACKEND
 config VMXNET3
 	tristate "VMware VMXNET3 ethernet driver"
 	depends on PCI && INET
+	depends on !(PAGE_SIZE_64KB || ARM64_64K_PAGES || \
+		     IA64_PAGE_SIZE_64KB || MICROBLAZE_64K_PAGES || \
+		     PARISC_PAGE_SIZE_64KB || PPC_64K_PAGES)
 	help
 	  This driver supports VMware's vmxnet3 virtual ethernet NIC.
 	  To compile this driver as a module, choose M here: the

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 065/193] gpio: intel-mid: Fix build warning when !CONFIG_PM
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (63 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 064/193] vmxnet3: prevent building with 64K pages Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:24 ` [PATCH 4.4 066/193] platform/x86: intel_mid_thermal: Fix suspend handlers unused warning Greg Kroah-Hartman
                   ` (134 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Augusto Mecking Caringi,
	Andy Shevchenko, Linus Walleij

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Augusto Mecking Caringi <augustocaringi@gmail.com>

commit fbc2a294f29e726787a0f5238b27137904f26b81 upstream.

The only usage of function intel_gpio_runtime_idle() is here (in the
same file):

static const struct dev_pm_ops intel_gpio_pm_ops = {
	SET_RUNTIME_PM_OPS(NULL, NULL, intel_gpio_runtime_idle)
};

And when CONFIG_PM is not set, the macro SET_RUNTIME_PM_OPS expands to
nothing, causing the following compiler warning:

drivers/gpio/gpio-intel-mid.c:324:12: warning: ‘intel_gpio_runtime_idle’
defined but not used [-Wunused-function]
static int intel_gpio_runtime_idle(struct device *dev)

Fix it by annotating the function with __maybe_unused.

Signed-off-by: Augusto Mecking Caringi <augustocaringi@gmail.com>
Acked-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpio/gpio-intel-mid.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/gpio/gpio-intel-mid.c
+++ b/drivers/gpio/gpio-intel-mid.c
@@ -326,7 +326,7 @@ static void intel_mid_irq_init_hw(struct
 	}
 }
 
-static int intel_gpio_runtime_idle(struct device *dev)
+static int __maybe_unused intel_gpio_runtime_idle(struct device *dev)
 {
 	int err = pm_schedule_suspend(dev, 500);
 	return err ?: -EBUSY;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 066/193] platform/x86: intel_mid_thermal: Fix suspend handlers unused warning
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (64 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 065/193] gpio: intel-mid: Fix build warning when !CONFIG_PM Greg Kroah-Hartman
@ 2018-02-23 18:24 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 067/193] video: fbdev: via: remove possibly unused variables Greg Kroah-Hartman
                   ` (133 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:24 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Borislav Petkov, Darren Hart,
	platform-driver-x86, Andy Shevchenko, Andy Shevchenko

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Borislav Petkov <bp@suse.de>

commit b4aca383f9afb5f84b05de272656e6d4a919d995 upstream.

Fix:

  drivers/platform/x86/intel_mid_thermal.c:424:12: warning: ‘mid_thermal_resume’
  defined but not used [-Wunused-function]
   static int mid_thermal_resume(struct device *dev)
              ^
  drivers/platform/x86/intel_mid_thermal.c:436:12: warning: ‘mid_thermal_suspend’
  defined but not used [-Wunused-function]
   static int mid_thermal_suspend(struct device *dev)
              ^

which I see during randbuilds here.

Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Darren Hart <dvhart@infradead.org>
Cc: platform-driver-x86@vger.kernel.org
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/platform/x86/intel_mid_thermal.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/platform/x86/intel_mid_thermal.c
+++ b/drivers/platform/x86/intel_mid_thermal.c
@@ -415,6 +415,7 @@ static struct thermal_device_info *initi
 	return td_info;
 }
 
+#ifdef CONFIG_PM_SLEEP
 /**
  * mid_thermal_resume - resume routine
  * @dev: device structure
@@ -442,6 +443,7 @@ static int mid_thermal_suspend(struct de
 	 */
 	return configure_adc(0);
 }
+#endif
 
 static SIMPLE_DEV_PM_OPS(mid_thermal_pm,
 			 mid_thermal_suspend, mid_thermal_resume);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 067/193] video: fbdev: via: remove possibly unused variables
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (65 preceding siblings ...)
  2018-02-23 18:24 ` [PATCH 4.4 066/193] platform/x86: intel_mid_thermal: Fix suspend handlers unused warning Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 068/193] scsi: advansys: fix build warning for PCI=n Greg Kroah-Hartman
                   ` (132 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann,
	Florian Tobias Schandinat, Bartlomiej Zolnierkiewicz

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 484c7bbf2649831714da3a0fa30213977458e9b5 upstream.

When CONFIG_PROC_FS is disabled, we get warnings about unused variables
as remove_proc_entry() evaluates to an empty macro.

drivers/video/fbdev/via/viafbdev.c: In function 'viafb_remove_proc':
drivers/video/fbdev/via/viafbdev.c:1635:4: error: unused variable 'iga2_entry' [-Werror=unused-variable]
drivers/video/fbdev/via/viafbdev.c:1634:4: error: unused variable 'iga1_entry' [-Werror=unused-variable]

These are easy to avoid by using the pointer from the structure.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/video/fbdev/via/viafbdev.c |    8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

--- a/drivers/video/fbdev/via/viafbdev.c
+++ b/drivers/video/fbdev/via/viafbdev.c
@@ -1630,16 +1630,14 @@ static void viafb_init_proc(struct viafb
 }
 static void viafb_remove_proc(struct viafb_shared *shared)
 {
-	struct proc_dir_entry *viafb_entry = shared->proc_entry,
-		*iga1_entry = shared->iga1_proc_entry,
-		*iga2_entry = shared->iga2_proc_entry;
+	struct proc_dir_entry *viafb_entry = shared->proc_entry;
 
 	if (!viafb_entry)
 		return;
 
-	remove_proc_entry("output_devices", iga2_entry);
+	remove_proc_entry("output_devices", shared->iga2_proc_entry);
 	remove_proc_entry("iga2", viafb_entry);
-	remove_proc_entry("output_devices", iga1_entry);
+	remove_proc_entry("output_devices", shared->iga1_proc_entry);
 	remove_proc_entry("iga1", viafb_entry);
 	remove_proc_entry("supported_output_devices", viafb_entry);
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 068/193] scsi: advansys: fix build warning for PCI=n
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (66 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 067/193] video: fbdev: via: remove possibly unused variables Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 069/193] x86/ras/inject: Make it depend on X86_LOCAL_APIC=y Greg Kroah-Hartman
                   ` (131 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Hannes Reinecke,
	Martin K. Petersen

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit f46e7cd36b5f2ce2bfb567e278a10ca717f85b84 upstream.

The advansys probe function tries to handle both ISA and PCI cases, each
hidden in an #ifdef when unused. This leads to a warning indicating that
when PCI is disabled we could be using uninitialized data:

drivers/scsi/advansys.c: In function  advansys_board_found :
drivers/scsi/advansys.c:11036:5: error:  ret  may be used uninitialized in this function [-Werror=maybe-uninitialized]
drivers/scsi/advansys.c:10928:28: note:  ret  was declared here
drivers/scsi/advansys.c:11309:8: error:  share_irq  may be used uninitialized in this function [-Werror=maybe-uninitialized]
drivers/scsi/advansys.c:10928:6: note:  share_irq  was declared here

This cannot happen in practice because the hardware in question only
exists for PCI, but changing the code to just error out here is better
for consistency and avoids the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/scsi/advansys.c |    3 +++
 1 file changed, 3 insertions(+)

--- a/drivers/scsi/advansys.c
+++ b/drivers/scsi/advansys.c
@@ -11030,6 +11030,9 @@ static int advansys_board_found(struct S
 		ASC_DBG(2, "AdvInitGetConfig()\n");
 
 		ret = AdvInitGetConfig(pdev, shost) ? -ENODEV : 0;
+#else
+		share_irq = 0;
+		ret = -ENODEV;
 #endif /* CONFIG_PCI */
 	}
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 069/193] x86/ras/inject: Make it depend on X86_LOCAL_APIC=y
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (67 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 068/193] scsi: advansys: fix build warning for PCI=n Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 070/193] arm64: define BUG() instruction without CONFIG_BUG Greg Kroah-Hartman
                   ` (130 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Borislav Petkov, Linus Torvalds,
	Peter Zijlstra, Thomas Gleixner, Tony Luck, Yazen Ghannam,
	linux-edac, Ingo Molnar

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Borislav Petkov <bp@suse.de>

commit d4b2ac63b0eae461fc10c9791084be24724ef57a upstream.

... and get rid of the annoying:

  arch/x86/kernel/cpu/mcheck/mce-inject.c:97:13: warning: ‘mce_irq_ipi’ defined but not used [-Wunused-function]

when doing randconfig builds.

Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Yazen Ghannam <Yazen.Ghannam@amd.com>
Cc: linux-edac <linux-edac@vger.kernel.org>
Link: http://lkml.kernel.org/r/20170123183514.13356-2-bp@alien8.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/x86/Kconfig                        |    2 +-
 arch/x86/kernel/cpu/mcheck/mce-inject.c |    5 +----
 2 files changed, 2 insertions(+), 5 deletions(-)

--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1009,7 +1009,7 @@ config X86_MCE_THRESHOLD
 	def_bool y
 
 config X86_MCE_INJECT
-	depends on X86_MCE
+	depends on X86_MCE && X86_LOCAL_APIC
 	tristate "Machine check injector support"
 	---help---
 	  Provide support for injecting machine checks for testing purposes.
--- a/arch/x86/kernel/cpu/mcheck/mce-inject.c
+++ b/arch/x86/kernel/cpu/mcheck/mce-inject.c
@@ -152,7 +152,6 @@ static void raise_mce(struct mce *m)
 	if (context == MCJ_CTX_RANDOM)
 		return;
 
-#ifdef CONFIG_X86_LOCAL_APIC
 	if (m->inject_flags & (MCJ_IRQ_BROADCAST | MCJ_NMI_BROADCAST)) {
 		unsigned long start;
 		int cpu;
@@ -193,9 +192,7 @@ static void raise_mce(struct mce *m)
 		raise_local();
 		put_cpu();
 		put_online_cpus();
-	} else
-#endif
-	{
+	} else {
 		preempt_disable();
 		raise_local();
 		preempt_enable();

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 070/193] arm64: define BUG() instruction without CONFIG_BUG
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (68 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 069/193] x86/ras/inject: Make it depend on X86_LOCAL_APIC=y Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 071/193] x86/fpu/math-emu: Fix possible uninitialized variable use Greg Kroah-Hartman
                   ` (129 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Will Deacon, Arnd Bergmann, Catalin Marinas

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit f13d52cb3fad03c237572be2ee691e1fe2d1d7bb upstream.

This mirrors commit e9c38ceba8d9 ("ARM: 8455/1: define __BUG as
asm(BUG_INSTR) without CONFIG_BUG") to make the behavior of
arm64 consistent with arm and x86, and avoids lots of warnings in
randconfig builds, such as:

kernel/seccomp.c: In function '__seccomp_filter':
kernel/seccomp.c:666:1: error: no return statement in function returning non-void [-Werror=return-type]

Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/arm64/include/asm/bug.h |   35 ++++++++++++++++++++---------------
 1 file changed, 20 insertions(+), 15 deletions(-)

--- a/arch/arm64/include/asm/bug.h
+++ b/arch/arm64/include/asm/bug.h
@@ -20,9 +20,6 @@
 
 #include <asm/debug-monitors.h>
 
-#ifdef CONFIG_GENERIC_BUG
-#define HAVE_ARCH_BUG
-
 #ifdef CONFIG_DEBUG_BUGVERBOSE
 #define _BUGVERBOSE_LOCATION(file, line) __BUGVERBOSE_LOCATION(file, line)
 #define __BUGVERBOSE_LOCATION(file, line)				\
@@ -36,28 +33,36 @@
 #define _BUGVERBOSE_LOCATION(file, line)
 #endif
 
-#define _BUG_FLAGS(flags) __BUG_FLAGS(flags)
+#ifdef CONFIG_GENERIC_BUG
 
-#define __BUG_FLAGS(flags) asm volatile (		\
+#define __BUG_ENTRY(flags) 				\
 		".pushsection __bug_table,\"a\"\n\t"	\
 		".align 2\n\t"				\
 	"0:	.long 1f - 0b\n\t"			\
 _BUGVERBOSE_LOCATION(__FILE__, __LINE__)		\
 		".short " #flags "\n\t"			\
 		".popsection\n"				\
-							\
-	"1:	brk %[imm]"				\
-		:: [imm] "i" (BUG_BRK_IMM)		\
-)
-
-#define BUG() do {				\
-	_BUG_FLAGS(0);				\
-	unreachable();				\
+	"1:	"
+#else
+#define __BUG_ENTRY(flags) ""
+#endif
+
+#define __BUG_FLAGS(flags)				\
+	asm volatile (					\
+		__BUG_ENTRY(flags)			\
+		"brk %[imm]" :: [imm] "i" (BUG_BRK_IMM)	\
+	);
+
+
+#define BUG() do {					\
+	__BUG_FLAGS(0);					\
+	unreachable();					\
 } while (0)
 
-#define __WARN_TAINT(taint) _BUG_FLAGS(BUGFLAG_TAINT(taint))
+#define __WARN_TAINT(taint) 				\
+	__BUG_FLAGS(BUGFLAG_TAINT(taint))
 
-#endif /* ! CONFIG_GENERIC_BUG */
+#define HAVE_ARCH_BUG
 
 #include <asm-generic/bug.h>
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 071/193] x86/fpu/math-emu: Fix possible uninitialized variable use
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (69 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 070/193] arm64: define BUG() instruction without CONFIG_BUG Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 072/193] tools build: Add tools tree support for make -s Greg Kroah-Hartman
                   ` (128 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Bill Metzenthen,
	Linus Torvalds, Peter Zijlstra, Thomas Gleixner, Ingo Molnar

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 75e2f0a6b16141cb347f442033ec907380d4d66e upstream.

When building the kernel with "make EXTRA_CFLAGS=...", this overrides
the "PARANOID" preprocessor macro defined in arch/x86/math-emu/Makefile,
and we run into a build warning:

  arch/x86/math-emu/reg_compare.c: In function ‘compare_i_st_st’:
  arch/x86/math-emu/reg_compare.c:254:6: error: ‘f’ may be used uninitialized in this function [-Werror=maybe-uninitialized]

This fixes the implementation to work correctly even without the PARANOID
flag, and also fixes the Makefile to not use the EXTRA_CFLAGS variable
but instead use the ccflags-y variable in the Makefile that is meant
for this purpose.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Bill Metzenthen <billm@melbpc.org.au>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20170719125310.2487451-3-arnd@arndb.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/x86/math-emu/Makefile      |    4 ++--
 arch/x86/math-emu/reg_compare.c |   16 ++++++++--------
 2 files changed, 10 insertions(+), 10 deletions(-)

--- a/arch/x86/math-emu/Makefile
+++ b/arch/x86/math-emu/Makefile
@@ -5,8 +5,8 @@
 #DEBUG	= -DDEBUGGING
 DEBUG	=
 PARANOID = -DPARANOID
-EXTRA_CFLAGS	:= $(PARANOID) $(DEBUG) -fno-builtin $(MATH_EMULATION)
-EXTRA_AFLAGS	:= $(PARANOID)
+ccflags-y += $(PARANOID) $(DEBUG) -fno-builtin $(MATH_EMULATION)
+asflags-y += $(PARANOID)
 
 # From 'C' language sources:
 C_OBJS =fpu_entry.o errors.o \
--- a/arch/x86/math-emu/reg_compare.c
+++ b/arch/x86/math-emu/reg_compare.c
@@ -168,7 +168,7 @@ static int compare(FPU_REG const *b, int
 /* This function requires that st(0) is not empty */
 int FPU_compare_st_data(FPU_REG const *loaded_data, u_char loaded_tag)
 {
-	int f = 0, c;
+	int f, c;
 
 	c = compare(loaded_data, loaded_tag);
 
@@ -189,12 +189,12 @@ int FPU_compare_st_data(FPU_REG const *l
 		case COMP_No_Comp:
 			f = SW_C3 | SW_C2 | SW_C0;
 			break;
-#ifdef PARANOID
 		default:
+#ifdef PARANOID
 			EXCEPTION(EX_INTERNAL | 0x121);
+#endif /* PARANOID */
 			f = SW_C3 | SW_C2 | SW_C0;
 			break;
-#endif /* PARANOID */
 		}
 	setcc(f);
 	if (c & COMP_Denormal) {
@@ -205,7 +205,7 @@ int FPU_compare_st_data(FPU_REG const *l
 
 static int compare_st_st(int nr)
 {
-	int f = 0, c;
+	int f, c;
 	FPU_REG *st_ptr;
 
 	if (!NOT_EMPTY(0) || !NOT_EMPTY(nr)) {
@@ -235,12 +235,12 @@ static int compare_st_st(int nr)
 		case COMP_No_Comp:
 			f = SW_C3 | SW_C2 | SW_C0;
 			break;
-#ifdef PARANOID
 		default:
+#ifdef PARANOID
 			EXCEPTION(EX_INTERNAL | 0x122);
+#endif /* PARANOID */
 			f = SW_C3 | SW_C2 | SW_C0;
 			break;
-#endif /* PARANOID */
 		}
 	setcc(f);
 	if (c & COMP_Denormal) {
@@ -283,12 +283,12 @@ static int compare_i_st_st(int nr)
 	case COMP_No_Comp:
 		f = X86_EFLAGS_ZF | X86_EFLAGS_PF | X86_EFLAGS_CF;
 		break;
-#ifdef PARANOID
 	default:
+#ifdef PARANOID
 		EXCEPTION(EX_INTERNAL | 0x122);
+#endif /* PARANOID */
 		f = 0;
 		break;
-#endif /* PARANOID */
 	}
 	FPU_EFLAGS = (FPU_EFLAGS & ~(X86_EFLAGS_ZF | X86_EFLAGS_PF | X86_EFLAGS_CF)) | f;
 	if (c & COMP_Denormal) {

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 072/193] tools build: Add tools tree support for make -s
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (70 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 071/193] x86/fpu/math-emu: Fix possible uninitialized variable use Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 073/193] x86/build: Silence the build with "make -s" Greg Kroah-Hartman
                   ` (127 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Josh Poimboeuf, Jiri Olsa,
	Michal Marek, Arnaldo Carvalho de Melo

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Josh Poimboeuf <jpoimboe@redhat.com>

commit e572d0887137acfc53f18175522964ec19d88175 upstream.

When doing a kernel build with 'make -s', everything is silenced except
the objtool build.  That's because the tools tree support for silent
builds is some combination of missing and broken.

Three changes are needed to fix it:

- Makefile: propagate '-s' to the sub-make's MAKEFLAGS variable so the
  tools Makefiles can see it.

- tools/scripts/Makefile.include: fix the tools Makefiles' ability to
  recognize '-s'.  The MAKE_VERSION and MAKEFLAGS checks are copied from
  the top-level Makefile.  This silences the "DESCEND objtool" message.

- tools/build/Makefile.build: add support to the tools Build files for
  recognizing '-s'.  Again the MAKE_VERSION and MAKEFLAGS checks are
  copied from the top-level Makefile.  This silences all the object
  compile/link messages.

Reported-and-Tested-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Michal Marek <mmarek@suse.com>
Link: http://lkml.kernel.org/r/e8967562ef640c3ae9a76da4ae0f4e47df737c34.1484799200.git.jpoimboe@redhat.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 Makefile                       |    6 ++++--
 tools/build/Makefile.build     |   10 ++++++++++
 tools/scripts/Makefile.include |   12 +++++++++++-
 3 files changed, 25 insertions(+), 3 deletions(-)

--- a/Makefile
+++ b/Makefile
@@ -87,10 +87,12 @@ endif
 ifneq ($(filter 4.%,$(MAKE_VERSION)),)	# make-4
 ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
   quiet=silent_
+  tools_silent=s
 endif
 else					# make-3.8x
 ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
   quiet=silent_
+  tools_silent=-s
 endif
 endif
 
@@ -1523,11 +1525,11 @@ image_name:
 # Clear a bunch of variables before executing the submake
 tools/: FORCE
 	$(Q)mkdir -p $(objtree)/tools
-	$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(filter --j% -j,$(MAKEFLAGS))" O=$(shell cd $(objtree) && /bin/pwd) subdir=tools -C $(src)/tools/
+	$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(shell cd $(objtree) && /bin/pwd) subdir=tools -C $(src)/tools/
 
 tools/%: FORCE
 	$(Q)mkdir -p $(objtree)/tools
-	$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(filter --j% -j,$(MAKEFLAGS))" O=$(shell cd $(objtree) && /bin/pwd) subdir=tools -C $(src)/tools/ $*
+	$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(shell cd $(objtree) && /bin/pwd) subdir=tools -C $(src)/tools/ $*
 
 # Single targets
 # ---------------------------------------------------------------------------
--- a/tools/build/Makefile.build
+++ b/tools/build/Makefile.build
@@ -19,6 +19,16 @@ else
   Q=@
 endif
 
+ifneq ($(filter 4.%,$(MAKE_VERSION)),)	# make-4
+ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
+  quiet=silent_
+endif
+else					# make-3.8x
+ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
+  quiet=silent_
+endif
+endif
+
 build-dir := $(srctree)/tools/build
 
 # Define $(fixdep) for dep-cmd function
--- a/tools/scripts/Makefile.include
+++ b/tools/scripts/Makefile.include
@@ -46,6 +46,16 @@ else
 NO_SUBDIR = :
 endif
 
+ifneq ($(filter 4.%,$(MAKE_VERSION)),)  # make-4
+ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
+  silent=1
+endif
+else					# make-3.8x
+ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
+  silent=1
+endif
+endif
+
 #
 # Define a callable command for descending to a new directory
 #
@@ -58,7 +68,7 @@ descend = \
 QUIET_SUBDIR0  = +$(MAKE) $(COMMAND_O) -C # space to separate -C and subdir
 QUIET_SUBDIR1  =
 
-ifneq ($(findstring $(MAKEFLAGS),s),s)
+ifneq ($(silent),1)
   ifneq ($(V),1)
 	QUIET_CC       = @echo '  CC       '$@;
 	QUIET_CC_FPIC  = @echo '  CC FPIC  '$@;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 073/193] x86/build: Silence the build with "make -s"
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (71 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 072/193] tools build: Add tools tree support for make -s Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 074/193] thermal: fix INTEL_SOC_DTS_IOSF_CORE dependencies Greg Kroah-Hartman
                   ` (126 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Linus Torvalds,
	Matt Fleming, Peter Zijlstra, Thomas Gleixner, Ingo Molnar

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit d460131dd50599e0e9405d5f4ae02c27d529a44a upstream.

Every kernel build on x86 will result in some output:

  Setup is 13084 bytes (padded to 13312 bytes).
  System is 4833 kB
  CRC 6d35fa35
  Kernel: arch/x86/boot/bzImage is ready  (#2)

This shuts it up, so that 'make -s' is truely silent as long as
everything works. Building without '-s' should produce unchanged
output.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Matt Fleming <matt@codeblueprint.co.uk>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20170719125310.2487451-6-arnd@arndb.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/x86/boot/Makefile |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

--- a/arch/x86/boot/Makefile
+++ b/arch/x86/boot/Makefile
@@ -64,12 +64,13 @@ GCOV_PROFILE := n
 $(obj)/bzImage: asflags-y  := $(SVGA_MODE)
 
 quiet_cmd_image = BUILD   $@
+silent_redirect_image = >/dev/null
 cmd_image = $(obj)/tools/build $(obj)/setup.bin $(obj)/vmlinux.bin \
-			       $(obj)/zoffset.h $@
+			       $(obj)/zoffset.h $@ $($(quiet)redirect_image)
 
 $(obj)/bzImage: $(obj)/setup.bin $(obj)/vmlinux.bin $(obj)/tools/build FORCE
 	$(call if_changed,image)
-	@echo 'Kernel: $@ is ready' ' (#'`cat .version`')'
+	@$(kecho) 'Kernel: $@ is ready' ' (#'`cat .version`')'
 
 OBJCOPYFLAGS_vmlinux.bin := -O binary -R .note -R .comment -S
 $(obj)/vmlinux.bin: $(obj)/compressed/vmlinux FORCE

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 074/193] thermal: fix INTEL_SOC_DTS_IOSF_CORE dependencies
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (72 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 073/193] x86/build: Silence the build with "make -s" Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 075/193] x86: add MULTIUSER dependency for KVM Greg Kroah-Hartman
                   ` (125 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Srinivas Pandruvada,
	Zhang Rui

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 68fd77cf8a4b045594231f07e5fc92e1a34c0a9e upstream.

We get a Kconfig warning when selecting this without also enabling
CONFIG_PCI:

warning: (X86_INTEL_LPSS && INTEL_SOC_DTS_IOSF_CORE
&& SND_SST_IPC_ACPI && MMC_SDHCI_ACPI && PUNIT_ATOM_DEBUG)
selects IOSF_MBI which has unmet direct dependencies (PCI)

This adds a new depedency.

Fixes: 3a2419f865a6 ("Thermal: Intel SoC: DTS thermal use common APIs")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/thermal/Kconfig |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -299,7 +299,7 @@ config X86_PKG_TEMP_THERMAL
 
 config INTEL_SOC_DTS_IOSF_CORE
 	tristate
-	depends on X86
+	depends on X86 && PCI
 	select IOSF_MBI
 	help
 	  This is becoming a common feature for Intel SoCs to expose the additional
@@ -309,7 +309,7 @@ config INTEL_SOC_DTS_IOSF_CORE
 
 config INTEL_SOC_DTS_THERMAL
 	tristate "Intel SoCs DTS thermal driver"
-	depends on X86
+	depends on X86 && PCI
 	select INTEL_SOC_DTS_IOSF_CORE
 	select THERMAL_WRITABLE_TRIPS
 	help

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 075/193] x86: add MULTIUSER dependency for KVM
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (73 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 074/193] thermal: fix INTEL_SOC_DTS_IOSF_CORE dependencies Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 076/193] x86/platform: Add PCI dependency for PUNIT_ATOM_DEBUG Greg Kroah-Hartman
                   ` (124 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Radim Krčmář

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit c2ce3f5d89d57301e2756ac325fe2ebc33bfec30 upstream.

KVM tries to select 'TASKSTATS', which had additional dependencies:

warning: (KVM) selects TASKSTATS which has unmet direct dependencies (NET && MULTIUSER)

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/x86/kvm/Kconfig |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/x86/kvm/Kconfig
+++ b/arch/x86/kvm/Kconfig
@@ -22,7 +22,7 @@ config KVM
 	depends on HAVE_KVM
 	depends on HIGH_RES_TIMERS
 	# for TASKSTATS/TASK_DELAY_ACCT:
-	depends on NET
+	depends on NET && MULTIUSER
 	select PREEMPT_NOTIFIERS
 	select MMU_NOTIFIER
 	select ANON_INODES

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 076/193] x86/platform: Add PCI dependency for PUNIT_ATOM_DEBUG
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (74 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 075/193] x86: add MULTIUSER dependency for KVM Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 077/193] scsi: advansys: fix uninitialized data access Greg Kroah-Hartman
                   ` (123 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Andy Lutomirski,
	Josh Poimboeuf, Kees Cook, Linus Torvalds, Peter Zijlstra,
	Thomas Gleixner, Ingo Molnar

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit d689c64d189e43d782fec5649fb0afe303c5b3f9 upstream.

The IOSF_MBI option requires PCI support, without it we get a harmless
Kconfig warning when it gets selected by PUNIT_ATOM_DEBUG:

  warning: (X86_INTEL_LPSS && SND_SST_IPC_ACPI && MMC_SDHCI_ACPI && PUNIT_ATOM_DEBUG) selects IOSF_MBI which has unmet direct dependencies (PCI)

This adds another dependency to avoid the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20170719125310.2487451-8-arnd@arndb.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/x86/Kconfig.debug |    1 +
 1 file changed, 1 insertion(+)

--- a/arch/x86/Kconfig.debug
+++ b/arch/x86/Kconfig.debug
@@ -391,6 +391,7 @@ config X86_DEBUG_FPU
 
 config PUNIT_ATOM_DEBUG
 	tristate "ATOM Punit debug driver"
+	depends on PCI
 	select DEBUG_FS
 	select IOSF_MBI
 	---help---

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 077/193] scsi: advansys: fix uninitialized data access
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (75 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 076/193] x86/platform: Add PCI dependency for PUNIT_ATOM_DEBUG Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 078/193] arm64: Kconfig: select COMPAT_BINFMT_ELF only when BINFMT_ELF is set Greg Kroah-Hartman
                   ` (122 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Martin K. Petersen

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 44a5b977128c0ffff0654392b40f4c2ce72a619b upstream.

gcc-7.0.1 now warns about a previously unnoticed access of uninitialized
struct members:

drivers/scsi/advansys.c: In function 'AscMsgOutSDTR':
drivers/scsi/advansys.c:3860:26: error: '*((void *)&sdtr_buf+5)' may be used uninitialized in this function [-Werror=maybe-uninitialized]
         ((ushort)s_buffer[i + 1] << 8) | s_buffer[i]);
                          ^
drivers/scsi/advansys.c:3860:26: error: '*((void *)&sdtr_buf+7)' may be used uninitialized in this function [-Werror=maybe-uninitialized]
drivers/scsi/advansys.c:3860:26: error: '*((void *)&sdtr_buf+5)' may be used uninitialized in this function [-Werror=maybe-uninitialized]
drivers/scsi/advansys.c:3860:26: error: '*((void *)&sdtr_buf+7)' may be used uninitialized in this function [-Werror=maybe-uninitialized]

The code has existed in this exact form at least since v2.6.12, and the
warning seems correct. This uses named initializers to ensure we
initialize all members of the structure.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/scsi/advansys.c |   21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

--- a/drivers/scsi/advansys.c
+++ b/drivers/scsi/advansys.c
@@ -6291,18 +6291,17 @@ static uchar AscGetSynPeriodIndex(ASC_DV
 static uchar
 AscMsgOutSDTR(ASC_DVC_VAR *asc_dvc, uchar sdtr_period, uchar sdtr_offset)
 {
-	EXT_MSG sdtr_buf;
-	uchar sdtr_period_index;
-	PortAddr iop_base;
-
-	iop_base = asc_dvc->iop_base;
-	sdtr_buf.msg_type = EXTENDED_MESSAGE;
-	sdtr_buf.msg_len = MS_SDTR_LEN;
-	sdtr_buf.msg_req = EXTENDED_SDTR;
-	sdtr_buf.xfer_period = sdtr_period;
+	PortAddr iop_base = asc_dvc->iop_base;
+	uchar sdtr_period_index = AscGetSynPeriodIndex(asc_dvc, sdtr_period);
+	EXT_MSG sdtr_buf = {
+		.msg_type = EXTENDED_MESSAGE,
+		.msg_len = MS_SDTR_LEN,
+		.msg_req = EXTENDED_SDTR,
+		.xfer_period = sdtr_period,
+		.req_ack_offset = sdtr_offset,
+	};
 	sdtr_offset &= ASC_SYN_MAX_OFFSET;
-	sdtr_buf.req_ack_offset = sdtr_offset;
-	sdtr_period_index = AscGetSynPeriodIndex(asc_dvc, sdtr_period);
+
 	if (sdtr_period_index <= asc_dvc->max_sdtr_index) {
 		AscMemWordCopyPtrToLram(iop_base, ASCV_MSGOUT_BEG,
 					(uchar *)&sdtr_buf,

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 078/193] arm64: Kconfig: select COMPAT_BINFMT_ELF only when BINFMT_ELF is set
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (76 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 077/193] scsi: advansys: fix uninitialized data access Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 079/193] ALSA: hda/ca0132 - fix possible NULL pointer use Greg Kroah-Hartman
                   ` (121 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Kefeng Wang, Will Deacon

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Kefeng Wang <wangkefeng.wang@huawei.com>

commit 2e449048a25eb75d48dff12882b93f26d130a1c6 upstream.

Fix warning:
"(COMPAT) selects COMPAT_BINFMT_ELF which has unmet direct dependencies
(COMPAT && BINFMT_ELF)"

Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/arm64/Kconfig |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -785,7 +785,7 @@ source "fs/Kconfig.binfmt"
 config COMPAT
 	bool "Kernel support for 32-bit EL0"
 	depends on ARM64_4K_PAGES || EXPERT
-	select COMPAT_BINFMT_ELF
+	select COMPAT_BINFMT_ELF if BINFMT_ELF
 	select HAVE_UID16
 	select OLD_SIGSUSPEND3
 	select COMPAT_OLD_SIGACTION

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 079/193] ALSA: hda/ca0132 - fix possible NULL pointer use
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (77 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 078/193] arm64: Kconfig: select COMPAT_BINFMT_ELF only when BINFMT_ELF is set Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 080/193] reiserfs: avoid a -Wmaybe-uninitialized warning Greg Kroah-Hartman
                   ` (120 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Takashi Iwai

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 46a049dae771b95e77ac6c823330f4a60f600236 upstream.

gcc-7 caught what it considers a NULL pointer dereference:

sound/pci/hda/patch_ca0132.c: In function 'dspio_scp.constprop':
sound/pci/hda/patch_ca0132.c:1487:4: error: argument 1 null where non-null expected [-Werror=nonnull]

This is plausible from looking at the function, as we compare 'reply'
to NULL earlier in it. I have not tried to analyze if there are constraints
that make it impossible to hit the bug, but adding another NULL check in
the end kills the warning and makes the function more robust.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 sound/pci/hda/patch_ca0132.c |    3 +++
 1 file changed, 3 insertions(+)

--- a/sound/pci/hda/patch_ca0132.c
+++ b/sound/pci/hda/patch_ca0132.c
@@ -1482,6 +1482,9 @@ static int dspio_scp(struct hda_codec *c
 		} else if (ret_size != reply_data_size) {
 			codec_dbg(codec, "RetLen and HdrLen .NE.\n");
 			return -EINVAL;
+		} else if (!reply) {
+			codec_dbg(codec, "NULL reply\n");
+			return -EINVAL;
 		} else {
 			*reply_len = ret_size*sizeof(unsigned int);
 			memcpy(reply, scp_reply.data, *reply_len);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 080/193] reiserfs: avoid a -Wmaybe-uninitialized warning
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (78 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 079/193] ALSA: hda/ca0132 - fix possible NULL pointer use Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 081/193] ssb: mark ssb_bus_register as __maybe_unused Greg Kroah-Hartman
                   ` (119 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Jan Kara

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit ab4949640d6674b617b314ad3c2c00353304bab9 upstream.

The latest gcc-7.0.1 snapshot warns about an unintialized variable use:

In file included from fs/reiserfs/lbalance.c:8:0:
fs/reiserfs/lbalance.c: In function 'leaf_item_bottle.isra.3':
fs/reiserfs/reiserfs.h:1279:13: error: '*((void *)&n_ih+8).v' may be used uninitialized in this function [-Werror=maybe-uninitialized]
  v2->v = (v2->v & cpu_to_le64(15ULL << 60)) | cpu_to_le64(offset);
           ~~^~~
fs/reiserfs/reiserfs.h:1279:13: error: '*((void *)&n_ih+8).v' may be used uninitialized in this function [-Werror=maybe-uninitialized]
  v2->v = (v2->v & cpu_to_le64(15ULL << 60)) | cpu_to_le64(offset);

This happens because the offset/type pair that is stored in
ih.key.u.k_offset_v2 is actually uninitialized when we call
set_le_ih_k_offset() and set_le_ih_k_type(). After we have called both,
all data is correct, but the first of the two reads uninitialized data
for the type field and writes it back before it gets overwritten.

This works around the warning by initializing the k_offset_v2 through
the slightly larger memcpy().

[JK: Remove now unused define and make it obvious we initialize the key]

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/reiserfs/lbalance.c |    2 +-
 fs/reiserfs/reiserfs.h |    1 -
 2 files changed, 1 insertion(+), 2 deletions(-)

--- a/fs/reiserfs/lbalance.c
+++ b/fs/reiserfs/lbalance.c
@@ -475,7 +475,7 @@ static void leaf_item_bottle(struct buff
 			 * 'cpy_bytes'; create new item header;
 			 * n_ih = new item_header;
 			 */
-			memcpy(&n_ih, ih, SHORT_KEY_SIZE);
+			memcpy(&n_ih.ih_key, &ih->ih_key, KEY_SIZE);
 
 			/* Endian safe, both le */
 			n_ih.ih_version = ih->ih_version;
--- a/fs/reiserfs/reiserfs.h
+++ b/fs/reiserfs/reiserfs.h
@@ -1326,7 +1326,6 @@ struct cpu_key {
 #define KEY_NOT_FOUND 0
 
 #define KEY_SIZE (sizeof(struct reiserfs_key))
-#define SHORT_KEY_SIZE (sizeof (__u32) + sizeof (__u32))
 
 /* return values for search_by_key and clones */
 #define ITEM_FOUND 1

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 081/193] ssb: mark ssb_bus_register as __maybe_unused
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (79 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 080/193] reiserfs: avoid a -Wmaybe-uninitialized warning Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 082/193] thermal: spear: use __maybe_unused for PM functions Greg Kroah-Hartman
                   ` (118 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Michael Buesch, Kalle Valo

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit b7e2d195cc523bd92ed7a64aac089421dbab2a2d upstream.

The SoC variant of the ssb code is now optional like the other
ones, which means we can build the framwork without any
front-end, but that results in a warning:

drivers/ssb/main.c:616:12: warning: 'ssb_bus_register' defined but not used [-Wunused-function]

This annotates the ssb_bus_register function as __maybe_unused to
shut up the warning. A configuration like this will not work on
any hardware of course, but we still want this to silently build
without warnings if the configuration is allowed in the first
place.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Fixes: 845da6e58e19 ("ssb: add Kconfig entry for compiling SoC related code")
Acked-by: Michael Buesch <m@bues.ch>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/ssb/main.c |    7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

--- a/drivers/ssb/main.c
+++ b/drivers/ssb/main.c
@@ -613,9 +613,10 @@ out:
 	return err;
 }
 
-static int ssb_bus_register(struct ssb_bus *bus,
-			    ssb_invariants_func_t get_invariants,
-			    unsigned long baseaddr)
+static int __maybe_unused
+ssb_bus_register(struct ssb_bus *bus,
+		 ssb_invariants_func_t get_invariants,
+		 unsigned long baseaddr)
 {
 	int err;
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 082/193] thermal: spear: use __maybe_unused for PM functions
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (80 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 081/193] ssb: mark ssb_bus_register as __maybe_unused Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 083/193] x86/boot: Avoid warning for zero-filling .bss Greg Kroah-Hartman
                   ` (117 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Eduardo Valentin

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit d612c64d1f4d6b2464993dfeafd9ec319f774188 upstream.

The spear thermal driver hides its suspend/resume function conditionally
based on CONFIG_PM, but references them based on CONFIG_PM_SLEEP, so
we get a warning if the former is set but the latter is not:

thermal/spear_thermal.c:58:12: warning: 'spear_thermal_suspend' defined but not used [-Wunused-function]
thermal/spear_thermal.c:75:12: warning: 'spear_thermal_resume' defined but not used [-Wunused-function]

This removes the #ifdef and instead uses a __maybe_uninitialized
annotation to avoid the warning and improve compile-time coverage.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/thermal/spear_thermal.c |    6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

--- a/drivers/thermal/spear_thermal.c
+++ b/drivers/thermal/spear_thermal.c
@@ -54,8 +54,7 @@ static struct thermal_zone_device_ops op
 	.get_temp = thermal_get_temp,
 };
 
-#ifdef CONFIG_PM
-static int spear_thermal_suspend(struct device *dev)
+static int __maybe_unused spear_thermal_suspend(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct thermal_zone_device *spear_thermal = platform_get_drvdata(pdev);
@@ -72,7 +71,7 @@ static int spear_thermal_suspend(struct
 	return 0;
 }
 
-static int spear_thermal_resume(struct device *dev)
+static int __maybe_unused spear_thermal_resume(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct thermal_zone_device *spear_thermal = platform_get_drvdata(pdev);
@@ -94,7 +93,6 @@ static int spear_thermal_resume(struct d
 
 	return 0;
 }
-#endif
 
 static SIMPLE_DEV_PM_OPS(spear_thermal_pm_ops, spear_thermal_suspend,
 		spear_thermal_resume);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 083/193] x86/boot: Avoid warning for zero-filling .bss
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (81 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 082/193] thermal: spear: use __maybe_unused for PM functions Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 084/193] scsi: sim710: fix build warning Greg Kroah-Hartman
                   ` (116 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Andy Lutomirski,
	Borislav Petkov, Brian Gerst, Denys Vlasenko, H. Peter Anvin,
	Josh Poimboeuf, Linus Torvalds, Peter Zijlstra, Thomas Gleixner,
	Ingo Molnar

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 553bbc11aa6c1f9e0f529a06aeeca15fbe4a3985 upstream.

The latest binutils are warning about a .fill directive with an explicit
value in a .bss section:

  arch/x86/kernel/head_32.S: Assembler messages:
  arch/x86/kernel/head_32.S:677: Warning: ignoring fill value in section `.bss..page_aligned'
  arch/x86/kernel/head_32.S:679: Warning: ignoring fill value in section `.bss..page_aligned'

This comes from the 'ENTRY()' macro padding the space between the symbols
with 'nop' via:

  .align 4,0x90

Open-coding the .globl directive without the padding avoids that warning,
as all the symbols are already page aligned.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20161116141726.2013389-1-arnd@arndb.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/x86/kernel/head_32.S |    9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

--- a/arch/x86/kernel/head_32.S
+++ b/arch/x86/kernel/head_32.S
@@ -669,14 +669,17 @@ __PAGE_ALIGNED_BSS
 initial_pg_pmd:
 	.fill 1024*KPMDS,4,0
 #else
-ENTRY(initial_page_table)
+.globl initial_page_table
+initial_page_table:
 	.fill 1024,4,0
 #endif
 initial_pg_fixmap:
 	.fill 1024,4,0
-ENTRY(empty_zero_page)
+.globl empty_zero_page
+empty_zero_page:
 	.fill 4096,1,0
-ENTRY(swapper_pg_dir)
+.globl swapper_pg_dir
+swapper_pg_dir:
 	.fill 1024,4,0
 
 /*

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 084/193] scsi: sim710: fix build warning
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (82 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 083/193] x86/boot: Avoid warning for zero-filling .bss Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 085/193] drivers/net: fix eisa_driver probe section mismatch Greg Kroah-Hartman
                   ` (115 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Sudip Mukherjee, Johannes Thumshirn,
	Martin K. Petersen

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Sudip Mukherjee <sudipm.mukherjee@gmail.com>

commit 648a0a7da34f281410e8e3a59de8c13ec6ea380a upstream.

We are getting build warning about:
 "Section mismatch in reference from the variable sim710_eisa_driver to
 the function .init.text:sim710_eisa_probe()
 The variable sim710_eisa_driver references the function __init
 sim710_eisa_probe()"

sim710_eisa_probe() was having __init but that was being referenced from
sim710_eisa_driver.

Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/scsi/sim710.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- a/drivers/scsi/sim710.c
+++ b/drivers/scsi/sim710.c
@@ -176,8 +176,7 @@ static struct eisa_device_id sim710_eisa
 };
 MODULE_DEVICE_TABLE(eisa, sim710_eisa_ids);
 
-static __init int
-sim710_eisa_probe(struct device *dev)
+static int sim710_eisa_probe(struct device *dev)
 {
 	struct eisa_device *edev = to_eisa_device(dev);
 	unsigned long io_addr = edev->base_addr;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 085/193] drivers/net: fix eisa_driver probe section mismatch
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (83 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 084/193] scsi: sim710: fix build warning Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 086/193] dpt_i2o: fix build warning Greg Kroah-Hartman
                   ` (114 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Fabian Frederick, David S. Miller

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Fabian Frederick <fabf@skynet.be>

commit cb4396edd84ed73081635fb933d19c1410fafaf4 upstream.

Some eisa_driver structures used __init probe functions which generates
a warning and could crash if function is called after being deleted.

Signed-off-by: Fabian Frederick <fabf@skynet.be>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/net/ethernet/3com/3c509.c      |    2 +-
 drivers/net/ethernet/3com/3c59x.c      |    2 +-
 drivers/net/ethernet/dec/tulip/de4x5.c |    2 +-
 drivers/net/ethernet/hp/hp100.c        |    2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

--- a/drivers/net/ethernet/3com/3c509.c
+++ b/drivers/net/ethernet/3com/3c509.c
@@ -562,7 +562,7 @@ static void el3_common_remove (struct ne
 }
 
 #ifdef CONFIG_EISA
-static int __init el3_eisa_probe (struct device *device)
+static int el3_eisa_probe(struct device *device)
 {
 	short i;
 	int ioaddr, irq, if_port;
--- a/drivers/net/ethernet/3com/3c59x.c
+++ b/drivers/net/ethernet/3com/3c59x.c
@@ -907,7 +907,7 @@ static struct eisa_device_id vortex_eisa
 };
 MODULE_DEVICE_TABLE(eisa, vortex_eisa_ids);
 
-static int __init vortex_eisa_probe(struct device *device)
+static int vortex_eisa_probe(struct device *device)
 {
 	void __iomem *ioaddr;
 	struct eisa_device *edev;
--- a/drivers/net/ethernet/dec/tulip/de4x5.c
+++ b/drivers/net/ethernet/dec/tulip/de4x5.c
@@ -1990,7 +1990,7 @@ SetMulticastFilter(struct net_device *de
 
 static u_char de4x5_irq[] = EISA_ALLOWED_IRQ_LIST;
 
-static int __init de4x5_eisa_probe (struct device *gendev)
+static int de4x5_eisa_probe(struct device *gendev)
 {
 	struct eisa_device *edev;
 	u_long iobase;
--- a/drivers/net/ethernet/hp/hp100.c
+++ b/drivers/net/ethernet/hp/hp100.c
@@ -2843,7 +2843,7 @@ static void cleanup_dev(struct net_devic
 }
 
 #ifdef CONFIG_EISA
-static int __init hp100_eisa_probe (struct device *gendev)
+static int hp100_eisa_probe(struct device *gendev)
 {
 	struct net_device *dev = alloc_etherdev(sizeof(struct hp100_private));
 	struct eisa_device *edev = to_eisa_device(gendev);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 086/193] dpt_i2o: fix build warning
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (84 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 085/193] drivers/net: fix eisa_driver probe section mismatch Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 087/193] profile: hide unused functions when !CONFIG_PROC_FS Greg Kroah-Hartman
                   ` (113 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Sudip Mukherjee, Johannes Thumshirn,
	Martin K. Petersen

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Sudip Mukherjee <sudipm.mukherjee@gmail.com>

commit f50abb9b63b1d8773e1ce32115701c06416e6f91 upstream.

We were getting build warning about:
drivers/scsi/dpt_i2o.c:183:29: warning: 'dptids' defined but not used

dptids[] is only used in the MODULE_DEVICE_TABLE so when MODULE is not
defined then dptids[] becomes unused.

Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/scsi/dpt_i2o.c |    3 +++
 1 file changed, 3 insertions(+)

--- a/drivers/scsi/dpt_i2o.c
+++ b/drivers/scsi/dpt_i2o.c
@@ -180,11 +180,14 @@ static u8 adpt_read_blink_led(adpt_hba*
  *============================================================================
  */
 
+#ifdef MODULE
 static struct pci_device_id dptids[] = {
 	{ PCI_DPT_VENDOR_ID, PCI_DPT_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
 	{ PCI_DPT_VENDOR_ID, PCI_DPT_RAPTOR_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID,},
 	{ 0, }
 };
+#endif
+
 MODULE_DEVICE_TABLE(pci,dptids);
 
 static int adpt_detect(struct scsi_host_template* sht)

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 087/193] profile: hide unused functions when !CONFIG_PROC_FS
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (85 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 086/193] dpt_i2o: fix build warning Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 088/193] md: avoid warning for 32-bit sector_t Greg Kroah-Hartman
                   ` (112 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Vlastimil Babka,
	Robin Holt, Johannes Weiner, Christoph Lameter, Tejun Heo,
	Andrew Morton, Linus Torvalds

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit ade356b99a4187578609f2a91c4d2ed88e4e70dc upstream.

A couple of functions and variables in the profile implementation are
used only on SMP systems by the procfs code, but are unused if either
procfs is disabled or in uniprocessor kernels.  gcc prints a harmless
warning about the unused symbols:

  kernel/profile.c:243:13: error: 'profile_flip_buffers' defined but not used [-Werror=unused-function]
   static void profile_flip_buffers(void)
               ^
  kernel/profile.c:266:13: error: 'profile_discard_flip_buffers' defined but not used [-Werror=unused-function]
   static void profile_discard_flip_buffers(void)
               ^
  kernel/profile.c:330:12: error: 'profile_cpu_callback' defined but not used [-Werror=unused-function]
   static int profile_cpu_callback(struct notifier_block *info,
              ^

This adds further #ifdef to the file, to annotate exactly in which cases
they are used.  I have done several thousand ARM randconfig kernels with
this patch applied and no longer get any warnings in this file.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Robin Holt <robinmholt@gmail.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Christoph Lameter <cl@linux.com>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 kernel/profile.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/kernel/profile.c
+++ b/kernel/profile.c
@@ -44,7 +44,7 @@ int prof_on __read_mostly;
 EXPORT_SYMBOL_GPL(prof_on);
 
 static cpumask_var_t prof_cpu_mask;
-#ifdef CONFIG_SMP
+#if defined(CONFIG_SMP) && defined(CONFIG_PROC_FS)
 static DEFINE_PER_CPU(struct profile_hit *[2], cpu_profile_hits);
 static DEFINE_PER_CPU(int, cpu_profile_flip);
 static DEFINE_MUTEX(profile_flip_mutex);
@@ -201,7 +201,7 @@ int profile_event_unregister(enum profil
 }
 EXPORT_SYMBOL_GPL(profile_event_unregister);
 
-#ifdef CONFIG_SMP
+#if defined(CONFIG_SMP) && defined(CONFIG_PROC_FS)
 /*
  * Each cpu has a pair of open-addressed hashtables for pending
  * profile hits. read_profile() IPI's all cpus to request them

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 088/193] md: avoid warning for 32-bit sector_t
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (86 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 087/193] profile: hide unused functions when !CONFIG_PROC_FS Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 089/193] mtd: ichxrom: maybe-uninitialized with gcc-4.9 Greg Kroah-Hartman
                   ` (111 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, NeilBrown

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 3312c951efaba55080958974047414576b9e5d63 upstream.

When CONFIG_LBDAF is not set, sector_t is only 32-bits wide, which
means we cannot have devices with more than 2TB, and the code that
is trying to handle compatibility support for large devices in
md version 0.90 is meaningless but also causes a compile-time warning:

drivers/md/md.c: In function 'super_90_load':
drivers/md/md.c:1029:19: warning: large integer implicitly truncated to unsigned type [-Woverflow]
drivers/md/md.c: In function 'super_90_rdev_size_change':
drivers/md/md.c:1323:17: warning: large integer implicitly truncated to unsigned type [-Woverflow]

This adds a check for CONFIG_LBDAF to avoid even getting into this
code path, and also adds an explicit cast to let the compiler know
it doesn't have to warn about the truncation.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/md/md.c |   10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -1028,8 +1028,9 @@ static int super_90_load(struct md_rdev
 	 * (not needed for Linear and RAID0 as metadata doesn't
 	 * record this size)
 	 */
-	if (rdev->sectors >= (2ULL << 32) && sb->level >= 1)
-		rdev->sectors = (2ULL << 32) - 2;
+	if (IS_ENABLED(CONFIG_LBDAF) && (u64)rdev->sectors >= (2ULL << 32) &&
+	    sb->level >= 1)
+		rdev->sectors = (sector_t)(2ULL << 32) - 2;
 
 	if (rdev->sectors < ((sector_t)sb->size) * 2 && sb->level >= 1)
 		/* "this cannot possibly happen" ... */
@@ -1322,8 +1323,9 @@ super_90_rdev_size_change(struct md_rdev
 	/* Limit to 4TB as metadata cannot record more than that.
 	 * 4TB == 2^32 KB, or 2*2^32 sectors.
 	 */
-	if (num_sectors >= (2ULL << 32) && rdev->mddev->level >= 1)
-		num_sectors = (2ULL << 32) - 2;
+	if (IS_ENABLED(CONFIG_LBDAF) && (u64)num_sectors >= (2ULL << 32) &&
+	    rdev->mddev->level >= 1)
+		num_sectors = (sector_t)(2ULL << 32) - 2;
 	md_super_write(rdev->mddev, rdev, rdev->sb_start, rdev->sb_size,
 		       rdev->sb_page);
 	md_super_wait(rdev->mddev);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 089/193] mtd: ichxrom: maybe-uninitialized with gcc-4.9
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (87 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 088/193] md: avoid warning for 32-bit sector_t Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 090/193] mtd: maps: add __init attribute Greg Kroah-Hartman
                   ` (110 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Marek Vasut, Brian Norris

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit e70dda0868fad0f74c46df21f7f45fec24f29879 upstream.

pci_read_config_word() might fail and not initialize its output,
as pointed out by older versions of gcc when using the -Wmaybe-unintialized
flag:

drivers/mtd/maps/ichxrom.c: In function ‘ichxrom_cleanup’:
drivers/mtd/maps/ichxrom.c:63:2: error: ‘word’ is used uninitialized in this function [-Werror=uninitialized]

This is apparently a correct warning, though it does not show up
with newer compilers. Changing the code to not attempt to write
back uninitialized data into PCI config space is a correct
fix for the problem and avoids the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Marek Vasut <marex@denx.de>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/mtd/maps/ichxrom.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

--- a/drivers/mtd/maps/ichxrom.c
+++ b/drivers/mtd/maps/ichxrom.c
@@ -57,10 +57,12 @@ static void ichxrom_cleanup(struct ichxr
 {
 	struct ichxrom_map_info *map, *scratch;
 	u16 word;
+	int ret;
 
 	/* Disable writes through the rom window */
-	pci_read_config_word(window->pdev, BIOS_CNTL, &word);
-	pci_write_config_word(window->pdev, BIOS_CNTL, word & ~1);
+	ret = pci_read_config_word(window->pdev, BIOS_CNTL, &word);
+	if (!ret)
+		pci_write_config_word(window->pdev, BIOS_CNTL, word & ~1);
 	pci_dev_put(window->pdev);
 
 	/* Free all of the mtd devices */

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 090/193] mtd: maps: add __init attribute
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (88 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 089/193] mtd: ichxrom: maybe-uninitialized with gcc-4.9 Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 091/193] mptfusion: hide unused seq_mpt_print_ioc_summary function Greg Kroah-Hartman
                   ` (109 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Julia Lawall, Brian Norris

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Julia Lawall <julia.lawall@lip6.fr>

commit e4106a7c8236eb7b91686d36f3bf33ee43db94b4 upstream.

Add __init attribute on functions that are only called from other __init
functions and that are not inlined, at least with gcc version 4.8.4 on an
x86 machine with allyesconfig.  Currently, the functions are put in the
.text.unlikely segment.  Declaring them as __init will cause them to be
put in the .init.text and to disappear after initialization.

The result of objdump -x on the functions before the change is as follows:

00000000000001bc l     F .text.unlikely 00000000000006a2 ck804xrom_init_one.isra.1
00000000000001aa l     F .text.unlikely 0000000000000764 esb2rom_init_one.isra.1
00000000000001db l     F .text.unlikely 0000000000000716 ichxrom_init_one.isra.1

And after the change it is as follows:

0000000000000000 l     F .init.text	000000000000069d ck804xrom_init_one.isra.1
0000000000000000 l     F .init.text	000000000000075f esb2rom_init_one.isra.1
0000000000000000 l     F .init.text	0000000000000711 ichxrom_init_one.isra.1

Done with the help of Coccinelle.  The semantic patch checks for local
static non-init functions that are called from an __init function and are
not called from any other function.

Note that in each case, the function is stored in the probe field of a
pci_driver structure, but this code is under an #if 0.  The #if 0s have
been unchanged since 2009 at the latest.

Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/mtd/maps/ck804xrom.c |    4 ++--
 drivers/mtd/maps/esb2rom.c   |    4 ++--
 drivers/mtd/maps/ichxrom.c   |    4 ++--
 3 files changed, 6 insertions(+), 6 deletions(-)

--- a/drivers/mtd/maps/ck804xrom.c
+++ b/drivers/mtd/maps/ck804xrom.c
@@ -112,8 +112,8 @@ static void ck804xrom_cleanup(struct ck8
 }
 
 
-static int ck804xrom_init_one(struct pci_dev *pdev,
-			      const struct pci_device_id *ent)
+static int __init ck804xrom_init_one(struct pci_dev *pdev,
+				     const struct pci_device_id *ent)
 {
 	static char *rom_probe_types[] = { "cfi_probe", "jedec_probe", NULL };
 	u8 byte;
--- a/drivers/mtd/maps/esb2rom.c
+++ b/drivers/mtd/maps/esb2rom.c
@@ -144,8 +144,8 @@ static void esb2rom_cleanup(struct esb2r
 	pci_dev_put(window->pdev);
 }
 
-static int esb2rom_init_one(struct pci_dev *pdev,
-			    const struct pci_device_id *ent)
+static int __init esb2rom_init_one(struct pci_dev *pdev,
+				   const struct pci_device_id *ent)
 {
 	static char *rom_probe_types[] = { "cfi_probe", "jedec_probe", NULL };
 	struct esb2rom_window *window = &esb2rom_window;
--- a/drivers/mtd/maps/ichxrom.c
+++ b/drivers/mtd/maps/ichxrom.c
@@ -86,8 +86,8 @@ static void ichxrom_cleanup(struct ichxr
 }
 
 
-static int ichxrom_init_one(struct pci_dev *pdev,
-			    const struct pci_device_id *ent)
+static int __init ichxrom_init_one(struct pci_dev *pdev,
+				   const struct pci_device_id *ent)
 {
 	static char *rom_probe_types[] = { "cfi_probe", "jedec_probe", NULL };
 	struct ichxrom_window *window = &ichxrom_window;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 091/193] mptfusion: hide unused seq_mpt_print_ioc_summary function
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (89 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 090/193] mtd: maps: add __init attribute Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 092/193] scsi: fdomain: drop fdomain_pci_tbl when built-in Greg Kroah-Hartman
                   ` (108 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Martin K. Petersen

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 28558f5af50d8335cbbc8bc2726e0747553e29f5 upstream.

The seq_mpt_print_ioc_summary function is used for the
/proc/mpt/iocN/summary implementation and never gets called when
CONFIG_PROC_FS is disabled:

drivers/message/fusion/mptbase.c:6851:13: warning: 'seq_mpt_print_ioc_summary' defined but not used [-Wunused-function]
 static void seq_mpt_print_ioc_summary(MPT_ADAPTER *ioc, struct seq_file *m, int showlan)

This adds an #ifdef to hide the function definition in that case and
avoid the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/message/fusion/mptbase.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -6848,6 +6848,7 @@ mpt_print_ioc_summary(MPT_ADAPTER *ioc,
 	*size = y;
 }
 
+#ifdef CONFIG_PROC_FS
 static void seq_mpt_print_ioc_summary(MPT_ADAPTER *ioc, struct seq_file *m, int showlan)
 {
 	char expVer[32];
@@ -6879,6 +6880,7 @@ static void seq_mpt_print_ioc_summary(MP
 
 	seq_putc(m, '\n');
 }
+#endif
 
 /**
  *	mpt_set_taskmgmt_in_progress_flag - set flags associated with task management

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 092/193] scsi: fdomain: drop fdomain_pci_tbl when built-in
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (90 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 091/193] mptfusion: hide unused seq_mpt_print_ioc_summary function Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 093/193] video: fbdev: sis: remove unused variable Greg Kroah-Hartman
                   ` (107 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Martin K. Petersen

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 120f83f8d6f2e2e7dea3570646722c62ecee70b0 upstream.

The fdomain SCSI host driver is one of the last remaining drivers that
manually search the PCI bus using pci_get_device rather than registering
a pci_driver instance.

This means the module device table is unused when the driver is
built-in, and we get a warning about it:

drivers/scsi/fdomain.c:1773:29: warning: 'fdomain_pci_tbl' defined but not used [-Wunused-variable]

To avoid the warning, this adds another #ifdef around the table
definition.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/scsi/fdomain.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/scsi/fdomain.c
+++ b/drivers/scsi/fdomain.c
@@ -1768,7 +1768,7 @@ struct scsi_host_template fdomain_driver
 };
 
 #ifndef PCMCIA
-#ifdef CONFIG_PCI
+#if defined(CONFIG_PCI) && defined(MODULE)
 
 static struct pci_device_id fdomain_pci_tbl[] = {
 	{ PCI_VENDOR_ID_FD, PCI_DEVICE_ID_FD_36C70,

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 093/193] video: fbdev: sis: remove unused variable
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (91 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 092/193] scsi: fdomain: drop fdomain_pci_tbl when built-in Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 094/193] staging: ste_rmi4: avoid unused function warnings Greg Kroah-Hartman
                   ` (106 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Sudip Mukherjee, Tomi Valkeinen

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Sudip Mukherjee <sudipm.mukherjee@gmail.com>

commit 32ad61951574d011d363694d6037592e99da9421 upstream.

The variables modeflag and resinfo were only assigned some value but
were never used.

Signed-off-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/video/fbdev/sis/init301.c |   10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

--- a/drivers/video/fbdev/sis/init301.c
+++ b/drivers/video/fbdev/sis/init301.c
@@ -2151,17 +2151,15 @@ SiS_GetVCLK2Ptr(struct SiS_Private *SiS_
 		unsigned short RefreshRateTableIndex)
 {
   unsigned short CRT2Index, VCLKIndex = 0, VCLKIndexGEN = 0, VCLKIndexGENCRT = 0;
-  unsigned short modeflag, resinfo, tempbx;
+  unsigned short resinfo, tempbx;
   const unsigned char *CHTVVCLKPtr = NULL;
 
   if(ModeNo <= 0x13) {
-     modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
      resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
      CRT2Index = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
      VCLKIndexGEN = (SiS_GetRegByte((SiS_Pr->SiS_P3ca+0x02)) >> 2) & 0x03;
      VCLKIndexGENCRT = VCLKIndexGEN;
   } else {
-     modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
      resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
      CRT2Index = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
      VCLKIndexGEN = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
@@ -7270,7 +7268,7 @@ SiS_ShiftXPos(struct SiS_Private *SiS_Pr
 static void
 SiS_SetGroup4_C_ELV(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
 {
-   unsigned short temp, temp1, resinfo = 0;
+   unsigned short temp, temp1;
    unsigned char  *ROMAddr = SiS_Pr->VirtualRomBase;
 
    if(!(SiS_Pr->SiS_VBType & VB_SIS30xCLV)) return;
@@ -7282,10 +7280,6 @@ SiS_SetGroup4_C_ELV(struct SiS_Private *
       if(!(ROMAddr[0x61] & 0x04)) return;
    }
 
-   if(ModeNo > 0x13) {
-      resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
-   }
-
    SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x3a,0x08);
    temp = SiS_GetReg(SiS_Pr->SiS_Part4Port,0x3a);
    if(!(temp & 0x01)) {

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 094/193] staging: ste_rmi4: avoid unused function warnings
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (92 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 093/193] video: fbdev: sis: remove unused variable Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 095/193] fbdev: sis: enforce selection of at least one backend Greg Kroah-Hartman
                   ` (105 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Linus Walleij

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 9045a4a7e686a6316129d6d0b21b4fe2520968e4 upstream.

The rmi4 touchscreen driver encloses the power-management
functions in #ifdef CONFIG_PM, but the smtcfb_pci_suspend/resume
functions are only really used when CONFIG_PM_SLEEP is also
set, as a frequent gcc warning shows:

ste_rmi4/synaptics_i2c_rmi4.c:1050:12: warning: 'synaptics_rmi4_suspend' defined but not used
ste_rmi4/synaptics_i2c_rmi4.c:1084:12: warning: 'synaptics_rmi4_resume' defined but not used

This changes the driver to remove the #ifdef and instead mark
the functions as __maybe_unused, which is a nicer anyway, as it
provides build testing for all the code in all configurations
and is harder to get wrong.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/staging/ste_rmi4/synaptics_i2c_rmi4.c |    7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

--- a/drivers/staging/ste_rmi4/synaptics_i2c_rmi4.c
+++ b/drivers/staging/ste_rmi4/synaptics_i2c_rmi4.c
@@ -1039,7 +1039,6 @@ static int synaptics_rmi4_remove(struct
 	return 0;
 }
 
-#ifdef CONFIG_PM
 /**
  * synaptics_rmi4_suspend() - suspend the touch screen controller
  * @dev: pointer to device structure
@@ -1047,7 +1046,7 @@ static int synaptics_rmi4_remove(struct
  * This function is used to suspend the
  * touch panel controller and returns integer
  */
-static int synaptics_rmi4_suspend(struct device *dev)
+static int __maybe_unused synaptics_rmi4_suspend(struct device *dev)
 {
 	/* Touch sleep mode */
 	int retval;
@@ -1081,7 +1080,7 @@ static int synaptics_rmi4_suspend(struct
  * This function is used to resume the touch panel
  * controller and returns integer.
  */
-static int synaptics_rmi4_resume(struct device *dev)
+static int __maybe_unused synaptics_rmi4_resume(struct device *dev)
 {
 	int retval;
 	unsigned char intr_status;
@@ -1112,8 +1111,6 @@ static int synaptics_rmi4_resume(struct
 	return 0;
 }
 
-#endif
-
 static SIMPLE_DEV_PM_OPS(synaptics_rmi4_dev_pm_ops, synaptics_rmi4_suspend,
 			 synaptics_rmi4_resume);
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 095/193] fbdev: sis: enforce selection of at least one backend
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (93 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 094/193] staging: ste_rmi4: avoid unused function warnings Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 096/193] video: Use bool instead int pointer for get_opt_bool() argument Greg Kroah-Hartman
                   ` (104 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Tomi Valkeinen

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 5b833fea4377577eafecb888141a05470922ef25 upstream.

The sis framebuffer driver complains with a compile-time warning
if neither the FB_SIS_300 nor FB_SIS_315 symbols are selected:

drivers/video/fbdev/sis/sis_main.c:61:2: warning: #warning Neither CONFIG_FB_SIS_300 nor CONFIG_FB_SIS_315 is se

This is reasonable because it doesn't work in that case, but it's
also annoying for randconfig builds and is one of the most common
warnings I'm seeing on ARM now.

This changes the Kconfig logic to prevent the silly configuration,
by always selecting the FB_SIS_300 variant if the other one is
not set.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/video/fbdev/Kconfig |    1 +
 1 file changed, 1 insertion(+)

--- a/drivers/video/fbdev/Kconfig
+++ b/drivers/video/fbdev/Kconfig
@@ -1506,6 +1506,7 @@ config FB_SIS
 	select FB_CFB_COPYAREA
 	select FB_CFB_IMAGEBLIT
 	select FB_BOOT_VESA_SUPPORT if FB_SIS = y
+	select FB_SIS_300 if !FB_SIS_315
 	help
 	  This is the frame buffer device driver for the SiS 300, 315, 330
 	  and 340 series as well as XGI V3XT, V5, V8, Z7 graphics chipsets.

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 096/193] video: Use bool instead int pointer for get_opt_bool() argument
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (94 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 095/193] fbdev: sis: enforce selection of at least one backend Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 097/193] scsi: mvumi: use __maybe_unused to hide pm functions Greg Kroah-Hartman
                   ` (103 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Daniel Wagner, Fengguang Wu, Tomi Valkeinen

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Daniel Wagner <daniel.wagner@bmw-carit.de>

commit 206fc20598157ce15597822cf01b94377e30075b upstream.

As the function name already indicates that get_opt_bool() parses
for a bool. It is not a surprise that compiler is complaining
about it when -Werror=incompatible-pointer-types is used:

drivers/video/fbdev/intelfb/intelfbdrv.c: In function ‘intelfb_setup’:
drivers/video/fbdev/intelfb/intelfbdrv.c:353:39: error: passing argument 3 of ‘get_opt_bool’ from incompatible pointer type [-Werror=incompatible-pointer-types]
   if (get_opt_bool(this_opt, "accel", &accel))

Signed-off-by: Daniel Wagner <daniel.wagner@bmw-carit.de>
Reported-by: Fengguang Wu <fengguang.wu@intel.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/video/fbdev/intelfb/intelfbdrv.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/video/fbdev/intelfb/intelfbdrv.c
+++ b/drivers/video/fbdev/intelfb/intelfbdrv.c
@@ -302,7 +302,7 @@ static __inline__ int get_opt_int(const
 }
 
 static __inline__ int get_opt_bool(const char *this_opt, const char *name,
-				   int *ret)
+				   bool *ret)
 {
 	if (!ret)
 		return 0;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 097/193] scsi: mvumi: use __maybe_unused to hide pm functions
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (95 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 096/193] video: Use bool instead int pointer for get_opt_bool() argument Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 098/193] SCSI: initio: remove duplicate module device table Greg Kroah-Hartman
                   ` (102 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Johannes Thumshirn,
	Martin K. Petersen

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit fddbeb80a904aae41c84ed566e2b0d1de55907df upstream.

The mvumi scsi hides the references to its suspend/resume functions in
an #ifdef but does not hide the implementation the same way:

drivers/scsi/mvumi.c:2632:12: error: 'mvumi_suspend' defined but not used [-Werror=unused-function]
drivers/scsi/mvumi.c:2651:12: error: 'mvumi_resume' defined but not used [-Werror=unused-function]

This adds __maybe_unused annotations so the compiler knows it can
silently drop them instead of warning, while avoiding the addition of
another #ifdef.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/scsi/mvumi.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/scsi/mvumi.c
+++ b/drivers/scsi/mvumi.c
@@ -2629,7 +2629,7 @@ static void mvumi_shutdown(struct pci_de
 	mvumi_flush_cache(mhba);
 }
 
-static int mvumi_suspend(struct pci_dev *pdev, pm_message_t state)
+static int __maybe_unused mvumi_suspend(struct pci_dev *pdev, pm_message_t state)
 {
 	struct mvumi_hba *mhba = NULL;
 
@@ -2648,7 +2648,7 @@ static int mvumi_suspend(struct pci_dev
 	return 0;
 }
 
-static int mvumi_resume(struct pci_dev *pdev)
+static int __maybe_unused mvumi_resume(struct pci_dev *pdev)
 {
 	int ret;
 	struct mvumi_hba *mhba = NULL;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 098/193] SCSI: initio: remove duplicate module device table
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (96 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 097/193] scsi: mvumi: use __maybe_unused to hide pm functions Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 099/193] [media] pwc: hide unused label Greg Kroah-Hartman
                   ` (101 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Christoph Hellwig,
	Martin K. Petersen

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit d282e2b383e3f41a7758e8cbf3076091ef9d9447 upstream.

The initio driver has for many years had two copies of the
same module device table. One of them is also used for registering
the other driver, the other one is entirely useless after the
large scale cleanup that Alan Cox did back in 2007.

The compiler warns about this whenever the driver is built-in:

drivers/scsi/initio.c:131:29: warning: 'i91u_pci_devices' defined but not used [-Wunused-variable]

This removes the extraneous table and the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Fixes: 72d39fea901 ("[SCSI] initio: Convert into a real Linux driver and update to modern style")
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/scsi/initio.c |   16 ----------------
 1 file changed, 16 deletions(-)

--- a/drivers/scsi/initio.c
+++ b/drivers/scsi/initio.c
@@ -110,11 +110,6 @@
 #define i91u_MAXQUEUE		2
 #define i91u_REVID "Initio INI-9X00U/UW SCSI device driver; Revision: 1.04a"
 
-#define I950_DEVICE_ID	0x9500	/* Initio's inic-950 product ID   */
-#define I940_DEVICE_ID	0x9400	/* Initio's inic-940 product ID   */
-#define I935_DEVICE_ID	0x9401	/* Initio's inic-935 product ID   */
-#define I920_DEVICE_ID	0x0002	/* Initio's other product ID      */
-
 #ifdef DEBUG_i91u
 static unsigned int i91u_debug = DEBUG_DEFAULT;
 #endif
@@ -127,17 +122,6 @@ static int setup_debug = 0;
 
 static void i91uSCBPost(u8 * pHcb, u8 * pScb);
 
-/* PCI Devices supported by this driver */
-static struct pci_device_id i91u_pci_devices[] = {
-	{ PCI_VENDOR_ID_INIT,  I950_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{ PCI_VENDOR_ID_INIT,  I940_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{ PCI_VENDOR_ID_INIT,  I935_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{ PCI_VENDOR_ID_INIT,  I920_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{ PCI_VENDOR_ID_DOMEX, I920_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-	{ }
-};
-MODULE_DEVICE_TABLE(pci, i91u_pci_devices);
-
 #define DEBUG_INTERRUPT 0
 #define DEBUG_QUEUE     0
 #define DEBUG_STATE     0

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 099/193] [media] pwc: hide unused label
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (97 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 098/193] SCSI: initio: remove duplicate module device table Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 100/193] usb: musb/ux500: remove duplicate check for dma_is_compatible Greg Kroah-Hartman
                   ` (100 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Hans Verkuil,
	Mauro Carvalho Chehab

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 1f6bcd011464cb36059e2562f72baf75f98b732d upstream.

The pwc driver causes a warning when CONFIG_USB_PWC_INPUT_EVDEV is unset:

drivers/media/usb/pwc/pwc-if.c: In function 'usb_pwc_probe':
drivers/media/usb/pwc/pwc-if.c:1115:1: warning: label 'err_video_unreg' defined but not used [-Wunused-label]

This moves the unused label and code inside another #ifdef to
get rid of the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/media/usb/pwc/pwc-if.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/media/usb/pwc/pwc-if.c
+++ b/drivers/media/usb/pwc/pwc-if.c
@@ -1119,8 +1119,10 @@ static int usb_pwc_probe(struct usb_inte
 
 	return 0;
 
+#ifdef CONFIG_USB_PWC_INPUT_EVDEV
 err_video_unreg:
 	video_unregister_device(&pdev->vdev);
+#endif
 err_unregister_v4l2_dev:
 	v4l2_device_unregister(&pdev->v4l2_dev);
 err_free_controls:

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 100/193] usb: musb/ux500: remove duplicate check for dma_is_compatible
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (98 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 099/193] [media] pwc: hide unused label Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 101/193] tty: hvc_xen: hide xen_console_remove when unused Greg Kroah-Hartman
                   ` (99 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Felipe Balbi

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 62a6abdd427b5fc4d8aad5dac874904e96273e6d upstream.

When dma_addr_t is 64-bit, we get a warning about an invalid cast
in the call to ux500_dma_is_compatible() from ux500_dma_channel_program():

drivers/usb/musb/ux500_dma.c: In function 'ux500_dma_channel_program':
drivers/usb/musb/ux500_dma.c:210:51: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
  if (!ux500_dma_is_compatible(channel, packet_sz, (void *)dma_addr, len))

The problem is that ux500_dma_is_compatible() is called from the
main musb driver on the virtual address, but here we pass in a
DMA address, so the types are fundamentally different but it works
because the function only checks the alignment of the buffer and
that is the same.

We could work around this by adding another cast, but I have checked
that the buffer we get passed here is already checked before it
gets mapped, so the second check seems completely unnecessary
and removing it must be the cleanest solution.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Felipe Balbi <balbi@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/usb/musb/ux500_dma.c |    3 ---
 1 file changed, 3 deletions(-)

--- a/drivers/usb/musb/ux500_dma.c
+++ b/drivers/usb/musb/ux500_dma.c
@@ -207,9 +207,6 @@ static int ux500_dma_channel_program(str
 	BUG_ON(channel->status == MUSB_DMA_STATUS_UNKNOWN ||
 		channel->status == MUSB_DMA_STATUS_BUSY);
 
-	if (!ux500_dma_is_compatible(channel, packet_sz, (void *)dma_addr, len))
-		return false;
-
 	channel->status = MUSB_DMA_STATUS_BUSY;
 	channel->actual_len = 0;
 	ret = ux500_configure_channel(channel, packet_sz, mode, dma_addr, len);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 101/193] tty: hvc_xen: hide xen_console_remove when unused
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (99 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 100/193] usb: musb/ux500: remove duplicate check for dma_is_compatible Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 102/193] target/user: Fix cast from pointer to phys_addr_t Greg Kroah-Hartman
                   ` (98 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit e36ae3439936e13c33f5841c7c2c1a9875acbb6d upstream.

xencons_disconnect_backend() is only called from xen_console_remove(),
which is conditionally compiled, so we get a harmless warning when
CONFIG_HVC_XEN_FRONTEND is unset:

hvc/hvc_xen.c:350:12: error: 'xen_console_remove' defined but not used [-Werror=unused-function]

This moves the function down into the same #ifdef section to silence
the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/tty/hvc/hvc_xen.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/tty/hvc/hvc_xen.c
+++ b/drivers/tty/hvc/hvc_xen.c
@@ -323,6 +323,7 @@ void xen_console_resume(void)
 	}
 }
 
+#ifdef CONFIG_HVC_XEN_FRONTEND
 static void xencons_disconnect_backend(struct xencons_info *info)
 {
 	if (info->irq > 0)
@@ -363,7 +364,6 @@ static int xen_console_remove(struct xen
 	return 0;
 }
 
-#ifdef CONFIG_HVC_XEN_FRONTEND
 static int xencons_remove(struct xenbus_device *dev)
 {
 	return xen_console_remove(dev_get_drvdata(&dev->dev));

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 102/193] target/user: Fix cast from pointer to phys_addr_t
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (100 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 101/193] tty: hvc_xen: hide xen_console_remove when unused Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 103/193] driver-core: use dev argument in dev_dbg_ratelimited stub Greg Kroah-Hartman
                   ` (97 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Nicholas Bellinger

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 0633e123465b61a12a262b742bebf2a9945f7964 upstream.

The uio_mem structure has a member that is a phys_addr_t, but can
be a number of other types too. The target core driver attempts
to assign a pointer from vmalloc() to it, by casting it to
phys_addr_t, but that causes a warning when phys_addr_t is longer
than a pointer:

drivers/target/target_core_user.c: In function 'tcmu_configure_device':
drivers/target/target_core_user.c:906:22: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]

This adds another cast to uintptr_t to shut up the warning.
A nicer fix might be to have additional fields in uio_mem
for the different purposes, so we can assign a pointer directly.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/target/target_core_user.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/target/target_core_user.c
+++ b/drivers/target/target_core_user.c
@@ -900,7 +900,7 @@ static int tcmu_configure_device(struct
 	info->version = __stringify(TCMU_MAILBOX_VERSION);
 
 	info->mem[0].name = "tcm-user command & data buffer";
-	info->mem[0].addr = (phys_addr_t) udev->mb_addr;
+	info->mem[0].addr = (phys_addr_t)(uintptr_t)udev->mb_addr;
 	info->mem[0].size = TCMU_RING_SIZE;
 	info->mem[0].memtype = UIO_MEM_VIRTUAL;
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 103/193] driver-core: use dev argument in dev_dbg_ratelimited stub
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (101 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 102/193] target/user: Fix cast from pointer to phys_addr_t Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 104/193] fbdev: auo_k190x: avoid unused function warnings Greg Kroah-Hartman
                   ` (96 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Andrew Lunn, Dmitry Torokhov

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 1f62ff34a90471d1b735bac2c79e894afc7c59bc upstream.

dev_dbg_ratelimited() is a macro that ignores its first argument when DEBUG is
not set, which can lead to unused variable warnings:

ethernet/mellanox/mlxsw/pci.c: In function 'mlxsw_pci_cqe_sdq_handle':
ethernet/mellanox/mlxsw/pci.c:646:18: warning: unused variable 'pdev' [-Wunused-variable]
ethernet/mellanox/mlxsw/pci.c: In function 'mlxsw_pci_cqe_rdq_handle':
ethernet/mellanox/mlxsw/pci.c:671:18: warning: unused variable 'pdev' [-Wunused-variable]

The macro already ensures that all its other arguments are silently
ignored by the compiler without triggering a warning, through the
use of the no_printk() macro, but the dev argument is not passed into
that.

This changes the definition to use the same trick as no_printk() with
an if(0) that leads the compiler to not evaluate the side-effects but
still see that 'dev' might not be unused.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Suggested-by: Andrew Lunn <andrew@lunn.ch>
Fixes: 6f586e663e3b ("driver-core: Shut up dev_dbg_reatelimited() without DEBUG")
Reviewed-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 include/linux/device.h |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -1272,8 +1272,11 @@ do {									\
 		dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__);	\
 } while (0)
 #else
-#define dev_dbg_ratelimited(dev, fmt, ...)			\
-	no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
+#define dev_dbg_ratelimited(dev, fmt, ...)				\
+do {									\
+	if (0)								\
+		dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__);	\
+} while (0)
 #endif
 
 #ifdef VERBOSE_DEBUG

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 104/193] fbdev: auo_k190x: avoid unused function warnings
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (102 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 103/193] driver-core: use dev argument in dev_dbg_ratelimited stub Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 105/193] amd-xgbe: Fix unused suspend handlers build warning Greg Kroah-Hartman
                   ` (95 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Tomi Valkeinen

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit a8a31afad5ffa1c7de0cef1c4bc383b50f426bf8 upstream.

The auo_k190x framebuffer driver encloses the power-management
functions in #ifdef CONFIG_PM, but the auok190x_suspend/resume
functions are only really used when CONFIG_PM_SLEEP is also
set, as a frequent gcc warning shows:

drivers/video/fbdev/auo_k190x.c:859:12: warning: 'auok190x_suspend' defined but not used
drivers/video/fbdev/auo_k190x.c:899:12: warning: 'auok190x_resume' defined but not used

This changes the driver to remove the #ifdef and instead mark
the functions as __maybe_unused, which is a nicer anyway, as it
provides build testing for all the code in all configurations
and is harder to get wrong.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/video/fbdev/auo_k190x.c |   11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

--- a/drivers/video/fbdev/auo_k190x.c
+++ b/drivers/video/fbdev/auo_k190x.c
@@ -773,9 +773,7 @@ static void auok190x_recover(struct auok
 /*
  * Power-management
  */
-
-#ifdef CONFIG_PM
-static int auok190x_runtime_suspend(struct device *dev)
+static int __maybe_unused auok190x_runtime_suspend(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct fb_info *info = platform_get_drvdata(pdev);
@@ -822,7 +820,7 @@ finish:
 	return 0;
 }
 
-static int auok190x_runtime_resume(struct device *dev)
+static int __maybe_unused auok190x_runtime_resume(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct fb_info *info = platform_get_drvdata(pdev);
@@ -856,7 +854,7 @@ static int auok190x_runtime_resume(struc
 	return 0;
 }
 
-static int auok190x_suspend(struct device *dev)
+static int __maybe_unused auok190x_suspend(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct fb_info *info = platform_get_drvdata(pdev);
@@ -896,7 +894,7 @@ static int auok190x_suspend(struct devic
 	return 0;
 }
 
-static int auok190x_resume(struct device *dev)
+static int __maybe_unused auok190x_resume(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct fb_info *info = platform_get_drvdata(pdev);
@@ -933,7 +931,6 @@ static int auok190x_resume(struct device
 
 	return 0;
 }
-#endif
 
 const struct dev_pm_ops auok190x_pm = {
 	SET_RUNTIME_PM_OPS(auok190x_runtime_suspend, auok190x_runtime_resume,

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 105/193] amd-xgbe: Fix unused suspend handlers build warning
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (103 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 104/193] fbdev: auo_k190x: avoid unused function warnings Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 106/193] mtd: sh_flctl: pass FIFO as physical address Greg Kroah-Hartman
                   ` (94 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Borislav Petkov, Tom Lendacky,
	netdev, David S. Miller

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Borislav Petkov <bp@suse.de>

commit 91eefaabf102c539e6f5531e9a1e5ed46d2b41ca upstream.

Fix:

  drivers/net/ethernet/amd/xgbe/xgbe-main.c:835:12: warning: ‘xgbe_suspend’ defined
    but not used [-Wunused-function]
  drivers/net/ethernet/amd/xgbe/xgbe-main.c:855:12: warning: ‘xgbe_resume’ defined
    but not used [-Wunused-function]

I see it during randconfig builds here.

Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: netdev@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/net/ethernet/amd/xgbe/xgbe-main.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/net/ethernet/amd/xgbe/xgbe-main.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-main.c
@@ -829,7 +829,7 @@ static int xgbe_remove(struct platform_d
 	return 0;
 }
 
-#ifdef CONFIG_PM
+#ifdef CONFIG_PM_SLEEP
 static int xgbe_suspend(struct device *dev)
 {
 	struct net_device *netdev = dev_get_drvdata(dev);
@@ -868,7 +868,7 @@ static int xgbe_resume(struct device *de
 
 	return ret;
 }
-#endif /* CONFIG_PM */
+#endif /* CONFIG_PM_SLEEP */
 
 #ifdef CONFIG_ACPI
 static const struct acpi_device_id xgbe_acpi_match[] = {

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 106/193] mtd: sh_flctl: pass FIFO as physical address
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (104 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 105/193] amd-xgbe: Fix unused suspend handlers build warning Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 107/193] mtd: cfi: enforce valid geometry configuration Greg Kroah-Hartman
                   ` (93 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Brian Norris

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 1873315fb156cbc8e46f28e8b128f17ff6c31728 upstream.

By convention, the FIFO address we pass using dmaengine_slave_config
is a physical address in the form that is understood by the DMA
engine, as a dma_addr_t, phys_addr_t or resource_size_t.

The sh_flctl driver however passes a virtual __iomem address that
gets cast to dma_addr_t in the slave driver. This happens to work
on shmobile because that platform sets up an identity mapping for
its MMIO regions, but such code is not portable to other platforms,
and prevents us from ever changing the platform mapping or reusing
the driver on other architectures like ARM64 that might not have the
mapping.

We also get a warning about a type mismatch for the case that
dma_addr_t is wider than a pointer, i.e. when CONFIG_LPAE is set:

drivers/mtd/nand/sh_flctl.c: In function 'flctl_setup_dma':
drivers/mtd/nand/sh_flctl.c:163:17: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  cfg.dst_addr = (dma_addr_t)FLDTFIFO(flctl);

This changes the driver to instead pass the physical address of
the FIFO that is extracted from the MMIO resource, making the
code more portable and avoiding the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/mtd/nand/sh_flctl.c  |    5 +++--
 include/linux/mtd/sh_flctl.h |    1 +
 2 files changed, 4 insertions(+), 2 deletions(-)

--- a/drivers/mtd/nand/sh_flctl.c
+++ b/drivers/mtd/nand/sh_flctl.c
@@ -160,7 +160,7 @@ static void flctl_setup_dma(struct sh_fl
 
 	memset(&cfg, 0, sizeof(cfg));
 	cfg.direction = DMA_MEM_TO_DEV;
-	cfg.dst_addr = (dma_addr_t)FLDTFIFO(flctl);
+	cfg.dst_addr = flctl->fifo;
 	cfg.src_addr = 0;
 	ret = dmaengine_slave_config(flctl->chan_fifo0_tx, &cfg);
 	if (ret < 0)
@@ -176,7 +176,7 @@ static void flctl_setup_dma(struct sh_fl
 
 	cfg.direction = DMA_DEV_TO_MEM;
 	cfg.dst_addr = 0;
-	cfg.src_addr = (dma_addr_t)FLDTFIFO(flctl);
+	cfg.src_addr = flctl->fifo;
 	ret = dmaengine_slave_config(flctl->chan_fifo0_rx, &cfg);
 	if (ret < 0)
 		goto err;
@@ -1096,6 +1096,7 @@ static int flctl_probe(struct platform_d
 	flctl->reg = devm_ioremap_resource(&pdev->dev, res);
 	if (IS_ERR(flctl->reg))
 		return PTR_ERR(flctl->reg);
+	flctl->fifo = res->start + 0x24; /* FLDTFIFO */
 
 	irq = platform_get_irq(pdev, 0);
 	if (irq < 0) {
--- a/include/linux/mtd/sh_flctl.h
+++ b/include/linux/mtd/sh_flctl.h
@@ -148,6 +148,7 @@ struct sh_flctl {
 	struct platform_device	*pdev;
 	struct dev_pm_qos_request pm_qos;
 	void __iomem		*reg;
+	resource_size_t		fifo;
 
 	uint8_t	done_buff[2048 + 64];	/* max size 2048 + 64 */
 	int	read_bytes;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 107/193] mtd: cfi: enforce valid geometry configuration
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (105 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 106/193] mtd: sh_flctl: pass FIFO as physical address Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 108/193] fbdev: s6e8ax0: avoid unused function warnings Greg Kroah-Hartman
                   ` (92 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Brian Norris

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit f5f92b36fbbb8ac7d70ff5fa39ec2637cce3094c upstream.

MTD allows compile-time configuration of the possible CFI geometry
settings that are allowed by the kernel, but that includes a couple of
invalid configurations, where no bank width or no interleave setting
is allowed. These are then caught with a compile-time warning:

include/linux/mtd/cfi.h:76:2: warning: #warning No CONFIG_MTD_CFI_Ix selected. No NOR chip support can work.
include/linux/mtd/map.h:145:2: warning: #warning "No CONFIG_MTD_MAP_BANK_WIDTH_xx selected. No NOR chip support can work"

This is a bit annoying for randconfig tests, and can be avoided if
we change the Kconfig logic to always select the simplest configuration
when no other one is enabled.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/mtd/chips/Kconfig |    4 ++++
 1 file changed, 4 insertions(+)

--- a/drivers/mtd/chips/Kconfig
+++ b/drivers/mtd/chips/Kconfig
@@ -67,6 +67,10 @@ endchoice
 config MTD_CFI_GEOMETRY
 	bool "Specific CFI Flash geometry selection"
 	depends on MTD_CFI_ADV_OPTIONS
+	select MTD_MAP_BANK_WIDTH_1 if  !(MTD_MAP_BANK_WIDTH_2 || \
+		 MTD_MAP_BANK_WIDTH_4  || MTD_MAP_BANK_WIDTH_8 || \
+		 MTD_MAP_BANK_WIDTH_16 || MTD_MAP_BANK_WIDTH_32)
+	select MTD_CFI_I1 if !(MTD_CFI_I2 || MTD_CFI_I4 || MTD_CFI_I8)
 	help
 	  This option does not affect the code directly, but will enable
 	  some other configuration options which would allow you to reduce

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 108/193] fbdev: s6e8ax0: avoid unused function warnings
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (106 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 107/193] mtd: cfi: enforce valid geometry configuration Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 109/193] modsign: hide openssl output in silent builds Greg Kroah-Hartman
                   ` (91 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Krzysztof Kozlowski,
	Tomi Valkeinen

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit b54729b6cea7d1f46b1ed70cb7065c6bdefaa780 upstream.

The s6e8ax0 suspend/resume functions are hidden inside of an #ifdef
when CONFIG_PM is set to avoid unused function warnings, but they
call some other functions that nothing else calls, and we get warnings
about those:

drivers/video/fbdev/exynos/s6e8ax0.c:449:13: error: 's6e8ax0_sleep_in' defined but not used [-Werror=unused-function]
drivers/video/fbdev/exynos/s6e8ax0.c:485:13: error: 's6e8ax0_display_off' defined but not used [-Werror=unused-function]

This marks the PM functions as __maybe_unused so the compiler can
silently drop them when they are not referenced.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/video/fbdev/exynos/s6e8ax0.c |   13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

--- a/drivers/video/fbdev/exynos/s6e8ax0.c
+++ b/drivers/video/fbdev/exynos/s6e8ax0.c
@@ -829,8 +829,7 @@ static int s6e8ax0_probe(struct mipi_dsi
 	return 0;
 }
 
-#ifdef CONFIG_PM
-static int s6e8ax0_suspend(struct mipi_dsim_lcd_device *dsim_dev)
+static int __maybe_unused s6e8ax0_suspend(struct mipi_dsim_lcd_device *dsim_dev)
 {
 	struct s6e8ax0 *lcd = dev_get_drvdata(&dsim_dev->dev);
 
@@ -843,7 +842,7 @@ static int s6e8ax0_suspend(struct mipi_d
 	return 0;
 }
 
-static int s6e8ax0_resume(struct mipi_dsim_lcd_device *dsim_dev)
+static int __maybe_unused s6e8ax0_resume(struct mipi_dsim_lcd_device *dsim_dev)
 {
 	struct s6e8ax0 *lcd = dev_get_drvdata(&dsim_dev->dev);
 
@@ -855,10 +854,6 @@ static int s6e8ax0_resume(struct mipi_ds
 
 	return 0;
 }
-#else
-#define s6e8ax0_suspend		NULL
-#define s6e8ax0_resume		NULL
-#endif
 
 static struct mipi_dsim_lcd_driver s6e8ax0_dsim_ddi_driver = {
 	.name = "s6e8ax0",
@@ -867,8 +862,8 @@ static struct mipi_dsim_lcd_driver s6e8a
 	.power_on = s6e8ax0_power_on,
 	.set_sequence = s6e8ax0_set_sequence,
 	.probe = s6e8ax0_probe,
-	.suspend = s6e8ax0_suspend,
-	.resume = s6e8ax0_resume,
+	.suspend = IS_ENABLED(CONFIG_PM) ? s6e8ax0_suspend : NULL,
+	.resume = IS_ENABLED(CONFIG_PM) ? s6e8ax0_resume : NULL,
 };
 
 static int s6e8ax0_init(void)

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 109/193] modsign: hide openssl output in silent builds
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (107 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 108/193] fbdev: s6e8ax0: avoid unused function warnings Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 110/193] Drivers: hv: vmbus: fix build warning Greg Kroah-Hartman
                   ` (90 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, David Howells

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 5d06ee20b662a78417245714fc576cba90e6374f upstream.

When a user calls 'make -s', we can assume they don't want to
see any output except for warnings and errors, but instead
they see this for a warning free build:

 ###
 ### Now generating an X.509 key pair to be used for signing modules.
 ###
 ### If this takes a long time, you might wish to run rngd in the
 ### background to keep the supply of entropy topped up.  It
 ### needs to be run as root, and uses a hardware random
 ### number generator if one is available.
 ###
 Generating a 4096 bit RSA private key
 .................................................................................................................................................................................................................................++
 ..............................................................................................................................++
 writing new private key to 'certs/signing_key.pem'
 -----
 ###
 ### Key pair generated.
 ###

The output can confuse simple build testing scripts that just check
for an empty build log.

This patch silences all the output:
 - "echo" is changed to "@$(kecho)", which is dropped when "-s" gets
   passed
 - the openssl command itself is only printed with V=1, using the
   $(Q) macro
 - The output of openssl gets redirected to /dev/null on "-s" builds.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 certs/Makefile |   33 +++++++++++++++++++--------------
 1 file changed, 19 insertions(+), 14 deletions(-)

--- a/certs/Makefile
+++ b/certs/Makefile
@@ -36,29 +36,34 @@ ifndef CONFIG_MODULE_SIG_HASH
 $(error Could not determine digest type to use from kernel config)
 endif
 
+redirect_openssl	= 2>&1
+quiet_redirect_openssl	= 2>&1
+silent_redirect_openssl = 2>/dev/null
+
 # We do it this way rather than having a boolean option for enabling an
 # external private key, because 'make randconfig' might enable such a
 # boolean option and we unfortunately can't make it depend on !RANDCONFIG.
 ifeq ($(CONFIG_MODULE_SIG_KEY),"certs/signing_key.pem")
 $(obj)/signing_key.pem: $(obj)/x509.genkey
-	@echo "###"
-	@echo "### Now generating an X.509 key pair to be used for signing modules."
-	@echo "###"
-	@echo "### If this takes a long time, you might wish to run rngd in the"
-	@echo "### background to keep the supply of entropy topped up.  It"
-	@echo "### needs to be run as root, and uses a hardware random"
-	@echo "### number generator if one is available."
-	@echo "###"
-	openssl req -new -nodes -utf8 -$(CONFIG_MODULE_SIG_HASH) -days 36500 \
+	@$(kecho) "###"
+	@$(kecho) "### Now generating an X.509 key pair to be used for signing modules."
+	@$(kecho) "###"
+	@$(kecho) "### If this takes a long time, you might wish to run rngd in the"
+	@$(kecho) "### background to keep the supply of entropy topped up.  It"
+	@$(kecho) "### needs to be run as root, and uses a hardware random"
+	@$(kecho) "### number generator if one is available."
+	@$(kecho) "###"
+	$(Q)openssl req -new -nodes -utf8 -$(CONFIG_MODULE_SIG_HASH) -days 36500 \
 		-batch -x509 -config $(obj)/x509.genkey \
 		-outform PEM -out $(obj)/signing_key.pem \
-		-keyout $(obj)/signing_key.pem 2>&1
-	@echo "###"
-	@echo "### Key pair generated."
-	@echo "###"
+		-keyout $(obj)/signing_key.pem \
+		$($(quiet)redirect_openssl)
+	@$(kecho) "###"
+	@$(kecho) "### Key pair generated."
+	@$(kecho) "###"
 
 $(obj)/x509.genkey:
-	@echo Generating X.509 key generation config
+	@$(kecho) Generating X.509 key generation config
 	@echo  >$@ "[ req ]"
 	@echo >>$@ "default_bits = 4096"
 	@echo >>$@ "distinguished_name = req_distinguished_name"

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 110/193] Drivers: hv: vmbus: fix build warning
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (108 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 109/193] modsign: hide openssl output in silent builds Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 111/193] fbdev: sm712fb: avoid unused function warnings Greg Kroah-Hartman
                   ` (89 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Sudip Mukherjee

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Sudip Mukherjee <sudipm.mukherjee@gmail.com>

commit 9220e39b5c900c67ddcb517d52fe52d90fb5e3c8 upstream.

We were getting build warning about unused variable "tsc_msr" and
"va_tsc" while building for i386 allmodconfig.

Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/hv/hv.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

--- a/drivers/hv/hv.c
+++ b/drivers/hv/hv.c
@@ -195,9 +195,7 @@ int hv_init(void)
 {
 	int max_leaf;
 	union hv_x64_msr_hypercall_contents hypercall_msr;
-	union hv_x64_msr_hypercall_contents tsc_msr;
 	void *virtaddr = NULL;
-	void *va_tsc = NULL;
 
 	memset(hv_context.synic_event_page, 0, sizeof(void *) * NR_CPUS);
 	memset(hv_context.synic_message_page, 0,
@@ -243,6 +241,9 @@ int hv_init(void)
 
 #ifdef CONFIG_X86_64
 	if (ms_hyperv.features & HV_X64_MSR_REFERENCE_TSC_AVAILABLE) {
+		union hv_x64_msr_hypercall_contents tsc_msr;
+		void *va_tsc;
+
 		va_tsc = __vmalloc(PAGE_SIZE, GFP_KERNEL, PAGE_KERNEL);
 		if (!va_tsc)
 			goto cleanup;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 111/193] fbdev: sm712fb: avoid unused function warnings
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (109 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 110/193] Drivers: hv: vmbus: fix build warning Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 112/193] hwrng: exynos - use __maybe_unused to hide pm functions Greg Kroah-Hartman
                   ` (88 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Tomi Valkeinen

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 24ed78dc2e8b2428eccc70c3162e70d33ab448c4 upstream.

The sm712fb framebuffer driver encloses the power-management
functions in #ifdef CONFIG_PM, but the smtcfb_pci_suspend/resume
functions are only really used when CONFIG_PM_SLEEP is also
set, as a frequent gcc warning shows:

fbdev/sm712fb.c:1549:12: warning: 'smtcfb_pci_suspend' defined but not used
fbdev/sm712fb.c:1572:12: warning: 'smtcfb_pci_resume' defined but not used

The driver also avoids using the SIMPLE_DEV_PM_OPS macro when
CONFIG_PM is unset, which is redundant.

This changes the driver to remove the #ifdef and instead mark
the functions as __maybe_unused, which is a nicer anyway, as it
provides build testing for all the code in all configurations
and is harder to get wrong.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/video/fbdev/sm712fb.c |   16 +++-------------
 1 file changed, 3 insertions(+), 13 deletions(-)

--- a/drivers/video/fbdev/sm712fb.c
+++ b/drivers/video/fbdev/sm712fb.c
@@ -28,9 +28,7 @@
 #include <linux/console.h>
 #include <linux/screen_info.h>
 
-#ifdef CONFIG_PM
 #include <linux/pm.h>
-#endif
 
 #include "sm712.h"
 
@@ -1545,8 +1543,7 @@ static void smtcfb_pci_remove(struct pci
 	pci_disable_device(pdev);
 }
 
-#ifdef CONFIG_PM
-static int smtcfb_pci_suspend(struct device *device)
+static int __maybe_unused smtcfb_pci_suspend(struct device *device)
 {
 	struct pci_dev *pdev = to_pci_dev(device);
 	struct smtcfb_info *sfb;
@@ -1569,7 +1566,7 @@ static int smtcfb_pci_suspend(struct dev
 	return 0;
 }
 
-static int smtcfb_pci_resume(struct device *device)
+static int __maybe_unused smtcfb_pci_resume(struct device *device)
 {
 	struct pci_dev *pdev = to_pci_dev(device);
 	struct smtcfb_info *sfb;
@@ -1610,20 +1607,13 @@ static int smtcfb_pci_resume(struct devi
 }
 
 static SIMPLE_DEV_PM_OPS(sm7xx_pm_ops, smtcfb_pci_suspend, smtcfb_pci_resume);
-#define SM7XX_PM_OPS (&sm7xx_pm_ops)
-
-#else  /* !CONFIG_PM */
-
-#define SM7XX_PM_OPS NULL
-
-#endif /* !CONFIG_PM */
 
 static struct pci_driver smtcfb_driver = {
 	.name = "smtcfb",
 	.id_table = smtcfb_pci_table,
 	.probe = smtcfb_pci_probe,
 	.remove = smtcfb_pci_remove,
-	.driver.pm  = SM7XX_PM_OPS,
+	.driver.pm  = &sm7xx_pm_ops,
 };
 
 static int __init sm712fb_init(void)

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 112/193] hwrng: exynos - use __maybe_unused to hide pm functions
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (110 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 111/193] fbdev: sm712fb: avoid unused function warnings Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 113/193] USB: cdc_subset: only build when one driver is enabled Greg Kroah-Hartman
                   ` (87 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Krzysztof Kozlowski,
	Herbert Xu

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit b93f342da1766ef1740e6277508329356c4ea48b upstream.

The exynos random driver uses #ifdef to check for CONFIG_PM, but
then uses SIMPLE_DEV_PM_OPS, which leaves the references out when
CONFIG_PM_SLEEP is not defined, so we get a warning with
PM=y && PM_SLEEP=n:

drivers/char/hw_random/exynos-rng.c:166:12: error: 'exynos_rng_suspend' defined but not used [-Werror=unused-function]
drivers/char/hw_random/exynos-rng.c:171:12: error: 'exynos_rng_resume' defined but not used [-Werror=unused-function]

This removes the incorrect #ifdef and instead uses a __maybe_unused
annotation to let the compiler know it can silently drop
the function definition.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/char/hw_random/exynos-rng.c |   10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

--- a/drivers/char/hw_random/exynos-rng.c
+++ b/drivers/char/hw_random/exynos-rng.c
@@ -155,8 +155,7 @@ static int exynos_rng_probe(struct platf
 	return ret;
 }
 
-#ifdef CONFIG_PM
-static int exynos_rng_runtime_suspend(struct device *dev)
+static int __maybe_unused exynos_rng_runtime_suspend(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct exynos_rng *exynos_rng = platform_get_drvdata(pdev);
@@ -166,7 +165,7 @@ static int exynos_rng_runtime_suspend(st
 	return 0;
 }
 
-static int exynos_rng_runtime_resume(struct device *dev)
+static int __maybe_unused exynos_rng_runtime_resume(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct exynos_rng *exynos_rng = platform_get_drvdata(pdev);
@@ -174,12 +173,12 @@ static int exynos_rng_runtime_resume(str
 	return clk_prepare_enable(exynos_rng->clk);
 }
 
-static int exynos_rng_suspend(struct device *dev)
+static int __maybe_unused exynos_rng_suspend(struct device *dev)
 {
 	return pm_runtime_force_suspend(dev);
 }
 
-static int exynos_rng_resume(struct device *dev)
+static int __maybe_unused exynos_rng_resume(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct exynos_rng *exynos_rng = platform_get_drvdata(pdev);
@@ -191,7 +190,6 @@ static int exynos_rng_resume(struct devi
 
 	return exynos_rng_configure(exynos_rng);
 }
-#endif
 
 static const struct dev_pm_ops exynos_rng_pm_ops = {
 	SET_SYSTEM_SLEEP_PM_OPS(exynos_rng_suspend, exynos_rng_resume)

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 113/193] USB: cdc_subset: only build when one driver is enabled
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (111 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 112/193] hwrng: exynos - use __maybe_unused to hide pm functions Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 114/193] rtlwifi: fix gcc-6 indentation warning Greg Kroah-Hartman
                   ` (86 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, David S. Miller

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit f3bb23764fac042d189129d485d3a9246cb777da upstream.

This avoids a harmless randconfig warning I get when USB_NET_CDC_SUBSET
is enabled, but all of the more specific drivers are not:

drivers/net/usb/cdc_subset.c:241:2: #warning You need to configure some hardware for this driver

The current behavior is clearly intentional, giving a warning when
a user picks a configuration that won't do anything good. The only
reason for even addressing this is that I'm getting close to
eliminating all 'randconfig' warnings on ARM, and this came up
a couple of times.

My workaround is to not even build the module when none of the
configurations are enable.

Alternatively we could simply remove the #warning (nothing wrong
for compile-testing), turn it into a runtime warning, or
change the Kconfig options into a menu to hide CONFIG_USB_NET_CDC_SUBSET.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/net/usb/Kconfig  |   10 ++++++++++
 drivers/net/usb/Makefile |    2 +-
 2 files changed, 11 insertions(+), 1 deletion(-)

--- a/drivers/net/usb/Kconfig
+++ b/drivers/net/usb/Kconfig
@@ -395,6 +395,10 @@ config USB_NET_RNDIS_HOST
 	  The protocol specification is incomplete, and is controlled by
 	  (and for) Microsoft; it isn't an "Open" ecosystem or market.
 
+config USB_NET_CDC_SUBSET_ENABLE
+	tristate
+	depends on USB_NET_CDC_SUBSET
+
 config USB_NET_CDC_SUBSET
 	tristate "Simple USB Network Links (CDC Ethernet subset)"
 	depends on USB_USBNET
@@ -413,6 +417,7 @@ config USB_NET_CDC_SUBSET
 config USB_ALI_M5632
 	bool "ALi M5632 based 'USB 2.0 Data Link' cables"
 	depends on USB_NET_CDC_SUBSET
+	select USB_NET_CDC_SUBSET_ENABLE
 	help
 	  Choose this option if you're using a host-to-host cable
 	  based on this design, which supports USB 2.0 high speed.
@@ -420,6 +425,7 @@ config USB_ALI_M5632
 config USB_AN2720
 	bool "AnchorChips 2720 based cables (Xircom PGUNET, ...)"
 	depends on USB_NET_CDC_SUBSET
+	select USB_NET_CDC_SUBSET_ENABLE
 	help
 	  Choose this option if you're using a host-to-host cable
 	  based on this design.  Note that AnchorChips is now a
@@ -428,6 +434,7 @@ config USB_AN2720
 config USB_BELKIN
 	bool "eTEK based host-to-host cables (Advance, Belkin, ...)"
 	depends on USB_NET_CDC_SUBSET
+	select USB_NET_CDC_SUBSET_ENABLE
 	default y
 	help
 	  Choose this option if you're using a host-to-host cable
@@ -437,6 +444,7 @@ config USB_BELKIN
 config USB_ARMLINUX
 	bool "Embedded ARM Linux links (iPaq, ...)"
 	depends on USB_NET_CDC_SUBSET
+	select USB_NET_CDC_SUBSET_ENABLE
 	default y
 	help
 	  Choose this option to support the "usb-eth" networking driver
@@ -454,6 +462,7 @@ config USB_ARMLINUX
 config USB_EPSON2888
 	bool "Epson 2888 based firmware (DEVELOPMENT)"
 	depends on USB_NET_CDC_SUBSET
+	select USB_NET_CDC_SUBSET_ENABLE
 	help
 	  Choose this option to support the usb networking links used
 	  by some sample firmware from Epson.
@@ -461,6 +470,7 @@ config USB_EPSON2888
 config USB_KC2190
 	bool "KT Technology KC2190 based cables (InstaNet)"
 	depends on USB_NET_CDC_SUBSET
+	select USB_NET_CDC_SUBSET_ENABLE
 	help
 	  Choose this option if you're using a host-to-host cable
 	  with one of these chips.
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -23,7 +23,7 @@ obj-$(CONFIG_USB_NET_GL620A)	+= gl620a.o
 obj-$(CONFIG_USB_NET_NET1080)	+= net1080.o
 obj-$(CONFIG_USB_NET_PLUSB)	+= plusb.o
 obj-$(CONFIG_USB_NET_RNDIS_HOST)	+= rndis_host.o
-obj-$(CONFIG_USB_NET_CDC_SUBSET)	+= cdc_subset.o
+obj-$(CONFIG_USB_NET_CDC_SUBSET_ENABLE)	+= cdc_subset.o
 obj-$(CONFIG_USB_NET_ZAURUS)	+= zaurus.o
 obj-$(CONFIG_USB_NET_MCS7830)	+= mcs7830.o
 obj-$(CONFIG_USB_USBNET)	+= usbnet.o

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 114/193] rtlwifi: fix gcc-6 indentation warning
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (112 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 113/193] USB: cdc_subset: only build when one driver is enabled Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 115/193] staging: wilc1000: fix kbuild test robot error Greg Kroah-Hartman
                   ` (85 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Larry Finger, Kalle Valo

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 2acd846485549655582ee379ceb966206f91e6f8 upstream.

The rtl8821ae_dm_txpower_tracking_callback_thermalmeter function
contains a call to RT_TRACE() that is indented in a misleading
way, as pointed out by a gcc-6 warning:

drivers/net/wireless/realtek/rtlwifi/rtl8821ae/dm.c: In function 'rtl8821ae_dm_txpower_tracking_callback_thermalmeter':
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/dm.c:2491:4: error: statement is indented as if it were guarded by...
    RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
    ^~~~~~~~
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/dm.c:2488:3: note: ...this 'for' clause, but it is not
   for (p = RF90_PATH_A; p < MAX_PATH_NUM_8821A; p++)
   ^~~

It is clear from the context that the call was not meant to be
part of the loop and only the indentation is wrong, so this
removes the extra tabs.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/net/wireless/realtek/rtlwifi/rtl8821ae/dm.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/dm.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/dm.c
@@ -2488,9 +2488,9 @@ void rtl8821ae_dm_txpower_tracking_callb
 		for (p = RF90_PATH_A; p < MAX_PATH_NUM_8821A; p++)
 			rtldm->swing_idx_ofdm_base[p] = rtldm->swing_idx_ofdm[p];
 
-			RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-				 "pDM_Odm->RFCalibrateInfo.ThermalValue = %d ThermalValue= %d\n",
-				 rtldm->thermalvalue, thermal_value);
+		RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
+			 "pDM_Odm->RFCalibrateInfo.ThermalValue = %d ThermalValue= %d\n",
+			 rtldm->thermalvalue, thermal_value);
 		/*Record last Power Tracking Thermal Value*/
 		rtldm->thermalvalue = thermal_value;
 	}

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 115/193] staging: wilc1000: fix kbuild test robot error
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (113 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 114/193] rtlwifi: fix gcc-6 indentation warning Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 116/193] x86/platform/olpc: Fix resume handler build warning Greg Kroah-Hartman
                   ` (84 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, kbuild test robot, Glen Lee

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Glen Lee <glen.lee@atmel.com>

commit b22fa80cdbf4ff1056ecddb4efdcc0ede5f5f422 upstream.

This patch fixes build warning and error reported by kbuild test robot.
It is fixed by including netdevice.h.

>> drivers/staging/wilc1000/wilc_wlan_if.h:940:27: warning: 'struct net_device'
 declared inside parameter list
    int wilc_wlan_init(struct net_device *dev, wilc_wlan_inp_t *inp);
>> drivers/staging/wilc1000/wilc_wlan_if.h:940:27: warning: its scope is only
 this definition or declaration, which is probably not what you want
>> drivers/staging/wilc1000/wilc_wlan.c:1954:5: error: conflicting types for
 'wilc_wlan_init'
    int wilc_wlan_init(struct net_device *dev, wilc_wlan_inp_t *inp)

Fixes: 30135ce ("staging: wilc1000: wilc_wlan_init: add argument struct net_device")
Reported-by: kbuild test robot <fengguang.wu@intel.com>
Signed-off-by: Glen Lee <glen.lee@atmel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/staging/wilc1000/wilc_wlan_if.h |    1 +
 1 file changed, 1 insertion(+)

--- a/drivers/staging/wilc1000/wilc_wlan_if.h
+++ b/drivers/staging/wilc1000/wilc_wlan_if.h
@@ -12,6 +12,7 @@
 
 #include <linux/semaphore.h>
 #include "linux_wlan_common.h"
+#include <linux/netdevice.h>
 
 /********************************************
  *

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 116/193] x86/platform/olpc: Fix resume handler build warning
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (114 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 115/193] staging: wilc1000: fix kbuild test robot error Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 117/193] netfilter: ipvs: avoid unused variable warnings Greg Kroah-Hartman
                   ` (83 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Borislav Petkov, Linus Torvalds,
	Peter Zijlstra, Thomas Gleixner, Ingo Molnar

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Borislav Petkov <bp@suse.de>

commit 20ab6677716c7bbdcfd1cdb9aef296a0b3101f73 upstream.

Fix:

  arch/x86/platform/olpc/olpc-xo15-sci.c:199:12: warning: ‘xo15_sci_resume’
  defined but not used [-Wunused-function]
   static int xo15_sci_resume(struct device *dev)
              ^

which I see in randconfig builds here.

Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20161126142706.13602-1-bp@alien8.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/x86/platform/olpc/olpc-xo15-sci.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/arch/x86/platform/olpc/olpc-xo15-sci.c
+++ b/arch/x86/platform/olpc/olpc-xo15-sci.c
@@ -196,6 +196,7 @@ static int xo15_sci_remove(struct acpi_d
 	return 0;
 }
 
+#ifdef CONFIG_PM_SLEEP
 static int xo15_sci_resume(struct device *dev)
 {
 	/* Enable all EC events */
@@ -207,6 +208,7 @@ static int xo15_sci_resume(struct device
 
 	return 0;
 }
+#endif
 
 static SIMPLE_DEV_PM_OPS(xo15_sci_pm, NULL, xo15_sci_resume);
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 117/193] netfilter: ipvs: avoid unused variable warnings
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (115 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 116/193] x86/platform/olpc: Fix resume handler build warning Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 118/193] ipv4: ipconfig: avoid unused ic_proto_used symbol Greg Kroah-Hartman
                   ` (82 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Julian Anastasov,
	Simon Horman

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit f6ca9f46f6615c3a87529550058d1b468c0cad89 upstream.

The proc_create() and remove_proc_entry() functions do not reference
their arguments when CONFIG_PROC_FS is disabled, so we get a couple
of warnings about unused variables in IPVS:

ipvs/ip_vs_app.c:608:14: warning: unused variable 'net' [-Wunused-variable]
ipvs/ip_vs_ctl.c:3950:14: warning: unused variable 'net' [-Wunused-variable]
ipvs/ip_vs_ctl.c:3994:14: warning: unused variable 'net' [-Wunused-variable]

This removes the local variables and instead looks them up separately
for each use, which obviously avoids the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Fixes: 4c50a8ce2b63 ("netfilter: ipvs: avoid unused variable warning")
Acked-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 net/netfilter/ipvs/ip_vs_app.c |    8 ++------
 net/netfilter/ipvs/ip_vs_ctl.c |   15 ++++++---------
 2 files changed, 8 insertions(+), 15 deletions(-)

--- a/net/netfilter/ipvs/ip_vs_app.c
+++ b/net/netfilter/ipvs/ip_vs_app.c
@@ -605,17 +605,13 @@ static const struct file_operations ip_v
 
 int __net_init ip_vs_app_net_init(struct netns_ipvs *ipvs)
 {
-	struct net *net = ipvs->net;
-
 	INIT_LIST_HEAD(&ipvs->app_list);
-	proc_create("ip_vs_app", 0, net->proc_net, &ip_vs_app_fops);
+	proc_create("ip_vs_app", 0, ipvs->net->proc_net, &ip_vs_app_fops);
 	return 0;
 }
 
 void __net_exit ip_vs_app_net_cleanup(struct netns_ipvs *ipvs)
 {
-	struct net *net = ipvs->net;
-
 	unregister_ip_vs_app(ipvs, NULL /* all */);
-	remove_proc_entry("ip_vs_app", net->proc_net);
+	remove_proc_entry("ip_vs_app", ipvs->net->proc_net);
 }
--- a/net/netfilter/ipvs/ip_vs_ctl.c
+++ b/net/netfilter/ipvs/ip_vs_ctl.c
@@ -3951,7 +3951,6 @@ static struct notifier_block ip_vs_dst_n
 
 int __net_init ip_vs_control_net_init(struct netns_ipvs *ipvs)
 {
-	struct net *net = ipvs->net;
 	int i, idx;
 
 	/* Initialize rs_table */
@@ -3978,9 +3977,9 @@ int __net_init ip_vs_control_net_init(st
 
 	spin_lock_init(&ipvs->tot_stats.lock);
 
-	proc_create("ip_vs", 0, net->proc_net, &ip_vs_info_fops);
-	proc_create("ip_vs_stats", 0, net->proc_net, &ip_vs_stats_fops);
-	proc_create("ip_vs_stats_percpu", 0, net->proc_net,
+	proc_create("ip_vs", 0, ipvs->net->proc_net, &ip_vs_info_fops);
+	proc_create("ip_vs_stats", 0, ipvs->net->proc_net, &ip_vs_stats_fops);
+	proc_create("ip_vs_stats_percpu", 0, ipvs->net->proc_net,
 		    &ip_vs_stats_percpu_fops);
 
 	if (ip_vs_control_net_init_sysctl(ipvs))
@@ -3995,13 +3994,11 @@ err:
 
 void __net_exit ip_vs_control_net_cleanup(struct netns_ipvs *ipvs)
 {
-	struct net *net = ipvs->net;
-
 	ip_vs_trash_cleanup(ipvs);
 	ip_vs_control_net_cleanup_sysctl(ipvs);
-	remove_proc_entry("ip_vs_stats_percpu", net->proc_net);
-	remove_proc_entry("ip_vs_stats", net->proc_net);
-	remove_proc_entry("ip_vs", net->proc_net);
+	remove_proc_entry("ip_vs_stats_percpu", ipvs->net->proc_net);
+	remove_proc_entry("ip_vs_stats", ipvs->net->proc_net);
+	remove_proc_entry("ip_vs", ipvs->net->proc_net);
 	free_percpu(ipvs->tot_stats.cpustats);
 }
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 118/193] ipv4: ipconfig: avoid unused ic_proto_used symbol
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (116 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 117/193] netfilter: ipvs: avoid unused variable warnings Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 119/193] tc1100-wmi: fix build warning when CONFIG_PM not enabled Greg Kroah-Hartman
                   ` (81 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, David S. Miller

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 52b79e2bdf92b07b37c805c50811eaf69a33683d upstream.

When CONFIG_PROC_FS, CONFIG_IP_PNP_BOOTP, CONFIG_IP_PNP_DHCP and
CONFIG_IP_PNP_RARP are all disabled, we get a warning about the
ic_proto_used variable being unused:

net/ipv4/ipconfig.c:146:12: error: 'ic_proto_used' defined but not used [-Werror=unused-variable]

This avoids the warning, by making the definition conditional on
whether a dynamic IP configuration protocol is configured. If not,
we know that the value is always zero, so we can optimize away the
variable and all code that depends on it.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 net/ipv4/ipconfig.c |    4 ++++
 1 file changed, 4 insertions(+)

--- a/net/ipv4/ipconfig.c
+++ b/net/ipv4/ipconfig.c
@@ -152,7 +152,11 @@ static char dhcp_client_identifier[253]
 
 /* Persistent data: */
 
+#ifdef IPCONFIG_DYNAMIC
 static int ic_proto_used;			/* Protocol used, if any */
+#else
+#define ic_proto_used 0
+#endif
 static __be32 ic_nameservers[CONF_NAMESERVERS_MAX]; /* DNS Server IP addresses */
 static u8 ic_domain[64];		/* DNS (not NIS) domain name */
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 119/193] tc1100-wmi: fix build warning when CONFIG_PM not enabled
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (117 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 118/193] ipv4: ipconfig: avoid unused ic_proto_used symbol Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 120/193] tlan: avoid unused label with PCI=n Greg Kroah-Hartman
                   ` (80 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Colin Ian King, Darren Hart

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Colin Ian King <colin.king@canonical.com>

commit 75d7e7d7a8f4966cb8b1da54a1c74fb2a97ae8fc upstream.

Conditionally declare suspend_data on CONFIG_PM to avoid
the following warning when CONFIG_OM is not enabled:

drivers/platform/x86/tc1100-wmi.c:55:27: warning:
  'suspend_data' defined but not used [-Wunused-variable]

Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/platform/x86/tc1100-wmi.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/platform/x86/tc1100-wmi.c
+++ b/drivers/platform/x86/tc1100-wmi.c
@@ -52,7 +52,9 @@ struct tc1100_data {
 	u32 jogdial;
 };
 
+#ifdef CONFIG_PM
 static struct tc1100_data suspend_data;
+#endif
 
 /* --------------------------------------------------------------------------
 				Device Management

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 120/193] tlan: avoid unused label with PCI=n
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (118 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 119/193] tc1100-wmi: fix build warning when CONFIG_PM not enabled Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 121/193] drm/vmwgfx: use *_32_bits() macros Greg Kroah-Hartman
                   ` (79 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, David S. Miller

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 1e09c106a44c2b2685a77a1ef27951381c9fcd23 upstream.

While build testing with randconfig on x86, I ran into this warning
that appears to have been around forever

drivers/net/ethernet/ti/tlan.c: In function ‘tlan_probe1’:
drivers/net/ethernet/ti/tlan.c:614:1: error: label ‘err_out’ defined but not used [-Werror=unused-label]

This can be trivially avoided by just moving the label into the
existing #ifdef.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/net/ethernet/ti/tlan.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/net/ethernet/ti/tlan.c
+++ b/drivers/net/ethernet/ti/tlan.c
@@ -610,8 +610,8 @@ err_out_regions:
 #ifdef CONFIG_PCI
 	if (pdev)
 		pci_release_regions(pdev);
-#endif
 err_out:
+#endif
 	if (pdev)
 		pci_disable_device(pdev);
 	return rc;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 121/193] drm/vmwgfx: use *_32_bits() macros
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (119 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 120/193] tlan: avoid unused label with PCI=n Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 122/193] tty: cyclades: cyz_interrupt is only used for PCI Greg Kroah-Hartman
                   ` (78 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Paul Bolle, Joe Perches, Daniel Vetter

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Paul Bolle <pebolle@tiscali.nl>

commit 0e7c875d1ae9dcf4d8c6018a45e5529feaef8956 upstream.

Use the upper_32_bits() macro instead of the four line equivalent that
triggers a GCC warning on 32 bits x86:
    drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf.c: In function 'vmw_cmdbuf_header_submit':
    drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf.c:297:25: warning: right shift count >= width of type [-Wshift-count-overflow]
       val = (header->handle >> 32);
                             ^

And use the lower_32_bits() macro instead of and-ing with a 32 bits
mask.

Signed-off-by: Paul Bolle <pebolle@tiscali.nl>
Acked-by: Joe Perches <joe@perches.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1457000770-2317-1-git-send-email-pebolle@tiscali.nl
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf.c |    7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

--- a/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf.c
@@ -293,13 +293,10 @@ static int vmw_cmdbuf_header_submit(stru
 	struct vmw_cmdbuf_man *man = header->man;
 	u32 val;
 
-	if (sizeof(header->handle) > 4)
-		val = (header->handle >> 32);
-	else
-		val = 0;
+	val = upper_32_bits(header->handle);
 	vmw_write(man->dev_priv, SVGA_REG_COMMAND_HIGH, val);
 
-	val = (header->handle & 0xFFFFFFFFULL);
+	val = lower_32_bits(header->handle);
 	val |= header->cb_context & SVGA_CB_CONTEXT_MASK;
 	vmw_write(man->dev_priv, SVGA_REG_COMMAND_LOW, val);
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 122/193] tty: cyclades: cyz_interrupt is only used for PCI
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (120 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 121/193] drm/vmwgfx: use *_32_bits() macros Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 123/193] genirq/msi: Add stubs for get_cached_msi_msg/pci_write_msi_msg Greg Kroah-Hartman
                   ` (77 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 05ead49691d245f67bdd1b30cab5d9af522ac884 upstream.

When CONFIG_PCI is not set, enabling CONFIG_CYZ_INTR has no
practical effect other than generating a warning about an
unused function:

drivers/tty/cyclades.c:1184:20: warning: 'cyz_interrupt' defined but not used [-Wunused-function]
 static irqreturn_t cyz_interrupt(int irq, void *dev_id)

This adds a dependency to avoid that warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/tty/Kconfig |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/tty/Kconfig
+++ b/drivers/tty/Kconfig
@@ -226,7 +226,7 @@ config CYCLADES
 
 config CYZ_INTR
 	bool "Cyclades-Z interrupt mode operation"
-	depends on CYCLADES
+	depends on CYCLADES && PCI
 	help
 	  The Cyclades-Z family of multiport cards allows 2 (two) driver op
 	  modes: polling and interrupt. In polling mode, the driver will check

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 123/193] genirq/msi: Add stubs for get_cached_msi_msg/pci_write_msi_msg
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (121 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 122/193] tty: cyclades: cyz_interrupt is only used for PCI Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 124/193] ASoC: mediatek: add i2c dependency Greg Kroah-Hartman
                   ` (76 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Marc Zyngier,
	Alex Williamson, Bjorn Helgaas, Bart Van Assche, Thomas Gleixner

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 2f44e29cef006a4b0a4ecf7d4c5aac7d0fbb505c upstream.

A bug fix to the MSIx handling in vfio added references to functions
that may not be defined if MSI is disabled in the kernel, resulting in
this link error:

drivers/built-in.o: In function `vfio_msi_set_vector_signal':
:(.text+0x450808): undefined reference to `get_cached_msi_msg'
:(.text+0x45080c): undefined reference to `write_msi_msg'

As suggested by Alex Williamson, add stub implementations for
get_cached_msi_msg() and pci_write_msi_msg().

In case this bugfix gets backported, please note that the #ifdef
has changed over time, originally both functions were implemented
in drivers/pci/msi.c and controlled by CONFIG_PCI_MSI, while nowadays
get_cached_msi_msg() is part of the generic MSI support and can be
used without PCI.

Fixes: b8f02af096b1 ("vfio/pci: Restore MSIx message prior to enabling")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Alex Williamson <alex.williamson@redhat.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Bart Van Assche <bart.vanassche@sandisk.com>
Link: http://lkml.kernel.org/r/1413190208.4202.34.camel@ul30vt.home
Link: http://lkml.kernel.org/r/20170214215343.3307861-1-arnd@arndb.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 include/linux/msi.h |   11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

--- a/include/linux/msi.h
+++ b/include/linux/msi.h
@@ -17,7 +17,13 @@ struct msi_desc;
 struct pci_dev;
 struct platform_msi_priv_data;
 void __get_cached_msi_msg(struct msi_desc *entry, struct msi_msg *msg);
+#ifdef CONFIG_GENERIC_MSI_IRQ
 void get_cached_msi_msg(unsigned int irq, struct msi_msg *msg);
+#else
+static inline void get_cached_msi_msg(unsigned int irq, struct msi_msg *msg)
+{
+}
+#endif
 
 typedef void (*irq_write_msi_msg_t)(struct msi_desc *desc,
 				    struct msi_msg *msg);
@@ -105,18 +111,21 @@ struct msi_desc {
 
 struct pci_dev *msi_desc_to_pci_dev(struct msi_desc *desc);
 void *msi_desc_to_pci_sysdata(struct msi_desc *desc);
+void pci_write_msi_msg(unsigned int irq, struct msi_msg *msg);
 #else /* CONFIG_PCI_MSI */
 static inline void *msi_desc_to_pci_sysdata(struct msi_desc *desc)
 {
 	return NULL;
 }
+static inline void pci_write_msi_msg(unsigned int irq, struct msi_msg *msg)
+{
+}
 #endif /* CONFIG_PCI_MSI */
 
 struct msi_desc *alloc_msi_entry(struct device *dev);
 void free_msi_entry(struct msi_desc *entry);
 void __pci_read_msi_msg(struct msi_desc *entry, struct msi_msg *msg);
 void __pci_write_msi_msg(struct msi_desc *entry, struct msi_msg *msg);
-void pci_write_msi_msg(unsigned int irq, struct msi_msg *msg);
 
 u32 __pci_msix_desc_mask_irq(struct msi_desc *desc, u32 flag);
 u32 __pci_msi_desc_mask_irq(struct msi_desc *desc, u32 mask, u32 flag);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 124/193] ASoC: mediatek: add i2c dependency
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (122 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 123/193] genirq/msi: Add stubs for get_cached_msi_msg/pci_write_msi_msg Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 125/193] iio: adc: axp288: remove redundant duplicate const on axp288_adc_channels Greg Kroah-Hartman
                   ` (75 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Koro Chen, Mark Brown

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit ec3995da27e782cc407ce48101c98c19c9ce738d upstream.

The newly added mediatek drivers for mt8173 select codes that depend
on I2C, which cuases a build failure if I2C is disabled:

warning: (SND_SOC_ADAU1761_I2C && SND_SOC_ADAU1781_I2C && SND_SOC_ADAU1977_I2C && SND_SOC_RT5677 && EXTCON_MAX14577 && EXTCON_MAX77693 && EXTCON_MAX77843 && BMC150_ACCEL_I2C && BMG160_I2C) selects REGMAP_I2C which has unmet direct dependencies (I2C)
codecs/rt5645.c:3854:1: warning: data definition has no type or storage class
codecs/rt5645.c:3854:1: error: type defaults to 'int' in declaration of 'module_i2c_driver' [-Werror=implicit-int]
codecs/rt5677.c:5270:1: warning: data definition has no type or storage class
77_i2c_driver);

codecs/rt5677.c:5270:1: error: type defaults to 'int' in declaration of 'module_i2c_driver' [-Werror=implicit-int]

This adds an explicit dependency.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Koro Chen <koro.chen@mediatek.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 sound/soc/mediatek/Kconfig |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/sound/soc/mediatek/Kconfig
+++ b/sound/soc/mediatek/Kconfig
@@ -9,7 +9,7 @@ config SND_SOC_MEDIATEK
 
 config SND_SOC_MT8173_MAX98090
 	tristate "ASoC Audio driver for MT8173 with MAX98090 codec"
-	depends on SND_SOC_MEDIATEK
+	depends on SND_SOC_MEDIATEK && I2C
 	select SND_SOC_MAX98090
 	help
 	  This adds ASoC driver for Mediatek MT8173 boards
@@ -19,7 +19,7 @@ config SND_SOC_MT8173_MAX98090
 
 config SND_SOC_MT8173_RT5650_RT5676
 	tristate "ASoC Audio driver for MT8173 with RT5650 RT5676 codecs"
-	depends on SND_SOC_MEDIATEK
+	depends on SND_SOC_MEDIATEK && I2C
 	select SND_SOC_RT5645
 	select SND_SOC_RT5677
 	help

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 125/193] iio: adc: axp288: remove redundant duplicate const on axp288_adc_channels
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (123 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 124/193] ASoC: mediatek: add i2c dependency Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:25 ` [PATCH 4.4 126/193] infiniband: cxgb4: use %pR format string for printing resources Greg Kroah-Hartman
                   ` (74 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Colin Ian King, Jonathan Cameron

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Colin Ian King <colin.king@canonical.com>

commit 7ca6574a7afb669b0b4b30dd63adeb310e97e250 upstream.

duplicate const can be removed, it is redundant. Found by static
analysis using smatch.

Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/iio/adc/axp288_adc.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/iio/adc/axp288_adc.c
+++ b/drivers/iio/adc/axp288_adc.c
@@ -44,7 +44,7 @@ struct axp288_adc_info {
 	struct regmap *regmap;
 };
 
-static const struct iio_chan_spec const axp288_adc_channels[] = {
+static const struct iio_chan_spec axp288_adc_channels[] = {
 	{
 		.indexed = 1,
 		.type = IIO_TEMP,

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 126/193] infiniband: cxgb4: use %pR format string for printing resources
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (124 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 125/193] iio: adc: axp288: remove redundant duplicate const on axp288_adc_channels Greg Kroah-Hartman
@ 2018-02-23 18:25 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 127/193] [media] b2c2: flexcop: avoid unused function warnings Greg Kroah-Hartman
                   ` (73 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Steve Wise, Doug Ledford

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 3021376d6d12dd1be8a0a13c16dae8badb7766fd upstream.

The cxgb4 prints an MMIO resource using the "0x%x" and "%p" format
strings on the length and start, respective, but that
triggers a compiler warning when using a 64-bit resource_size_t
on a 32-bit architecture:

drivers/infiniband/hw/cxgb4/device.c: In function 'c4iw_rdev_open':
drivers/infiniband/hw/cxgb4/device.c:807:7: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
       (void *)pci_resource_start(rdev->lldi.pdev, 2),

This changes the format string to use %pR instead, which pretty-prints
the resource, avoids the warning and is shorter.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/infiniband/hw/cxgb4/device.c |    5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

--- a/drivers/infiniband/hw/cxgb4/device.c
+++ b/drivers/infiniband/hw/cxgb4/device.c
@@ -809,10 +809,9 @@ static int c4iw_rdev_open(struct c4iw_rd
 	     rdev->lldi.vr->qp.size,
 	     rdev->lldi.vr->cq.start,
 	     rdev->lldi.vr->cq.size);
-	PDBG("udb len 0x%x udb base %p db_reg %p gts_reg %p "
+	PDBG("udb %pR db_reg %p gts_reg %p "
 	     "qpmask 0x%x cqmask 0x%x\n",
-	     (unsigned)pci_resource_len(rdev->lldi.pdev, 2),
-	     (void *)pci_resource_start(rdev->lldi.pdev, 2),
+		&rdev->lldi.pdev->resource[2],
 	     rdev->lldi.db_reg, rdev->lldi.gts_reg,
 	     rdev->qpmask, rdev->cqmask);
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 127/193] [media] b2c2: flexcop: avoid unused function warnings
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (125 preceding siblings ...)
  2018-02-23 18:25 ` [PATCH 4.4 126/193] infiniband: cxgb4: use %pR format string for printing resources Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 128/193] i2c: remove __init from i2c_register_board_info() Greg Kroah-Hartman
                   ` (72 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Mauro Carvalho Chehab

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 733d0def3ebdd1d088330d904149af21fa4b9ae2 upstream.

The flexcop driver has two functions that are normally used, except
when multiple frontend drivers are disabled:

drivers/media/common/b2c2/flexcop-fe-tuner.c:42:12: warning: 'flexcop_set_voltage' defined but not used [-Wunused-function]
drivers/media/common/b2c2/flexcop-fe-tuner.c:71:12: warning: 'flexcop_sleep' defined but not used [-Wunused-function]

This avoids the build warning by updating the #ifdef for flexcop_set_voltage
to the exact condition under which it is used. For flexcop_sleep, the
condition is rather complex, so I resort to marking it as __maybe_unused,
so the compiler can silently drop it.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/media/common/b2c2/flexcop-fe-tuner.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/media/common/b2c2/flexcop-fe-tuner.c
+++ b/drivers/media/common/b2c2/flexcop-fe-tuner.c
@@ -38,7 +38,7 @@ static int flexcop_fe_request_firmware(s
 #endif
 
 /* lnb control */
-#if FE_SUPPORTED(MT312) || FE_SUPPORTED(STV0299)
+#if (FE_SUPPORTED(MT312) || FE_SUPPORTED(STV0299)) && FE_SUPPORTED(PLL)
 static int flexcop_set_voltage(struct dvb_frontend *fe,
 			       enum fe_sec_voltage voltage)
 {
@@ -68,7 +68,7 @@ static int flexcop_set_voltage(struct dv
 #endif
 
 #if FE_SUPPORTED(S5H1420) || FE_SUPPORTED(STV0299) || FE_SUPPORTED(MT312)
-static int flexcop_sleep(struct dvb_frontend* fe)
+static int __maybe_unused flexcop_sleep(struct dvb_frontend* fe)
 {
 	struct flexcop_device *fc = fe->dvb->priv;
 	if (fc->fe_sleep)

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 128/193] i2c: remove __init from i2c_register_board_info()
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (126 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 127/193] [media] b2c2: flexcop: avoid unused function warnings Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 129/193] staging: unisys: visorinput depends on INPUT Greg Kroah-Hartman
                   ` (71 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Luis R. Rodriguez, Wolfram Sang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Luis R. Rodriguez <mcgrof@kernel.org>

commit 5abe9b26847c65a698f38744a52635b287514294 upstream.

As of next-20160607 with allyesconfig we get this linker failure:

  MODPOST vmlinux.o
WARNING: vmlinux.o(.text+0x21bc0d): Section mismatch in reference from
the function intel_scu_devices_create() to the function
.init.text:i2c_register_board_info()

This is caused by the fact that intel_scu_devices_create() calls
i2c_register_board_info() and intel_scu_devices_create() is not
annotated with __init. This typically involves manual code
inspection and if one is certain this is correct we would
just peg intel_scu_devices_create() with a __ref annotation.

In this case this would be wrong though as the
intel_scu_devices_create() call is exported, and used in
the ipc_probe() on drivers/platform/x86/intel_scu_ipc.c.
The issue is that even though builtin_pci_driver(ipc_driver)
is used this just exposes the probe routine, which can occur
at any point in time if this bus supports hotplug. A race
can happen between kernel_init_freeable() that calls the init
calls (in this case registeres the intel_scu_ipc.c driver, and
later free_initmem(), which would free the i2c_register_board_info().
If a probe happens later in boot i2c_register_board_info() would
not be present and we should get a page fault.

Signed-off-by: Luis R. Rodriguez <mcgrof@kernel.org>
[wsa: made function declaration a one-liner]
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/i2c/i2c-boardinfo.c |    4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

--- a/drivers/i2c/i2c-boardinfo.c
+++ b/drivers/i2c/i2c-boardinfo.c
@@ -56,9 +56,7 @@ EXPORT_SYMBOL_GPL(__i2c_first_dynamic_bu
  * The board info passed can safely be __initdata, but be careful of embedded
  * pointers (for platform_data, functions, etc) since that won't be copied.
  */
-int __init
-i2c_register_board_info(int busnum,
-	struct i2c_board_info const *info, unsigned len)
+int i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsigned len)
 {
 	int status;
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 129/193] staging: unisys: visorinput depends on INPUT
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (127 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 128/193] i2c: remove __init from i2c_register_board_info() Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 130/193] [media] tc358743: fix register i2c_rd/wr functions Greg Kroah-Hartman
                   ` (70 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Randy Dunlap

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Randy Dunlap <rdunlap@infradead.org>

commit 82ddecfe8de54331bafe2d0ff526739fd0980190 upstream.

Fix build errors by limiting UNISYS_VISORINPUT to the INPUT kconfig
setting.

drivers/built-in.o: In function `visorinput_remove':
visorinput.c:(.text+0x20802e): undefined reference to `input_unregister_device'
drivers/built-in.o: In function `visorinput_probe':
visorinput.c:(.text+0x208177): undefined reference to `input_allocate_device'
visorinput.c:(.text+0x208241): undefined reference to `input_register_device'
visorinput.c:(.text+0x20824d): undefined reference to `input_free_device'
visorinput.c:(.text+0x208286): undefined reference to `input_allocate_device'
visorinput.c:(.text+0x208302): undefined reference to `input_set_abs_params'
visorinput.c:(.text+0x20831a): undefined reference to `input_set_abs_params'
visorinput.c:(.text+0x20833f): undefined reference to `input_register_device'
visorinput.c:(.text+0x20834b): undefined reference to `input_free_device'
visorinput.c:(.text+0x20835f): undefined reference to `input_set_capability'
drivers/built-in.o: In function `visorinput_channel_interrupt':
visorinput.c:(.text+0x20851e): undefined reference to `input_event'
visorinput.c:(.text+0x20862c): undefined reference to `input_event'
drivers/built-in.o: In function `input_report_key':
visorinput.c:(.text+0x207fd1): undefined reference to `input_event'
drivers/built-in.o: In function `input_sync':
visorinput.c:(.text+0x207fdc): undefined reference to `input_event'

Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/staging/unisys/visorinput/Kconfig |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/staging/unisys/visorinput/Kconfig
+++ b/drivers/staging/unisys/visorinput/Kconfig
@@ -4,7 +4,7 @@
 
 config UNISYS_VISORINPUT
 	tristate "Unisys visorinput driver"
-	depends on UNISYSSPAR && UNISYS_VISORBUS && FB
+	depends on UNISYSSPAR && UNISYS_VISORBUS && FB && INPUT
 	---help---
 	If you say Y here, you will enable the Unisys visorinput driver.
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 130/193] [media] tc358743: fix register i2c_rd/wr functions
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (128 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 129/193] staging: unisys: visorinput depends on INPUT Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-03-06  3:17   ` Ben Hutchings
  2018-02-23 18:26 ` [PATCH 4.4 131/193] drm/nouveau: hide gcc-4.9 -Wmaybe-uninitialized Greg Kroah-Hartman
                   ` (69 subsequent siblings)
  199 siblings, 1 reply; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Hans Verkuil,
	Mauro Carvalho Chehab

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 3538aa6ecfb2dd727a40f9ebbbf25a0c2afe6226 upstream.

While testing with CONFIG_UBSAN, I got this warning:

drivers/media/i2c/tc358743.c: In function 'tc358743_probe':
drivers/media/i2c/tc358743.c:1930:1: error: the frame size of 2480 bytes is larger than 2048 bytes [-Werror=frame-larger-than=]

The problem is that the i2c_rd8/wr8/rd16/... functions in this driver pass
a pointer to a local variable into a common function, and each call to one
of them adds another variable plus redzone to the stack.

I also noticed that the way this is done is broken on big-endian machines,
as we copy the registers in CPU byte order.

To address both those problems, I'm adding two helper functions for reading
a register of up to 32 bits with correct endianess and change all other
functions to use that instead. Just to be sure we don't get the problem
back with changed optimizations in gcc, I'm also marking the new functions
as 'noinline', although my tests with gcc-7 don't require that.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/media/i2c/tc358743.c |   46 +++++++++++++++++++++++--------------------
 1 file changed, 25 insertions(+), 21 deletions(-)

--- a/drivers/media/i2c/tc358743.c
+++ b/drivers/media/i2c/tc358743.c
@@ -197,57 +197,61 @@ static void i2c_wr(struct v4l2_subdev *s
 	}
 }
 
-static u8 i2c_rd8(struct v4l2_subdev *sd, u16 reg)
+static noinline u32 i2c_rdreg(struct v4l2_subdev *sd, u16 reg, u32 n)
 {
-	u8 val;
+	__le32 val = 0;
 
-	i2c_rd(sd, reg, &val, 1);
+	i2c_rd(sd, reg, (u8 __force *)&val, n);
 
-	return val;
+	return le32_to_cpu(val);
+}
+
+static noinline void i2c_wrreg(struct v4l2_subdev *sd, u16 reg, u32 val, u32 n)
+{
+	__le32 raw = cpu_to_le32(val);
+
+	i2c_wr(sd, reg, (u8 __force *)&raw, n);
+}
+
+static u8 i2c_rd8(struct v4l2_subdev *sd, u16 reg)
+{
+	return i2c_rdreg(sd, reg, 1);
 }
 
 static void i2c_wr8(struct v4l2_subdev *sd, u16 reg, u8 val)
 {
-	i2c_wr(sd, reg, &val, 1);
+	i2c_wrreg(sd, reg, val, 1);
 }
 
 static void i2c_wr8_and_or(struct v4l2_subdev *sd, u16 reg,
 		u8 mask, u8 val)
 {
-	i2c_wr8(sd, reg, (i2c_rd8(sd, reg) & mask) | val);
+	i2c_wrreg(sd, reg, (i2c_rdreg(sd, reg, 2) & mask) | val, 2);
 }
 
 static u16 i2c_rd16(struct v4l2_subdev *sd, u16 reg)
 {
-	u16 val;
-
-	i2c_rd(sd, reg, (u8 *)&val, 2);
-
-	return val;
+	return i2c_rdreg(sd, reg, 2);
 }
 
 static void i2c_wr16(struct v4l2_subdev *sd, u16 reg, u16 val)
 {
-	i2c_wr(sd, reg, (u8 *)&val, 2);
+	i2c_wrreg(sd, reg, val, 2);
 }
 
 static void i2c_wr16_and_or(struct v4l2_subdev *sd, u16 reg, u16 mask, u16 val)
 {
-	i2c_wr16(sd, reg, (i2c_rd16(sd, reg) & mask) | val);
+	i2c_wrreg(sd, reg, (i2c_rdreg(sd, reg, 2) & mask) | val, 2);
 }
 
 static u32 i2c_rd32(struct v4l2_subdev *sd, u16 reg)
 {
-	u32 val;
-
-	i2c_rd(sd, reg, (u8 *)&val, 4);
-
-	return val;
+	return i2c_rdreg(sd, reg, 4);
 }
 
 static void i2c_wr32(struct v4l2_subdev *sd, u16 reg, u32 val)
 {
-	i2c_wr(sd, reg, (u8 *)&val, 4);
+	i2c_wrreg(sd, reg, val, 4);
 }
 
 /* --------------- STATUS --------------- */
@@ -1240,7 +1244,7 @@ static int tc358743_g_register(struct v4
 
 	reg->size = tc358743_get_reg_size(reg->reg);
 
-	i2c_rd(sd, reg->reg, (u8 *)&reg->val, reg->size);
+	reg->val = i2c_rdreg(sd, reg->reg, reg->size);
 
 	return 0;
 }
@@ -1266,7 +1270,7 @@ static int tc358743_s_register(struct v4
 	    reg->reg == BCAPS)
 		return 0;
 
-	i2c_wr(sd, (u16)reg->reg, (u8 *)&reg->val,
+	i2c_wrreg(sd, (u16)reg->reg, reg->val,
 			tc358743_get_reg_size(reg->reg));
 
 	return 0;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 131/193] drm/nouveau: hide gcc-4.9 -Wmaybe-uninitialized
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (129 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 130/193] [media] tc358743: fix register i2c_rd/wr functions Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 132/193] Input: tca8418_keypad - hide gcc-4.9 -Wmaybe-uninitialized warning Greg Kroah-Hartman
                   ` (68 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Karol Herbst, Ben Skeggs

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit b74c0a9969f25217a5e5bbcac56a11bee16718d3 upstream.

gcc-4.9 notices that the validate_init() function returns unintialized
data when called with a zero 'nr_buffers' argument, when called with the
-Wmaybe-uninitialized flag:

drivers/gpu/drm/nouveau/nouveau_gem.c: In function ‘validate_init.isra.6’:
drivers/gpu/drm/nouveau/nouveau_gem.c:457:5: error: ‘ret’ may be used uninitialized in this function [-Werror=maybe-uninitialized]

However, the only caller of this function always passes a nonzero
argument, and gcc-6 is clever enough to take this into account and
not warn about it any more.

Adding an explicit initialization to -EINVAL here is correct even if
the caller changed, and it avoids the warning on gcc-4.9 as well.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-By: Karol Herbst <karolherbst@gmail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpu/drm/nouveau/nouveau_gem.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/gpu/drm/nouveau/nouveau_gem.c
+++ b/drivers/gpu/drm/nouveau/nouveau_gem.c
@@ -370,7 +370,7 @@ validate_init(struct nouveau_channel *ch
 	struct nouveau_cli *cli = nouveau_cli(file_priv);
 	struct drm_device *dev = chan->drm->dev;
 	int trycnt = 0;
-	int ret, i;
+	int ret = -EINVAL, i;
 	struct nouveau_bo *res_bo = NULL;
 	LIST_HEAD(gart_list);
 	LIST_HEAD(vram_list);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 132/193] Input: tca8418_keypad - hide gcc-4.9 -Wmaybe-uninitialized warning
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (130 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 131/193] drm/nouveau: hide gcc-4.9 -Wmaybe-uninitialized Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 133/193] KVM: add X86_LOCAL_APIC dependency Greg Kroah-Hartman
                   ` (67 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Dmitry Torokhov

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit ea4348c8462a20e8b1b6455a7145d2b86f8a49b6 upstream.

Older versions of gcc warn about the tca8418_irq_handler function
as they can't keep track of the variable assignment inside of the
loop when using the -Wmaybe-unintialized flag:

drivers/input/keyboard/tca8418_keypad.c: In function ‘tca8418_irq_handler’:
drivers/input/keyboard/tca8418_keypad.c:172:9: error: ‘reg’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
drivers/input/keyboard/tca8418_keypad.c:165:5: note: ‘reg’ was declared here

This is fixed in gcc-6, but it's possible to rearrange the code
in a way that avoids the warning on older compilers as well.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/input/keyboard/tca8418_keypad.c |   21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

--- a/drivers/input/keyboard/tca8418_keypad.c
+++ b/drivers/input/keyboard/tca8418_keypad.c
@@ -164,11 +164,18 @@ static void tca8418_read_keypad(struct t
 	int error, col, row;
 	u8 reg, state, code;
 
-	/* Initial read of the key event FIFO */
-	error = tca8418_read_byte(keypad_data, REG_KEY_EVENT_A, &reg);
+	do {
+		error = tca8418_read_byte(keypad_data, REG_KEY_EVENT_A, &reg);
+		if (error < 0) {
+			dev_err(&keypad_data->client->dev,
+				"unable to read REG_KEY_EVENT_A\n");
+			break;
+		}
+
+		/* Assume that key code 0 signifies empty FIFO */
+		if (reg <= 0)
+			break;
 
-	/* Assume that key code 0 signifies empty FIFO */
-	while (error >= 0 && reg > 0) {
 		state = reg & KEY_EVENT_VALUE;
 		code  = reg & KEY_EVENT_CODE;
 
@@ -184,11 +191,7 @@ static void tca8418_read_keypad(struct t
 
 		/* Read for next loop */
 		error = tca8418_read_byte(keypad_data, REG_KEY_EVENT_A, &reg);
-	}
-
-	if (error < 0)
-		dev_err(&keypad_data->client->dev,
-			"unable to read REG_KEY_EVENT_A\n");
+	} while (1);
 
 	input_sync(input);
 }

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 133/193] KVM: add X86_LOCAL_APIC dependency
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (131 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 132/193] Input: tca8418_keypad - hide gcc-4.9 -Wmaybe-uninitialized warning Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 134/193] [media] go7007: add MEDIA_CAMERA_SUPPORT dependency Greg Kroah-Hartman
                   ` (66 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Radim Krčmář

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit e42eef4ba38806b18c4a74f0c276fb2e0b548173 upstream.

The rework of the posted interrupt handling broke building without
support for the local APIC:

ERROR: "boot_cpu_physical_apicid" [arch/x86/kvm/kvm-intel.ko] undefined!

That configuration is probably not particularly useful anyway, so
we can avoid the randconfig failures by adding a Kconfig dependency.

Fixes: 8b306e2f3c41 ("KVM: VMX: avoid double list add with VT-d posted interrupts")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/x86/kvm/Kconfig |    1 +
 1 file changed, 1 insertion(+)

--- a/arch/x86/kvm/Kconfig
+++ b/arch/x86/kvm/Kconfig
@@ -23,6 +23,7 @@ config KVM
 	depends on HIGH_RES_TIMERS
 	# for TASKSTATS/TASK_DELAY_ACCT:
 	depends on NET && MULTIUSER
+	depends on X86_LOCAL_APIC
 	select PREEMPT_NOTIFIERS
 	select MMU_NOTIFIER
 	select ANON_INODES

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 134/193] [media] go7007: add MEDIA_CAMERA_SUPPORT dependency
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (132 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 133/193] KVM: add X86_LOCAL_APIC dependency Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 135/193] [media] em28xx: only use mt9v011 if camera support is enabled Greg Kroah-Hartman
                   ` (65 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Mauro Carvalho Chehab

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit fa6317eedd6341f2144ed1097706d8c34f18b6e4 upstream.

If MEDIA_SUBDRV_AUTOSELECT and VIDEO_GO7007 are both set, we
automatically select VIDEO_OV7640, but that depends on MEDIA_CAMERA_SUPPORT,
so we get a Kconfig warning if that is disabled:

warning: (VIDEO_GO7007) selects VIDEO_OV7640 which has unmet direct dependencies (MEDIA_SUPPORT && I2C && VIDEO_V4L2 && MEDIA_CAMERA_SUPPORT)

This adds another dependency so we don't accidentally select
it when it is unavailable.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/media/usb/go7007/Kconfig |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/media/usb/go7007/Kconfig
+++ b/drivers/media/usb/go7007/Kconfig
@@ -11,7 +11,7 @@ config VIDEO_GO7007
 	select VIDEO_TW2804 if MEDIA_SUBDRV_AUTOSELECT
 	select VIDEO_TW9903 if MEDIA_SUBDRV_AUTOSELECT
 	select VIDEO_TW9906 if MEDIA_SUBDRV_AUTOSELECT
-	select VIDEO_OV7640 if MEDIA_SUBDRV_AUTOSELECT
+	select VIDEO_OV7640 if MEDIA_SUBDRV_AUTOSELECT && MEDIA_CAMERA_SUPPORT
 	select VIDEO_UDA1342 if MEDIA_SUBDRV_AUTOSELECT
 	---help---
 	  This is a video4linux driver for the WIS GO7007 MPEG

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 135/193] [media] em28xx: only use mt9v011 if camera support is enabled
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (133 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 134/193] [media] go7007: add MEDIA_CAMERA_SUPPORT dependency Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 136/193] ISDN: eicon: reduce stack size of sig_ind function Greg Kroah-Hartman
                   ` (64 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Mauro Carvalho Chehab

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 190b23b4eb997767afad186bd8c96badceabf39e upstream.

In randconfig builds that select VIDEO_EM28XX_V4L2 and
MEDIA_SUBDRV_AUTOSELECT, but not MEDIA_CAMERA_SUPPORT, we get
a Kconfig warning:

 warning: (VIDEO_EM28XX_V4L2) selects VIDEO_MT9V011 which has unmet direct dependencies (MEDIA_SUPPORT && I2C && VIDEO_V4L2 && MEDIA_CAMERA_SUPPORT)

This avoids the warning by making that 'select' conditional on
MEDIA_CAMERA_SUPPORT. Alternatively we could mark EM28XX as
'depends on MEDIA_CAMERA_SUPPORT', but it does not seem to
have any real dependency on that itself.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/media/usb/em28xx/Kconfig |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/media/usb/em28xx/Kconfig
+++ b/drivers/media/usb/em28xx/Kconfig
@@ -11,7 +11,7 @@ config VIDEO_EM28XX_V4L2
 	select VIDEO_SAA711X if MEDIA_SUBDRV_AUTOSELECT
 	select VIDEO_TVP5150 if MEDIA_SUBDRV_AUTOSELECT
 	select VIDEO_MSP3400 if MEDIA_SUBDRV_AUTOSELECT
-	select VIDEO_MT9V011 if MEDIA_SUBDRV_AUTOSELECT
+	select VIDEO_MT9V011 if MEDIA_SUBDRV_AUTOSELECT && MEDIA_CAMERA_SUPPORT
 
 	---help---
 	  This is a video4linux driver for Empia 28xx based TV cards.

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 136/193] ISDN: eicon: reduce stack size of sig_ind function
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (134 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 135/193] [media] em28xx: only use mt9v011 if camera support is enabled Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 137/193] ASoC: rockchip: use __maybe_unused to hide st_irq_syscfg_resume Greg Kroah-Hartman
                   ` (63 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, David S. Miller

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 27d807180ae0a9e50d90adf9b22573c21be904c2 upstream.

I noticed that this function uses a lot of kernel stack when the
"latent entropy" plugin is enabled:

drivers/isdn/hardware/eicon/message.c: In function 'sig_ind':
drivers/isdn/hardware/eicon/message.c:6113:1: error: the frame size of 1168 bytes is larger than 1152 bytes [-Werror=frame-larger-than=]

We currently don't warn about this, as we raise the warning limit
to 2048 bytes in mainline, but I'd like to lower that limit again
in the future, and this function can easily be changed to be more
efficient and avoid that warning, by making some of its local
variables 'const'.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/isdn/hardware/eicon/message.c |   16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

--- a/drivers/isdn/hardware/eicon/message.c
+++ b/drivers/isdn/hardware/eicon/message.c
@@ -147,7 +147,7 @@ static word plci_remove_check(PLCI *);
 static void listen_check(DIVA_CAPI_ADAPTER *);
 static byte AddInfo(byte **, byte **, byte *, byte *);
 static byte getChannel(API_PARSE *);
-static void IndParse(PLCI *, word *, byte **, byte);
+static void IndParse(PLCI *, const word *, byte **, byte);
 static byte ie_compare(byte *, byte *);
 static word find_cip(DIVA_CAPI_ADAPTER *, byte *, byte *);
 static word CPN_filter_ok(byte *cpn, DIVA_CAPI_ADAPTER *, word);
@@ -4860,7 +4860,7 @@ static void sig_ind(PLCI *plci)
 	/* included before the ESC_MSGTYPE and MAXPARMSIDS has to be incremented */
 	/* SMSG is situated at the end because its 0 (for compatibility reasons */
 	/* (see Info_Mask Bit 4, first IE. then the message type)           */
-	word parms_id[] =
+	static const word parms_id[] =
 		{MAXPARMSIDS, CPN, 0xff, DSA, OSA, BC, LLC, HLC, ESC_CAUSE, DSP, DT, CHA,
 		 UUI, CONG_RR, CONG_RNR, ESC_CHI, KEY, CHI, CAU, ESC_LAW,
 		 RDN, RDX, CONN_NR, RIN, NI, CAI, ESC_CR,
@@ -4868,12 +4868,12 @@ static void sig_ind(PLCI *plci)
 	/* 14 FTY repl by ESC_CHI */
 	/* 18 PI  repl by ESC_LAW */
 	/* removed OAD changed to 0xff for future use, OAD is multiIE now */
-	word multi_fac_id[] = {1, FTY};
-	word multi_pi_id[]  = {1, PI};
-	word multi_CiPN_id[]  = {1, OAD};
-	word multi_ssext_id[]  = {1, ESC_SSEXT};
+	static const word multi_fac_id[] = {1, FTY};
+	static const word multi_pi_id[]  = {1, PI};
+	static const word multi_CiPN_id[]  = {1, OAD};
+	static const word multi_ssext_id[]  = {1, ESC_SSEXT};
 
-	word multi_vswitch_id[]  = {1, ESC_VSWITCH};
+	static const word multi_vswitch_id[]  = {1, ESC_VSWITCH};
 
 	byte *cau;
 	word ncci;
@@ -8926,7 +8926,7 @@ static void listen_check(DIVA_CAPI_ADAPT
 /* functions for all parameters sent in INDs                        */
 /*------------------------------------------------------------------*/
 
-static void IndParse(PLCI *plci, word *parms_id, byte **parms, byte multiIEsize)
+static void IndParse(PLCI *plci, const word *parms_id, byte **parms, byte multiIEsize)
 {
 	word ploc;            /* points to current location within packet */
 	byte w;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 137/193] ASoC: rockchip: use __maybe_unused to hide st_irq_syscfg_resume
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (135 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 136/193] ISDN: eicon: reduce stack size of sig_ind function Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 138/193] serial: 8250_mid: fix broken DMA dependency Greg Kroah-Hartman
                   ` (62 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Mark Brown

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit d8fc2198aab117a4bc16ee305caef19c4c7e7f5c upstream.

The rockchip spdif driver uses SIMPLE_DEV_PM_OPS to conditionally
set its power management functions, but we get a warning
about rk_spdif_runtime_resume being unused when CONFIG_PM is not
set:

sound/soc/rockchip/rockchip_spdif.c:67:12: error: 'rk_spdif_runtime_resume' defined but not used [-Werror=unused-function]

This adds a __maybe_unused annotation so the compiler knows
it can silently drop it instead of warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 sound/soc/rockchip/rockchip_spdif.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/sound/soc/rockchip/rockchip_spdif.c
+++ b/sound/soc/rockchip/rockchip_spdif.c
@@ -54,7 +54,7 @@ static const struct of_device_id rk_spdi
 };
 MODULE_DEVICE_TABLE(of, rk_spdif_match);
 
-static int rk_spdif_runtime_suspend(struct device *dev)
+static int __maybe_unused rk_spdif_runtime_suspend(struct device *dev)
 {
 	struct rk_spdif_dev *spdif = dev_get_drvdata(dev);
 
@@ -64,7 +64,7 @@ static int rk_spdif_runtime_suspend(stru
 	return 0;
 }
 
-static int rk_spdif_runtime_resume(struct device *dev)
+static int __maybe_unused rk_spdif_runtime_resume(struct device *dev)
 {
 	struct rk_spdif_dev *spdif = dev_get_drvdata(dev);
 	int ret;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 138/193] serial: 8250_mid: fix broken DMA dependency
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (136 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 137/193] ASoC: rockchip: use __maybe_unused to hide st_irq_syscfg_resume Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 139/193] drm/gma500: Sanity-check pipe index Greg Kroah-Hartman
                   ` (61 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, kbuild test robot, Heikki Krogerus

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Heikki Krogerus <heikki.krogerus@linux.intel.com>

commit 0ff4230584320b2153752ba54e2e8edbd6addf2c upstream.

In order to enable HSU DMA PCI driver, the HSU DMA Engine
must be enabled. This add a check for that.

Reported-by: kbuild test robot <fengguang.wu@intel.com>
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/tty/serial/8250/Kconfig |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/tty/serial/8250/Kconfig
+++ b/drivers/tty/serial/8250/Kconfig
@@ -372,7 +372,7 @@ config SERIAL_8250_MID
 	tristate "Support for serial ports on Intel MID platforms"
 	depends on SERIAL_8250 && PCI
 	select HSU_DMA if SERIAL_8250_DMA
-	select HSU_DMA_PCI if X86_INTEL_MID
+	select HSU_DMA_PCI if (HSU_DMA && X86_INTEL_MID)
 	select RATIONAL
 	help
 	  Selecting this option will enable handling of the extra features

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 139/193] drm/gma500: Sanity-check pipe index
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (137 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 138/193] serial: 8250_mid: fix broken DMA dependency Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 140/193] [media] hdpvr: hide unused variable Greg Kroah-Hartman
                   ` (60 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Patrik Jakobsson, Thierry Reding,
	Boris Brezillon, Daniel Vetter

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Thierry Reding <treding@nvidia.com>

commit 4f250706211cdb949f7580d4fe4dd1fd646de693 upstream.

If the DSI output isn't connected, then mdfld_dsi_encoder_get_pipe()
will return -1. The mdfld_dsi_dp_mode_set() function doesn't properly
check for this condition and causes the following compiler warnings:

	  CC      drivers/gpu/drm/gma500/mdfld_dsi_dpi.o
	drivers/gpu/drm/gma500/mdfld_dsi_dpi.c: In function ‘mdfld_dsi_dpi_mode_set’:
	drivers/gpu/drm/gma500/mdfld_dsi_dpi.c:828:35: warning: array subscript is below array bounds [-Warray-bounds]
	  u32 pipeconf = dev_priv->pipeconf[pipe];
	                                   ^
	drivers/gpu/drm/gma500/mdfld_dsi_dpi.c:829:33: warning: array subscript is below array bounds [-Warray-bounds]
	  u32 dspcntr = dev_priv->dspcntr[pipe];
	                                 ^

Fix this by checking for a valid pipe before indexing the pipeconf and
dspcntr arrays.

Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Reviewed-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1450178476-26284-2-git-send-email-boris.brezillon@free-electrons.com
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpu/drm/gma500/mdfld_dsi_dpi.c |   10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

--- a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c
+++ b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c
@@ -821,14 +821,18 @@ void mdfld_dsi_dpi_mode_set(struct drm_e
 	struct drm_device *dev = dsi_config->dev;
 	struct drm_psb_private *dev_priv = dev->dev_private;
 	int pipe = mdfld_dsi_encoder_get_pipe(dsi_encoder);
-
 	u32 pipeconf_reg = PIPEACONF;
 	u32 dspcntr_reg = DSPACNTR;
+	u32 pipeconf, dspcntr;
 
-	u32 pipeconf = dev_priv->pipeconf[pipe];
-	u32 dspcntr = dev_priv->dspcntr[pipe];
 	u32 mipi = MIPI_PORT_EN | PASS_FROM_SPHY_TO_AFE | SEL_FLOPPED_HSTX;
 
+	if (WARN_ON(pipe < 0))
+		return;
+
+	pipeconf = dev_priv->pipeconf[pipe];
+	dspcntr = dev_priv->dspcntr[pipe];
+
 	if (pipe) {
 		pipeconf_reg = PIPECCONF;
 		dspcntr_reg = DSPCCNTR;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 140/193] [media] hdpvr: hide unused variable
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (138 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 139/193] drm/gma500: Sanity-check pipe index Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 141/193] [media] v4l: remove MEDIA_TUNER dependency for VIDEO_TUNER Greg Kroah-Hartman
                   ` (59 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Mauro Carvalho Chehab

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit b97baa3e22e18dac42001e665cf27ad1211bf878 upstream.

The i2c client pointer is only used when CONFIG_I2C is set, and
otherwise produces a compile-time warning:

drivers/media/usb/hdpvr/hdpvr-core.c: In function 'hdpvr_probe':
drivers/media/usb/hdpvr/hdpvr-core.c:276:21: error: unused variable 'client' [-Werror=unused-variable]

This uses the same #ifdef to hide the variable when the code using
it is hidden.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/media/usb/hdpvr/hdpvr-core.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/media/usb/hdpvr/hdpvr-core.c
+++ b/drivers/media/usb/hdpvr/hdpvr-core.c
@@ -273,7 +273,9 @@ static int hdpvr_probe(struct usb_interf
 	struct hdpvr_device *dev;
 	struct usb_host_interface *iface_desc;
 	struct usb_endpoint_descriptor *endpoint;
+#if IS_ENABLED(CONFIG_I2C)
 	struct i2c_client *client;
+#endif
 	size_t buffer_size;
 	int i;
 	int retval = -ENOMEM;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 141/193] [media] v4l: remove MEDIA_TUNER dependency for VIDEO_TUNER
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (139 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 140/193] [media] hdpvr: hide unused variable Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 142/193] cw1200: fix bogus maybe-uninitialized warning Greg Kroah-Hartman
                   ` (58 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Mauro Carvalho Chehab

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 7c8fe516bd81d991feb73ccd969ec29850af3013 upstream.

em28xx selects VIDEO_TUNER, which has a dependency on MEDIA_TUNER,
so we get a Kconfig warning if that is disabled:

warning: (VIDEO_PVRUSB2 && VIDEO_USBVISION && VIDEO_GO7007 && VIDEO_AU0828_V4L2 && VIDEO_CX231XX && VIDEO_TM6000 && VIDEO_EM28XX && VIDEO_IVTV && VIDEO_MXB && VIDEO_CX18 && VIDEO_CX23885 && VIDEO_CX88 && VIDEO_BT848 && VIDEO_SAA7134 && VIDEO_SAA7164) selects VIDEO_TUNER which has unmet direct dependencies (MEDIA_SUPPORT && MEDIA_TUNER)

VIDEO_TUNER does not actually depend on MEDIA_TUNER, and the
dependency does nothing except cause the above warning, so let's
remove it.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/media/v4l2-core/Kconfig |    1 -
 1 file changed, 1 deletion(-)

--- a/drivers/media/v4l2-core/Kconfig
+++ b/drivers/media/v4l2-core/Kconfig
@@ -37,7 +37,6 @@ config VIDEO_PCI_SKELETON
 # Used by drivers that need tuner.ko
 config VIDEO_TUNER
 	tristate
-	depends on MEDIA_TUNER
 
 # Used by drivers that need v4l2-mem2mem.ko
 config V4L2_MEM2MEM_DEV

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 142/193] cw1200: fix bogus maybe-uninitialized warning
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (140 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 141/193] [media] v4l: remove MEDIA_TUNER dependency for VIDEO_TUNER Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 143/193] wireless: cw1200: use __maybe_unused to hide pm functions_ Greg Kroah-Hartman
                   ` (57 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, David Laight, Arnd Bergmann, Kalle Valo

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 7fc1503c906f0fac62d3506a6e993e49fb996248 upstream.

On x86, the cw1200 driver produces a rather silly warning about the
possible use of the 'ret' variable without an initialization
presumably after being confused by the architecture specific definition
of WARN_ON:

drivers/net/wireless/st/cw1200/wsm.c: In function ‘wsm_handle_rx’:
drivers/net/wireless/st/cw1200/wsm.c:1457:9: error: ‘ret’ may be used uninitialized in this function [-Werror=maybe-uninitialized]

We have already checked that 'count' is larger than 0 here, so
we know that 'ret' is initialized. Changing the 'for' loop
into do/while also makes this clear to the compiler.

Suggested-by: David Laight <David.Laight@ACULAB.COM>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/net/wireless/cw1200/wsm.c |    8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

--- a/drivers/net/wireless/cw1200/wsm.c
+++ b/drivers/net/wireless/cw1200/wsm.c
@@ -379,7 +379,6 @@ static int wsm_multi_tx_confirm(struct c
 {
 	int ret;
 	int count;
-	int i;
 
 	count = WSM_GET32(buf);
 	if (WARN_ON(count <= 0))
@@ -395,11 +394,10 @@ static int wsm_multi_tx_confirm(struct c
 	}
 
 	cw1200_debug_txed_multi(priv, count);
-	for (i = 0; i < count; ++i) {
+	do {
 		ret = wsm_tx_confirm(priv, buf, link_id);
-		if (ret)
-			return ret;
-	}
+	} while (!ret && --count);
+
 	return ret;
 
 underflow:

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 143/193] wireless: cw1200: use __maybe_unused to hide pm functions_
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (141 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 142/193] cw1200: fix bogus maybe-uninitialized warning Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 144/193] perf/x86: Shut up false-positive -Wmaybe-uninitialized warning Greg Kroah-Hartman
                   ` (56 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Kalle Valo

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 836856e3bd61d0644e5178a2c1b51d90459e2788 upstream.

The cw1200 uses #ifdef to check for CONFIG_PM, but then
uses SIMPLE_DEV_PM_OPS, which leaves the references out when
CONFIG_PM_SLEEP is not defined, so we get a warning with
PM=y && PM_SLEEP=n:

drivers/net/wireless/st/cw1200/cw1200_spi.c:450:12: error: 'cw1200_spi_suspend' defined but not used [-Werror=unused-function]

This removes the incorrect #ifdef and instead uses a __maybe_unused
annotation to let the compiler know it can silently drop
the function definition.

For the DEV_PM_OPS definition, we can use an IS_ENABLED() check
to avoid defining the structure when CONFIG_PM is not set without
the #ifdef.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/net/wireless/cw1200/cw1200_spi.c |    9 ++-------
 drivers/net/wireless/cw1200/pm.h         |    9 +++++++--
 2 files changed, 9 insertions(+), 9 deletions(-)

--- a/drivers/net/wireless/cw1200/cw1200_spi.c
+++ b/drivers/net/wireless/cw1200/cw1200_spi.c
@@ -446,8 +446,7 @@ static int cw1200_spi_disconnect(struct
 	return 0;
 }
 
-#ifdef CONFIG_PM
-static int cw1200_spi_suspend(struct device *dev)
+static int __maybe_unused cw1200_spi_suspend(struct device *dev)
 {
 	struct hwbus_priv *self = spi_get_drvdata(to_spi_device(dev));
 
@@ -460,16 +459,12 @@ static int cw1200_spi_suspend(struct dev
 
 static SIMPLE_DEV_PM_OPS(cw1200_pm_ops, cw1200_spi_suspend, NULL);
 
-#endif
-
 static struct spi_driver spi_driver = {
 	.probe		= cw1200_spi_probe,
 	.remove		= cw1200_spi_disconnect,
 	.driver = {
 		.name		= "cw1200_wlan_spi",
-#ifdef CONFIG_PM
-		.pm		= &cw1200_pm_ops,
-#endif
+		.pm		= IS_ENABLED(CONFIG_PM) ? &cw1200_pm_ops : NULL,
 	},
 };
 
--- a/drivers/net/wireless/cw1200/pm.h
+++ b/drivers/net/wireless/cw1200/pm.h
@@ -31,13 +31,18 @@ int cw1200_pm_init(struct cw1200_pm_stat
 void cw1200_pm_deinit(struct cw1200_pm_state *pm);
 int cw1200_wow_suspend(struct ieee80211_hw *hw,
 		       struct cfg80211_wowlan *wowlan);
-int cw1200_wow_resume(struct ieee80211_hw *hw);
 int cw1200_can_suspend(struct cw1200_common *priv);
+int cw1200_wow_resume(struct ieee80211_hw *hw);
 void cw1200_pm_stay_awake(struct cw1200_pm_state *pm,
 			  unsigned long tmo);
 #else
 static inline void cw1200_pm_stay_awake(struct cw1200_pm_state *pm,
-					unsigned long tmo) {
+					unsigned long tmo)
+{
+}
+static inline int cw1200_can_suspend(struct cw1200_common *priv)
+{
+	return 0;
 }
 #endif
 #endif

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 144/193] perf/x86: Shut up false-positive -Wmaybe-uninitialized warning
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (142 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 143/193] wireless: cw1200: use __maybe_unused to hide pm functions_ Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 145/193] dmaengine: zx: fix build warning Greg Kroah-Hartman
                   ` (55 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Peter Zijlstra, Arnd Bergmann,
	Alexander Shishkin, Andy Lutomirski, Arnaldo Carvalho de Melo,
	Josh Poimboeuf, Linus Torvalds, Thomas Gleixner, Ingo Molnar

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 11d8b05855f3749bcb6c57e2c4052921b9605c77 upstream.

The intialization function checks for various failure scenarios, but
unfortunately the compiler gets a little confused about the possible
combinations, leading to a false-positive build warning when
-Wmaybe-uninitialized is set:

  arch/x86/events/core.c: In function ‘init_hw_perf_events’:
  arch/x86/events/core.c:264:3: warning: ‘reg_fail’ may be used uninitialized in this function [-Wmaybe-uninitialized]
  arch/x86/events/core.c:264:3: warning: ‘val_fail’ may be used uninitialized in this function [-Wmaybe-uninitialized]
     pr_err(FW_BUG "the BIOS has corrupted hw-PMU resources (MSR %x is %Lx)\n",

We can't actually run into this case, so this shuts up the warning
by initializing the variables to a known-invalid state.

Suggested-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20170719125310.2487451-2-arnd@arndb.de
Link: https://patchwork.kernel.org/patch/9392595/
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/x86/kernel/cpu/perf_event.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/arch/x86/kernel/cpu/perf_event.c
+++ b/arch/x86/kernel/cpu/perf_event.c
@@ -188,8 +188,8 @@ static void release_pmc_hardware(void) {
 
 static bool check_hw_exists(void)
 {
-	u64 val, val_fail, val_new= ~0;
-	int i, reg, reg_fail, ret = 0;
+	u64 val, val_fail = -1, val_new= ~0;
+	int i, reg, reg_fail = -1, ret = 0;
 	int bios_fail = 0;
 	int reg_safe = -1;
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 145/193] dmaengine: zx: fix build warning
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (143 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 144/193] perf/x86: Shut up false-positive -Wmaybe-uninitialized warning Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 146/193] net: hp100: remove unnecessary #ifdefs Greg Kroah-Hartman
                   ` (54 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Jun Nie, Shawn Guo, Vinod Koul

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Jun Nie <jun.nie@linaro.org>

commit 067fdeb2f391bfa071f741a2b3eb74b8ff3785cd upstream.

Fix build warning that related to PAGE_SIZE. The maximum DMA
length has nothing to do with PAGE_SIZE, just use a fix number
for the definition.

drivers/dma/zx_dma.c: In function 'zx_dma_prep_memcpy':
drivers/dma/zx_dma.c:523:8: warning: division by zero [-Wdiv-by-zero]
drivers/dma/zx_dma.c: In function 'zx_dma_prep_slave_sg':
drivers/dma/zx_dma.c:567:11: warning: division by zero [-Wdiv-by-zero]

Signed-off-by: Jun Nie <jun.nie@linaro.org>
Tested-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/dma/zx296702_dma.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/dma/zx296702_dma.c
+++ b/drivers/dma/zx296702_dma.c
@@ -26,7 +26,7 @@
 
 #define DRIVER_NAME		"zx-dma"
 #define DMA_ALIGN		4
-#define DMA_MAX_SIZE		(0x10000 - PAGE_SIZE)
+#define DMA_MAX_SIZE		(0x10000 - 512)
 #define LLI_BLOCK_SIZE		(4 * PAGE_SIZE)
 
 #define REG_ZX_SRC_ADDR			0x00

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 146/193] net: hp100: remove unnecessary #ifdefs
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (144 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 145/193] dmaengine: zx: fix build warning Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 147/193] gpio: xgene: mark PM functions as __maybe_unused Greg Kroah-Hartman
                   ` (53 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, David S. Miller

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 747a11279a442b913a57bf38934879babab3b58b upstream.

Building the hp100 ethernet driver causes warnings when both the PCI
and EISA drivers are disabled:

ethernet/hp/hp100.c: In function 'hp100_module_init':
ethernet/hp/hp100.c:3047:2: warning: label 'out3' defined but not used [-Wunused-label]
ethernet/hp/hp100.c: At top level:
ethernet/hp/hp100.c:2828:13: warning: 'cleanup_dev' defined but not used [-Wunused-function]

We can easily avoid the warnings and make the driver look slightly
nicer by removing the #ifdefs that check for the CONFIG_PCI and
CONFIG_EISA, as all the registration functions are designed to
have no effect when the buses are disabled.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/net/ethernet/hp/hp100.c |   18 ------------------
 1 file changed, 18 deletions(-)

--- a/drivers/net/ethernet/hp/hp100.c
+++ b/drivers/net/ethernet/hp/hp100.c
@@ -194,7 +194,6 @@ static const char *hp100_isa_tbl[] = {
 };
 #endif
 
-#ifdef CONFIG_EISA
 static struct eisa_device_id hp100_eisa_tbl[] = {
 	{ "HWPF180" }, /* HP J2577 rev A */
 	{ "HWP1920" }, /* HP 27248B */
@@ -205,9 +204,7 @@ static struct eisa_device_id hp100_eisa_
 	{ "" }	       /* Mandatory final entry ! */
 };
 MODULE_DEVICE_TABLE(eisa, hp100_eisa_tbl);
-#endif
 
-#ifdef CONFIG_PCI
 static const struct pci_device_id hp100_pci_tbl[] = {
 	{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_J2585A, PCI_ANY_ID, PCI_ANY_ID,},
 	{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_J2585B, PCI_ANY_ID, PCI_ANY_ID,},
@@ -219,7 +216,6 @@ static const struct pci_device_id hp100_
 	{}			/* Terminating entry */
 };
 MODULE_DEVICE_TABLE(pci, hp100_pci_tbl);
-#endif
 
 static int hp100_rx_ratio = HP100_DEFAULT_RX_RATIO;
 static int hp100_priority_tx = HP100_DEFAULT_PRIORITY_TX;
@@ -2842,7 +2838,6 @@ static void cleanup_dev(struct net_devic
 	free_netdev(d);
 }
 
-#ifdef CONFIG_EISA
 static int hp100_eisa_probe(struct device *gendev)
 {
 	struct net_device *dev = alloc_etherdev(sizeof(struct hp100_private));
@@ -2884,9 +2879,7 @@ static struct eisa_driver hp100_eisa_dri
 		.remove  = hp100_eisa_remove,
         }
 };
-#endif
 
-#ifdef CONFIG_PCI
 static int hp100_pci_probe(struct pci_dev *pdev,
 			   const struct pci_device_id *ent)
 {
@@ -2955,7 +2948,6 @@ static struct pci_driver hp100_pci_drive
 	.probe		= hp100_pci_probe,
 	.remove		= hp100_pci_remove,
 };
-#endif
 
 /*
  *  module section
@@ -3032,23 +3024,17 @@ static int __init hp100_module_init(void
 	err = hp100_isa_init();
 	if (err && err != -ENODEV)
 		goto out;
-#ifdef CONFIG_EISA
 	err = eisa_driver_register(&hp100_eisa_driver);
 	if (err && err != -ENODEV)
 		goto out2;
-#endif
-#ifdef CONFIG_PCI
 	err = pci_register_driver(&hp100_pci_driver);
 	if (err && err != -ENODEV)
 		goto out3;
-#endif
  out:
 	return err;
  out3:
-#ifdef CONFIG_EISA
 	eisa_driver_unregister (&hp100_eisa_driver);
  out2:
-#endif
 	hp100_isa_cleanup();
 	goto out;
 }
@@ -3057,12 +3043,8 @@ static int __init hp100_module_init(void
 static void __exit hp100_module_exit(void)
 {
 	hp100_isa_cleanup();
-#ifdef CONFIG_EISA
 	eisa_driver_unregister (&hp100_eisa_driver);
-#endif
-#ifdef CONFIG_PCI
 	pci_unregister_driver (&hp100_pci_driver);
-#endif
 }
 
 module_init(hp100_module_init)

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 147/193] gpio: xgene: mark PM functions as __maybe_unused
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (145 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 146/193] net: hp100: remove unnecessary #ifdefs Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 148/193] ncpfs: fix unused variable warning Greg Kroah-Hartman
                   ` (52 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Arnd Bergmann, Linus Walleij

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit b115bebc07f282067eccc06fd5aa3060ab1426da upstream.

When CONFIG_PM_SLEEP is disabled, we get a warning about unused functions:

drivers/gpio/gpio-xgene.c:155:12: warning: 'xgene_gpio_resume' defined but not used [-Wunused-function]
 static int xgene_gpio_resume(struct device *dev)
            ^~~~~~~~~~~~~~~~~
drivers/gpio/gpio-xgene.c:142:12: warning: 'xgene_gpio_suspend' defined but not used [-Wunused-function]
 static int xgene_gpio_suspend(struct device *dev)

The warnings are harmless and can be avoided by simplifying the code and marking
the functions as __maybe_unused.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/gpio/gpio-xgene.c |   13 +++----------
 1 file changed, 3 insertions(+), 10 deletions(-)

--- a/drivers/gpio/gpio-xgene.c
+++ b/drivers/gpio/gpio-xgene.c
@@ -42,9 +42,7 @@ struct xgene_gpio {
 	struct gpio_chip	chip;
 	void __iomem		*base;
 	spinlock_t		lock;
-#ifdef CONFIG_PM
 	u32			set_dr_val[XGENE_MAX_GPIO_BANKS];
-#endif
 };
 
 static inline struct xgene_gpio *to_xgene_gpio(struct gpio_chip *chip)
@@ -132,8 +130,7 @@ static int xgene_gpio_dir_out(struct gpi
 	return 0;
 }
 
-#ifdef CONFIG_PM
-static int xgene_gpio_suspend(struct device *dev)
+static __maybe_unused int xgene_gpio_suspend(struct device *dev)
 {
 	struct xgene_gpio *gpio = dev_get_drvdata(dev);
 	unsigned long bank_offset;
@@ -146,7 +143,7 @@ static int xgene_gpio_suspend(struct dev
 	return 0;
 }
 
-static int xgene_gpio_resume(struct device *dev)
+static __maybe_unused int xgene_gpio_resume(struct device *dev)
 {
 	struct xgene_gpio *gpio = dev_get_drvdata(dev);
 	unsigned long bank_offset;
@@ -160,10 +157,6 @@ static int xgene_gpio_resume(struct devi
 }
 
 static SIMPLE_DEV_PM_OPS(xgene_gpio_pm, xgene_gpio_suspend, xgene_gpio_resume);
-#define XGENE_GPIO_PM_OPS	(&xgene_gpio_pm)
-#else
-#define XGENE_GPIO_PM_OPS	NULL
-#endif
 
 static int xgene_gpio_probe(struct platform_device *pdev)
 {
@@ -230,7 +223,7 @@ static struct platform_driver xgene_gpio
 	.driver = {
 		.name = "xgene-gpio",
 		.of_match_table = xgene_gpio_of_match,
-		.pm     = XGENE_GPIO_PM_OPS,
+		.pm     = &xgene_gpio_pm,
 	},
 	.probe = xgene_gpio_probe,
 	.remove = xgene_gpio_remove,

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 148/193] ncpfs: fix unused variable warning
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (146 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 147/193] gpio: xgene: mark PM functions as __maybe_unused Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 149/193] Revert "power: bq27xxx_battery: Remove unneeded dependency in Kconfig" Greg Kroah-Hartman
                   ` (51 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: Greg Kroah-Hartman, stable, Miklos Szeredi

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Miklos Szeredi <mszeredi@redhat.com>

commit 9a232de4999666b2e8ea6775b2b0e3e4feb09b7a upstream.

Without CONFIG_NCPFS_NLS the following warning is seen:

fs/ncpfs/dir.c: In function 'ncp_hash_dentry':
fs/ncpfs/dir.c:136:23: warning: unused variable 'sb' [-Wunused-variable]
   struct super_block *sb = dentry->d_sb;

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/ncpfs/dir.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- a/fs/ncpfs/dir.c
+++ b/fs/ncpfs/dir.c
@@ -133,12 +133,11 @@ ncp_hash_dentry(const struct dentry *den
 		return 0;
 
 	if (!ncp_case_sensitive(inode)) {
-		struct super_block *sb = dentry->d_sb;
 		struct nls_table *t;
 		unsigned long hash;
 		int i;
 
-		t = NCP_IO_TABLE(sb);
+		t = NCP_IO_TABLE(dentry->d_sb);
 		hash = init_name_hash();
 		for (i=0; i<this->len ; i++)
 			hash = partial_name_hash(ncp_tolower(t, this->name[i]),

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 149/193] Revert "power: bq27xxx_battery: Remove unneeded dependency in Kconfig"
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (147 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 148/193] ncpfs: fix unused variable warning Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 150/193] power: bq27xxx_battery: mark some symbols __maybe_unused Greg Kroah-Hartman
                   ` (50 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: Greg Kroah-Hartman, Arnd Bergmann

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

This reverts commit 6bd03ce3c12a22d86f59070f1da15aaa2bde8a51, it was applied
in error and cuased this link failure

drivers/built-in.o: In function `bq27xxx_battery_i2c_read':
core.c:(.text+0xa6da8): undefined reference to `i2c_transfer'
drivers/built-in.o: In function `bq27xxx_battery_init':
core.c:(.init.text+0x68e0): undefined reference to `i2c_register_driver'
drivers/built-in.o: In function `bq27xxx_battery_exit':
core.c:(.exit.text+0xc6c): undefined reference to `i2c_del_driver'

Later upstream kernels fixed this with a larger rework in commit
703df6c09795 ("power: bq27xxx_battery: Reorganize I2C into a module"),
but we cannot backport that to 4.4.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/power/Kconfig |    1 +
 1 file changed, 1 insertion(+)

--- a/drivers/power/Kconfig
+++ b/drivers/power/Kconfig
@@ -159,6 +159,7 @@ config BATTERY_SBS
 
 config BATTERY_BQ27XXX
 	tristate "BQ27xxx battery driver"
+	depends on I2C || I2C=n
 	help
 	  Say Y here to enable support for batteries with BQ27xxx (I2C/HDQ) chips.
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 150/193] power: bq27xxx_battery: mark some symbols __maybe_unused
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (148 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 149/193] Revert "power: bq27xxx_battery: Remove unneeded dependency in Kconfig" Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 151/193] isdn: sc: work around type mismatch warning Greg Kroah-Hartman
                   ` (49 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: Greg Kroah-Hartman, Arnd Bergmann

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

Without the I2C driver, we get a few warnings:

drivers/power/bq27xxx_battery.c:288:12: error: 'bq27xxx_regs' defined but not used [-Werror=unused-variable]
 static u8 *bq27xxx_regs[] = {
            ^
drivers/power/bq27xxx_battery.c:994:12: error: 'bq27xxx_powersupply_init' defined but not used [-Werror=unused-function]
 static int bq27xxx_powersupply_init(struct bq27xxx_device_info *di,
            ^
drivers/power/bq27xxx_battery.c:1029:13: error: 'bq27xxx_powersupply_unregister' defined but not used [-Werror=unused-function]
 static void bq27xxx_powersupply_unregister(struct bq27xxx_device_info *di)
             ^

In mainline kernels, this was addressed by a larger rework in 703df6c09795 ("power:
bq27xxx_battery: Reorganize I2C into a module"). We probably don't want this backported
into stable kernels, so instead let's shut up the warnings by marking the symbols
as __maybe_unused.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/power/bq27xxx_battery.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

--- a/drivers/power/bq27xxx_battery.c
+++ b/drivers/power/bq27xxx_battery.c
@@ -285,7 +285,7 @@ static u8 bq27421_regs[] = {
 	0x18,	/* AP		*/
 };
 
-static u8 *bq27xxx_regs[] = {
+static u8 *bq27xxx_regs[] __maybe_unused = {
 	[BQ27000] = bq27000_regs,
 	[BQ27010] = bq27010_regs,
 	[BQ27500] = bq27500_regs,
@@ -991,7 +991,7 @@ static void bq27xxx_external_power_chang
 	schedule_delayed_work(&di->work, 0);
 }
 
-static int bq27xxx_powersupply_init(struct bq27xxx_device_info *di,
+static int __maybe_unused bq27xxx_powersupply_init(struct bq27xxx_device_info *di,
 				    const char *name)
 {
 	int ret;
@@ -1026,7 +1026,7 @@ static int bq27xxx_powersupply_init(stru
 	return 0;
 }
 
-static void bq27xxx_powersupply_unregister(struct bq27xxx_device_info *di)
+static void __maybe_unused bq27xxx_powersupply_unregister(struct bq27xxx_device_info *di)
 {
 	/*
 	 * power_supply_unregister call bq27xxx_battery_get_property which

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 151/193] isdn: sc: work around type mismatch warning
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (149 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 150/193] power: bq27xxx_battery: mark some symbols __maybe_unused Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 152/193] binfmt_elf: compat: avoid unused function warning Greg Kroah-Hartman
                   ` (48 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: Greg Kroah-Hartman, Arnd Bergmann

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

This driver shows warnings on many architectures:

drivers/isdn/sc/init.c: In function 'identify_board':
drivers/isdn/sc/init.c:484:2: error: passing argument 1 of 'readl' makes pointer from integer without a cast [-Werror]

In newer kernels, it was completely removed, but for the 4.4-stable
series, let's just shut up that warning by adding an extra variable
to do the necessary type cast.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/isdn/sc/init.c |    7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

--- a/drivers/isdn/sc/init.c
+++ b/drivers/isdn/sc/init.c
@@ -441,6 +441,7 @@ static int identify_board(unsigned long
 	RspMessage rcvmsg;
 	ReqMessage sndmsg;
 	HWConfig_pl hwci;
+	void __iomem *rambase_sig = (void __iomem *)rambase + SIG_OFFSET;
 	int x;
 
 	pr_debug("Attempting to identify adapter @ 0x%lx io 0x%x\n",
@@ -481,7 +482,7 @@ static int identify_board(unsigned long
 	 */
 	outb(PRI_BASEPG_VAL, pgport);
 	msleep_interruptible(1000);
-	sig = readl(rambase + SIG_OFFSET);
+	sig = readl(rambase_sig);
 	pr_debug("Looking for a signature, got 0x%lx\n", sig);
 	if (sig == SIGNATURE)
 		return PRI_BOARD;
@@ -491,7 +492,7 @@ static int identify_board(unsigned long
 	 */
 	outb(BRI_BASEPG_VAL, pgport);
 	msleep_interruptible(1000);
-	sig = readl(rambase + SIG_OFFSET);
+	sig = readl(rambase_sig);
 	pr_debug("Looking for a signature, got 0x%lx\n", sig);
 	if (sig == SIGNATURE)
 		return BRI_BOARD;
@@ -501,7 +502,7 @@ static int identify_board(unsigned long
 	/*
 	 * Try to spot a card
 	 */
-	sig = readl(rambase + SIG_OFFSET);
+	sig = readl(rambase_sig);
 	pr_debug("Looking for a signature, got 0x%lx\n", sig);
 	if (sig != SIGNATURE)
 		return -1;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 152/193] binfmt_elf: compat: avoid unused function warning
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (150 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 151/193] isdn: sc: work around type mismatch warning Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 153/193] idle: i7300: add PCI dependency Greg Kroah-Hartman
                   ` (47 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: Greg Kroah-Hartman, Arnd Bergmann

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

When CONFIG_ELF_CORE is disabled, we get a harmless warning in the compat
version of binfmt_elf:

fs/compat_binfmt_elf.c:58:13: error: 'cputime_to_compat_timeval' defined but not used [-Werror=unused-function]

This was addressed in mainline Linux as part of a larger rework with commit
cd19c364b313 ("fs/binfmt: Convert obsolete cputime type to nsecs").

For 4.9 and earlier, this just shuts up the warning by adding an #ifdef
around the function definition.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/compat_binfmt_elf.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/fs/compat_binfmt_elf.c
+++ b/fs/compat_binfmt_elf.c
@@ -51,6 +51,7 @@
 #define elf_prstatus	compat_elf_prstatus
 #define elf_prpsinfo	compat_elf_prpsinfo
 
+#ifdef CONFIG_ELF_CORE
 /*
  * Compat version of cputime_to_compat_timeval, perhaps this
  * should be an inline in <linux/compat.h>.
@@ -63,6 +64,7 @@ static void cputime_to_compat_timeval(co
 	value->tv_sec = tv.tv_sec;
 	value->tv_usec = tv.tv_usec;
 }
+#endif
 
 #undef cputime_to_timeval
 #define cputime_to_timeval cputime_to_compat_timeval

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 153/193] idle: i7300: add PCI dependency
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (151 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 152/193] binfmt_elf: compat: avoid unused function warning Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 154/193] usb: phy: msm add regulator dependency Greg Kroah-Hartman
                   ` (46 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: Greg Kroah-Hartman, Arnd Bergmann

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

GCC correctly points out an uninitialized variable use when CONFIG_PCI is disabled.

drivers/idle/i7300_idle.c: In function 'i7300_idle_notifier':
include/asm-generic/bug.h:119:5: error: 'got_ctl' may be used uninitialized in this function [-Werror=maybe-uninitialized]
  if (unlikely(__ret_warn_once && !__warned)) {  \
     ^
drivers/idle/i7300_idle.c:415:5: note: 'got_ctl' was declared here
  u8 got_ctl;
     ^~~~~~~

The driver no longer exists in later kernels, so this patch only appplies to
linux-4.9.y and earlier.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/idle/Kconfig |    1 +
 1 file changed, 1 insertion(+)

--- a/drivers/idle/Kconfig
+++ b/drivers/idle/Kconfig
@@ -17,6 +17,7 @@ config I7300_IDLE_IOAT_CHANNEL
 
 config I7300_IDLE
 	tristate "Intel chipset idle memory power saving driver"
+	depends on PCI
 	select I7300_IDLE_IOAT_CHANNEL
 	help
 	  Enable memory power savings when idle with certain Intel server

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 154/193] usb: phy: msm add regulator dependency
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (152 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 153/193] idle: i7300: add PCI dependency Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 155/193] ncr5380: shut up gcc indentation warning Greg Kroah-Hartman
                   ` (45 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: Greg Kroah-Hartman, Arnd Bergmann

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

On linux-4.4 and linux-4.9 we get a warning about an array that is
never initialized when CONFIG_REGULATOR is disabled:

drivers/usb/phy/phy-msm-usb.c: In function 'msm_otg_probe':
drivers/usb/phy/phy-msm-usb.c:1911:14: error: 'regs[0].consumer' may be used uninitialized in this function [-Werror=maybe-uninitialized]
  motg->vddcx = regs[0].consumer;
  ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
drivers/usb/phy/phy-msm-usb.c:1912:14: error: 'regs[1].consumer' may be used uninitialized in this function [-Werror=maybe-uninitialized]
  motg->v3p3  = regs[1].consumer;
  ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
drivers/usb/phy/phy-msm-usb.c:1913:14: error: 'regs[2].consumer' may be used uninitialized in this function [-Werror=maybe-uninitialized]
  motg->v1p8  = regs[2].consumer;

This adds a Kconfig dependency for it. In newer kernels, the driver no
longer exists, so this is only needed for stable kernels.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/usb/phy/Kconfig |    1 +
 1 file changed, 1 insertion(+)

--- a/drivers/usb/phy/Kconfig
+++ b/drivers/usb/phy/Kconfig
@@ -140,6 +140,7 @@ config USB_MSM_OTG
 	tristate "Qualcomm on-chip USB OTG controller support"
 	depends on (USB || USB_GADGET) && (ARCH_QCOM || COMPILE_TEST)
 	depends on RESET_CONTROLLER
+	depends on REGULATOR
 	depends on EXTCON
 	select USB_PHY
 	help

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 155/193] ncr5380: shut up gcc indentation warning
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (153 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 154/193] usb: phy: msm add regulator dependency Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 156/193] ARM: tegra: select USB_ULPI from EHCI rather than platform Greg Kroah-Hartman
                   ` (44 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: Greg Kroah-Hartman, Arnd Bergmann, Finn Thain

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

gcc-6 and higher warn about the way some loops are written in
the ncr5380 driver:

drivers/scsi/g_NCR5380.c: In function 'generic_NCR5380_pread':
drivers/scsi/g_NCR5380.c:541:3: error: this 'while' clause does not guard... [-Werror=misleading-indentation]
   while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY);
   ^~~~~
drivers/scsi/g_NCR5380.c:544:3: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'while'

This was addressed in mainline kernels as part of a rework on commit
12150797d064 ("ncr5380: Use runtime register mapping"). We don't
want the entire patch backported to stable kernels, but we can
backport one hunk to get rid of the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Finn Thain <fthain@telegraphics.com.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/scsi/g_NCR5380.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

--- a/drivers/scsi/g_NCR5380.c
+++ b/drivers/scsi/g_NCR5380.c
@@ -538,7 +538,10 @@ static inline int NCR5380_pread(struct S
 			printk(KERN_ERR "53C400r: Got 53C80_IRQ start=%d, blocks=%d\n", start, blocks);
 			return -1;
 		}
-		while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY);
+		while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY)
+		{
+			// FIXME - no timeout
+		}
 
 #ifndef SCSI_G_NCR5380_MEM
 		{

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 156/193] ARM: tegra: select USB_ULPI from EHCI rather than platform
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (154 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 155/193] ncr5380: shut up gcc indentation warning Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 157/193] ASoC: Intel: Kconfig: fix build when ACPI is not enabled Greg Kroah-Hartman
                   ` (43 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: Greg Kroah-Hartman, Arnd Bergmann, Thierry Reding

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit a262e87ff354f12447bb6268bd63edf7ba1c20e0 upstream.

For historic reasons, the tegra platform selects USB_ULPI from architecture
code, but that hasn't really made sense for a long time, as the only
user of that code is the Tegra EHCI driver that has its own Kconfig
symbol.

This removes the 'select' statements from mach-tegra and drivers/soc/tegra
and adds them with the device driver that actually needs them.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Thierry Reding <treding@nvidia.com>
[arnd: rebased to 4.4-stable]
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/arm/mach-tegra/Kconfig  |    2 --
 arch/arm64/Kconfig.platforms |    2 --
 drivers/usb/host/Kconfig     |    2 ++
 3 files changed, 2 insertions(+), 4 deletions(-)

--- a/arch/arm/mach-tegra/Kconfig
+++ b/arch/arm/mach-tegra/Kconfig
@@ -12,8 +12,6 @@ menuconfig ARCH_TEGRA
 	select ARCH_HAS_RESET_CONTROLLER
 	select RESET_CONTROLLER
 	select SOC_BUS
-	select USB_ULPI if USB_PHY
-	select USB_ULPI_VIEWPORT if USB_PHY
 	help
 	  This enables support for NVIDIA Tegra based systems.
 
--- a/arch/arm64/Kconfig.platforms
+++ b/arch/arm64/Kconfig.platforms
@@ -90,8 +90,6 @@ config ARCH_TEGRA_132_SOC
 	bool "NVIDIA Tegra132 SoC"
 	depends on ARCH_TEGRA
 	select PINCTRL_TEGRA124
-	select USB_ULPI if USB_PHY
-	select USB_ULPI_VIEWPORT if USB_PHY
 	help
 	  Enable support for NVIDIA Tegra132 SoC, based on the Denver
 	  ARMv8 CPU.  The Tegra132 SoC is similar to the Tegra124 SoC,
--- a/drivers/usb/host/Kconfig
+++ b/drivers/usb/host/Kconfig
@@ -220,6 +220,8 @@ config USB_EHCI_TEGRA
        depends on ARCH_TEGRA
        select USB_EHCI_ROOT_HUB_TT
        select USB_PHY
+	select USB_ULPI
+	select USB_ULPI_VIEWPORT
        help
          This driver enables support for the internal USB Host Controllers
          found in NVIDIA Tegra SoCs. The controllers are EHCI compliant.

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 157/193] ASoC: Intel: Kconfig: fix build when ACPI is not enabled
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (155 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 156/193] ARM: tegra: select USB_ULPI from EHCI rather than platform Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 158/193] netlink: fix nla_put_{u8,u16,u32} for KASAN Greg Kroah-Hartman
                   ` (42 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Greg Kroah-Hartman, Randy Dunlap, Vinod Koul, Mark Brown, Arnd Bergmann

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Vinod Koul <vinod.koul@intel.com>

commit 3493d4a86457c7de9f1e602b4267c9b0f9ec1c9f upstream.

Randy reported following error when ACPI is not enabled:

warning: (SND_SOC_INTEL_BYTCR_RT5640_MACH && SND_SOC_INTEL_BYTCR_RT5651_MACH
&& SND_SOC_INTEL_CHT_BSW_RT5672_MACH && SND_SOC_INTEL_CHT_BSW_RT5645_MACH &&
SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH) selects SND_SST_IPC_ACPI
+which has unmet direct dependencies (SOUND && !M68K && !UML && SND &&
SND_SOC && ACPI)

causing these build errors:

In file included from ../sound/soc/intel/atom/sst/sst_acpi.c:40:0:
../include/acpi/acpi_bus.h:65:20: error: conflicting types for
'acpi_evaluate_dsm'
 union acpi_object *acpi_evaluate_dsm(acpi_handle handle, const u8 *uuid,
In file included from ../sound/soc/intel/atom/sst/sst_acpi.c:31:0:
../include/linux/acpi.h:676:34: note: previous definition of
'acpi_evaluate_dsm' was here
 static inline union acpi_object *acpi_evaluate_dsm(acpi_handle handle,

CONFIG_SND_SST_IPC_ACPI was already dependent upon ACPI, but that was not
solving it. So move the depends up to machine drivers and remove from
CONFIG_SND_SST_IPC_ACPI.

Reported-by: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
[arnd: rebased to PATCH kernel]
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 sound/soc/intel/Kconfig |    7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

--- a/sound/soc/intel/Kconfig
+++ b/sound/soc/intel/Kconfig
@@ -24,7 +24,6 @@ config SND_SST_IPC_PCI
 config SND_SST_IPC_ACPI
 	tristate
 	select SND_SST_IPC
-	depends on ACPI
 
 config SND_SOC_INTEL_SST
 	tristate
@@ -91,7 +90,7 @@ config SND_SOC_INTEL_BROADWELL_MACH
 
 config SND_SOC_INTEL_BYTCR_RT5640_MACH
 	tristate "ASoC Audio DSP Support for MID BYT Platform"
-	depends on X86 && I2C
+	depends on X86 && I2C && ACPI
 	select SND_SOC_RT5640
 	select SND_SST_MFLD_PLATFORM
 	select SND_SST_IPC_ACPI
@@ -103,7 +102,7 @@ config SND_SOC_INTEL_BYTCR_RT5640_MACH
 
 config SND_SOC_INTEL_CHT_BSW_RT5672_MACH
         tristate "ASoC Audio driver for Intel Cherrytrail & Braswell with RT5672 codec"
-        depends on X86_INTEL_LPSS && I2C
+        depends on X86_INTEL_LPSS && I2C && ACPI
         select SND_SOC_RT5670
         select SND_SST_MFLD_PLATFORM
         select SND_SST_IPC_ACPI
@@ -115,7 +114,7 @@ config SND_SOC_INTEL_CHT_BSW_RT5672_MACH
 
 config SND_SOC_INTEL_CHT_BSW_RT5645_MACH
 	tristate "ASoC Audio driver for Intel Cherrytrail & Braswell with RT5645/5650 codec"
-	depends on X86_INTEL_LPSS && I2C
+	depends on X86_INTEL_LPSS && I2C && ACPI
 	select SND_SOC_RT5645
 	select SND_SST_MFLD_PLATFORM
 	select SND_SST_IPC_ACPI

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 158/193] netlink: fix nla_put_{u8,u16,u32} for KASAN
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (156 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 157/193] ASoC: Intel: Kconfig: fix build when ACPI is not enabled Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 159/193] dell-wmi, dell-laptop: depends DMI Greg Kroah-Hartman
                   ` (41 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: Greg Kroah-Hartman, Arnd Bergmann, David S. Miller

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit b4391db42308c9940944b5d7be5ca4b78fb88dd0 upstream.

When CONFIG_KASAN is enabled, the "--param asan-stack=1" causes rather large
stack frames in some functions. This goes unnoticed normally because
CONFIG_FRAME_WARN is disabled with CONFIG_KASAN by default as of commit
3f181b4d8652 ("lib/Kconfig.debug: disable -Wframe-larger-than warnings with
KASAN=y").

The kernelci.org build bot however has the warning enabled and that led
me to investigate it a little further, as every build produces these warnings:

net/wireless/nl80211.c:4389:1: warning: the frame size of 2240 bytes is larger than 2048 bytes [-Wframe-larger-than=]
net/wireless/nl80211.c:1895:1: warning: the frame size of 3776 bytes is larger than 2048 bytes [-Wframe-larger-than=]
net/wireless/nl80211.c:1410:1: warning: the frame size of 2208 bytes is larger than 2048 bytes [-Wframe-larger-than=]
net/bridge/br_netlink.c:1282:1: warning: the frame size of 2544 bytes is larger than 2048 bytes [-Wframe-larger-than=]

Most of this problem is now solved in gcc-8, which can consolidate
the stack slots for the inline function arguments. On older compilers
we can add a workaround by declaring a local variable in each function
to pass the inline function argument.

Cc: stable@vger.kernel.org
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81715
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
[arnd: rebased to 4.4-stable]
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 include/net/netlink.h |   73 +++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 55 insertions(+), 18 deletions(-)

--- a/include/net/netlink.h
+++ b/include/net/netlink.h
@@ -745,7 +745,10 @@ static inline int nla_parse_nested(struc
  */
 static inline int nla_put_u8(struct sk_buff *skb, int attrtype, u8 value)
 {
-	return nla_put(skb, attrtype, sizeof(u8), &value);
+	/* temporary variables to work around GCC PR81715 with asan-stack=1 */
+	u8 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(u8), &tmp);
 }
 
 /**
@@ -756,7 +759,9 @@ static inline int nla_put_u8(struct sk_b
  */
 static inline int nla_put_u16(struct sk_buff *skb, int attrtype, u16 value)
 {
-	return nla_put(skb, attrtype, sizeof(u16), &value);
+	u16 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(u16), &tmp);
 }
 
 /**
@@ -767,7 +772,9 @@ static inline int nla_put_u16(struct sk_
  */
 static inline int nla_put_be16(struct sk_buff *skb, int attrtype, __be16 value)
 {
-	return nla_put(skb, attrtype, sizeof(__be16), &value);
+	__be16 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(__be16), &tmp);
 }
 
 /**
@@ -778,7 +785,9 @@ static inline int nla_put_be16(struct sk
  */
 static inline int nla_put_net16(struct sk_buff *skb, int attrtype, __be16 value)
 {
-	return nla_put_be16(skb, attrtype | NLA_F_NET_BYTEORDER, value);
+	__be16 tmp = value;
+
+	return nla_put_be16(skb, attrtype | NLA_F_NET_BYTEORDER, tmp);
 }
 
 /**
@@ -789,7 +798,9 @@ static inline int nla_put_net16(struct s
  */
 static inline int nla_put_le16(struct sk_buff *skb, int attrtype, __le16 value)
 {
-	return nla_put(skb, attrtype, sizeof(__le16), &value);
+	__le16 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(__le16), &tmp);
 }
 
 /**
@@ -800,7 +811,9 @@ static inline int nla_put_le16(struct sk
  */
 static inline int nla_put_u32(struct sk_buff *skb, int attrtype, u32 value)
 {
-	return nla_put(skb, attrtype, sizeof(u32), &value);
+	u32 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(u32), &tmp);
 }
 
 /**
@@ -811,7 +824,9 @@ static inline int nla_put_u32(struct sk_
  */
 static inline int nla_put_be32(struct sk_buff *skb, int attrtype, __be32 value)
 {
-	return nla_put(skb, attrtype, sizeof(__be32), &value);
+	__be32 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(__be32), &tmp);
 }
 
 /**
@@ -822,7 +837,9 @@ static inline int nla_put_be32(struct sk
  */
 static inline int nla_put_net32(struct sk_buff *skb, int attrtype, __be32 value)
 {
-	return nla_put_be32(skb, attrtype | NLA_F_NET_BYTEORDER, value);
+	__be32 tmp = value;
+
+	return nla_put_be32(skb, attrtype | NLA_F_NET_BYTEORDER, tmp);
 }
 
 /**
@@ -833,7 +850,9 @@ static inline int nla_put_net32(struct s
  */
 static inline int nla_put_le32(struct sk_buff *skb, int attrtype, __le32 value)
 {
-	return nla_put(skb, attrtype, sizeof(__le32), &value);
+	__le32 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(__le32), &tmp);
 }
 
 /**
@@ -844,7 +863,9 @@ static inline int nla_put_le32(struct sk
  */
 static inline int nla_put_u64(struct sk_buff *skb, int attrtype, u64 value)
 {
-	return nla_put(skb, attrtype, sizeof(u64), &value);
+	u64 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(u64), &tmp);
 }
 
 /**
@@ -855,7 +876,9 @@ static inline int nla_put_u64(struct sk_
  */
 static inline int nla_put_be64(struct sk_buff *skb, int attrtype, __be64 value)
 {
-	return nla_put(skb, attrtype, sizeof(__be64), &value);
+	__be64 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(__be64), &tmp);
 }
 
 /**
@@ -866,7 +889,9 @@ static inline int nla_put_be64(struct sk
  */
 static inline int nla_put_net64(struct sk_buff *skb, int attrtype, __be64 value)
 {
-	return nla_put_be64(skb, attrtype | NLA_F_NET_BYTEORDER, value);
+	__be64 tmp = value;
+
+	return nla_put_be64(skb, attrtype | NLA_F_NET_BYTEORDER, tmp);
 }
 
 /**
@@ -877,7 +902,9 @@ static inline int nla_put_net64(struct s
  */
 static inline int nla_put_le64(struct sk_buff *skb, int attrtype, __le64 value)
 {
-	return nla_put(skb, attrtype, sizeof(__le64), &value);
+	__le64 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(__le64), &tmp);
 }
 
 /**
@@ -888,7 +915,9 @@ static inline int nla_put_le64(struct sk
  */
 static inline int nla_put_s8(struct sk_buff *skb, int attrtype, s8 value)
 {
-	return nla_put(skb, attrtype, sizeof(s8), &value);
+	s8 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(s8), &tmp);
 }
 
 /**
@@ -899,7 +928,9 @@ static inline int nla_put_s8(struct sk_b
  */
 static inline int nla_put_s16(struct sk_buff *skb, int attrtype, s16 value)
 {
-	return nla_put(skb, attrtype, sizeof(s16), &value);
+	s16 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(s16), &tmp);
 }
 
 /**
@@ -910,7 +941,9 @@ static inline int nla_put_s16(struct sk_
  */
 static inline int nla_put_s32(struct sk_buff *skb, int attrtype, s32 value)
 {
-	return nla_put(skb, attrtype, sizeof(s32), &value);
+	s32 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(s32), &tmp);
 }
 
 /**
@@ -921,7 +954,9 @@ static inline int nla_put_s32(struct sk_
  */
 static inline int nla_put_s64(struct sk_buff *skb, int attrtype, s64 value)
 {
-	return nla_put(skb, attrtype, sizeof(s64), &value);
+	s64 tmp = value;
+
+	return nla_put(skb, attrtype, sizeof(s64), &tmp);
 }
 
 /**
@@ -969,7 +1004,9 @@ static inline int nla_put_msecs(struct s
 static inline int nla_put_in_addr(struct sk_buff *skb, int attrtype,
 				  __be32 addr)
 {
-	return nla_put_be32(skb, attrtype, addr);
+	__be32 tmp = addr;
+
+	return nla_put_be32(skb, attrtype, tmp);
 }
 
 /**

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 159/193] dell-wmi, dell-laptop: depends DMI
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (157 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 158/193] netlink: fix nla_put_{u8,u16,u32} for KASAN Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 160/193] genksyms: Fix segfault with invalid declarations Greg Kroah-Hartman
                   ` (40 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Greg Kroah-Hartman, Andy Lutomirski, Pali Rohár,
	Arnd Bergmann, Darren Hart

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Andy Lutomirski <luto@kernel.org>

commit a570af4850043260b87fb1b8aa27a4484e648878 upstream.

dell-wmi and dell-laptop will compile but won't work right if DMI
isn't selected.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Acked-by: Pali Rohár <pali.rohar@gmail.com>
[arnd: Use depends instead of selects to avoid recursive dependencies]
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
[arnd: rebase to 4.4-stable]
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/platform/x86/Kconfig |    2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
@@ -95,6 +95,7 @@ config DELL_LAPTOP
 	tristate "Dell Laptop Extras"
 	depends on X86
 	depends on DCDBAS
+	depends on DMI
 	depends on BACKLIGHT_CLASS_DEVICE
 	depends on ACPI_VIDEO || ACPI_VIDEO = n
 	depends on RFKILL || RFKILL = n
@@ -110,6 +111,7 @@ config DELL_LAPTOP
 config DELL_WMI
 	tristate "Dell WMI extras"
 	depends on ACPI_WMI
+	depends on DMI
 	depends on INPUT
 	depends on ACPI_VIDEO || ACPI_VIDEO = n
 	select INPUT_SPARSEKMAP

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 160/193] genksyms: Fix segfault with invalid declarations
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (158 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 159/193] dell-wmi, dell-laptop: depends DMI Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 161/193] x86/microcode/AMD: Change load_microcode_amd()s param to bool to fix preemptibility bug Greg Kroah-Hartman
                   ` (39 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: Greg Kroah-Hartman, Michal Marek, Arnd Bergmann

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Michal Marek <mmarek@suse.com>

commit d920f7c6628c63a390009c237fb80a203c2e400a upstream.

Do not try to recover too early and segfault when parsing invalid
declarations such as

echo 'int (int);' | scripts/genksyms/genksyms
echo 'int a, (int);' | scripts/genksyms/genksyms
echo 'extern void *__inline_memcpy((void *), (const void *), (__kernel_size_t));' | scripts/genksyms/genksyms

The last one was a real-life bug with
include/asm-generic/asm-prototypes.h on x86_64.

Reported-and-tested-by: Borislav Petkov <bp@alien8.de>
Signed-off-by: Michal Marek <mmarek@suse.com>
[arnd: rebase to 4.4, regenerate parse.tab.{c,h}]
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 scripts/genksyms/parse.tab.c_shipped | 1682 ++++++++++++++++-------------------
 scripts/genksyms/parse.tab.h_shipped |  133 +-
 scripts/genksyms/parse.y             |    2 
 3 files changed, 853 insertions(+), 964 deletions(-)

--- a/scripts/genksyms/parse.tab.c_shipped
+++ b/scripts/genksyms/parse.tab.c_shipped
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 2.7.  */
+/* A Bison parser, made by GNU Bison 3.0.4.  */
 
 /* Bison implementation for Yacc-like parsers in C
-   
-      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
-   
+
+   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
@@ -26,7 +26,7 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-   
+
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
@@ -44,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.7"
+#define YYBISON_VERSION "3.0.4"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -62,7 +62,7 @@
 
 
 /* Copy the first part of user declarations.  */
-
+#line 24 "parse.y" /* yacc.c:339  */
 
 
 #include <assert.h>
@@ -113,13 +113,13 @@ static void record_compound(struct strin
 }
 
 
+#line 117 "parse.tab.c" /* yacc.c:339  */
 
-
-# ifndef YY_NULL
+# ifndef YY_NULLPTR
 #  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULL nullptr
+#   define YY_NULLPTR nullptr
 #  else
-#   define YY_NULL 0
+#   define YY_NULLPTR 0
 #  endif
 # endif
 
@@ -131,8 +131,11 @@ static void record_compound(struct strin
 # define YYERROR_VERBOSE 0
 #endif
 
-
-/* Enabling traces.  */
+/* In a future release of Bison, this section will be replaced
+   by #include "parse.tab.h".  */
+#ifndef YY_YY_PARSE_TAB_H_INCLUDED
+# define YY_YY_PARSE_TAB_H_INCLUDED
+/* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 1
 #endif
@@ -140,86 +143,73 @@ static void record_compound(struct strin
 extern int yydebug;
 #endif
 
-/* Tokens.  */
+/* Token type.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     ASM_KEYW = 258,
-     ATTRIBUTE_KEYW = 259,
-     AUTO_KEYW = 260,
-     BOOL_KEYW = 261,
-     CHAR_KEYW = 262,
-     CONST_KEYW = 263,
-     DOUBLE_KEYW = 264,
-     ENUM_KEYW = 265,
-     EXTERN_KEYW = 266,
-     EXTENSION_KEYW = 267,
-     FLOAT_KEYW = 268,
-     INLINE_KEYW = 269,
-     INT_KEYW = 270,
-     LONG_KEYW = 271,
-     REGISTER_KEYW = 272,
-     RESTRICT_KEYW = 273,
-     SHORT_KEYW = 274,
-     SIGNED_KEYW = 275,
-     STATIC_KEYW = 276,
-     STRUCT_KEYW = 277,
-     TYPEDEF_KEYW = 278,
-     UNION_KEYW = 279,
-     UNSIGNED_KEYW = 280,
-     VOID_KEYW = 281,
-     VOLATILE_KEYW = 282,
-     TYPEOF_KEYW = 283,
-     EXPORT_SYMBOL_KEYW = 284,
-     ASM_PHRASE = 285,
-     ATTRIBUTE_PHRASE = 286,
-     TYPEOF_PHRASE = 287,
-     BRACE_PHRASE = 288,
-     BRACKET_PHRASE = 289,
-     EXPRESSION_PHRASE = 290,
-     CHAR = 291,
-     DOTS = 292,
-     IDENT = 293,
-     INT = 294,
-     REAL = 295,
-     STRING = 296,
-     TYPE = 297,
-     OTHER = 298,
-     FILENAME = 299
-   };
+  enum yytokentype
+  {
+    ASM_KEYW = 258,
+    ATTRIBUTE_KEYW = 259,
+    AUTO_KEYW = 260,
+    BOOL_KEYW = 261,
+    CHAR_KEYW = 262,
+    CONST_KEYW = 263,
+    DOUBLE_KEYW = 264,
+    ENUM_KEYW = 265,
+    EXTERN_KEYW = 266,
+    EXTENSION_KEYW = 267,
+    FLOAT_KEYW = 268,
+    INLINE_KEYW = 269,
+    INT_KEYW = 270,
+    LONG_KEYW = 271,
+    REGISTER_KEYW = 272,
+    RESTRICT_KEYW = 273,
+    SHORT_KEYW = 274,
+    SIGNED_KEYW = 275,
+    STATIC_KEYW = 276,
+    STRUCT_KEYW = 277,
+    TYPEDEF_KEYW = 278,
+    UNION_KEYW = 279,
+    UNSIGNED_KEYW = 280,
+    VOID_KEYW = 281,
+    VOLATILE_KEYW = 282,
+    TYPEOF_KEYW = 283,
+    EXPORT_SYMBOL_KEYW = 284,
+    ASM_PHRASE = 285,
+    ATTRIBUTE_PHRASE = 286,
+    TYPEOF_PHRASE = 287,
+    BRACE_PHRASE = 288,
+    BRACKET_PHRASE = 289,
+    EXPRESSION_PHRASE = 290,
+    CHAR = 291,
+    DOTS = 292,
+    IDENT = 293,
+    INT = 294,
+    REAL = 295,
+    STRING = 296,
+    TYPE = 297,
+    OTHER = 298,
+    FILENAME = 299
+  };
 #endif
 
-
+/* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef int YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 #endif
 
+
 extern YYSTYPE yylval;
 
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
 int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-
 
+#endif /* !YY_YY_PARSE_TAB_H_INCLUDED  */
 
 /* Copy the second part of user declarations.  */
 
-
+#line 213 "parse.tab.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -233,11 +223,8 @@ typedef unsigned char yytype_uint8;
 
 #ifdef YYTYPE_INT8
 typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
 #else
-typedef short int yytype_int8;
+typedef signed char yytype_int8;
 #endif
 
 #ifdef YYTYPE_UINT16
@@ -257,8 +244,7 @@ typedef short int yytype_int16;
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined size_t
 #  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+# elif ! defined YYSIZE_T
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
@@ -280,6 +266,33 @@ typedef short int yytype_int16;
 # endif
 #endif
 
+#ifndef YY_ATTRIBUTE
+# if (defined __GNUC__                                               \
+      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
+     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
+#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
+# else
+#  define YY_ATTRIBUTE(Spec) /* empty */
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_PURE
+# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
+#endif
+
+#if !defined _Noreturn \
+     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
+# if defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+# endif
+#endif
+
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
 # define YYUSE(E) ((void) (E))
@@ -287,24 +300,26 @@ typedef short int yytype_int16;
 # define YYUSE(E) /* empty */
 #endif
 
-/* Identity function, used to suppress warnings about constant conditions.  */
-#ifndef lint
-# define YYID(N) (N)
-#else
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int yyi)
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+    _Pragma ("GCC diagnostic pop")
 #else
-static int
-YYID (yyi)
-    int yyi;
+# define YY_INITIAL_VALUE(Value) Value
 #endif
-{
-  return yyi;
-}
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
 #endif
 
+
 #if ! defined yyoverflow || YYERROR_VERBOSE
 
 /* The parser invokes alloca or malloc; define the necessary symbols.  */
@@ -322,8 +337,7 @@ YYID (yyi)
 #    define alloca _alloca
 #   else
 #    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
       /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
 #     ifndef EXIT_SUCCESS
@@ -335,8 +349,8 @@ YYID (yyi)
 # endif
 
 # ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+   /* Pacify GCC's 'empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
 #  ifndef YYSTACK_ALLOC_MAXIMUM
     /* The OS might guarantee only one guard page at the bottom of the stack,
        and a page size can be as small as 4096 bytes.  So we cannot safely
@@ -352,7 +366,7 @@ YYID (yyi)
 #  endif
 #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
        && ! ((defined YYMALLOC || defined malloc) \
-	     && (defined YYFREE || defined free)))
+             && (defined YYFREE || defined free)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
 #   ifndef EXIT_SUCCESS
 #    define EXIT_SUCCESS 0
@@ -360,15 +374,13 @@ YYID (yyi)
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC malloc
-#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#   if ! defined malloc && ! defined EXIT_SUCCESS
 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 #  ifndef YYFREE
 #   define YYFREE free
-#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#   if ! defined free && ! defined EXIT_SUCCESS
 void free (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
@@ -378,7 +390,7 @@ void free (void *); /* INFRINGES ON USER
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
@@ -403,16 +415,16 @@ union yyalloc
    elements in the stack, and YYPTR gives the new location of the
    stack.  Advance YYPTR to a properly aligned location for the next
    stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
-    do									\
-      {									\
-	YYSIZE_T yynewbytes;						\
-	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
-	Stack = &yyptr->Stack_alloc;					\
-	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-	yyptr += yynewbytes / sizeof (*yyptr);				\
-      }									\
-    while (YYID (0))
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
+    do                                                                  \
+      {                                                                 \
+        YYSIZE_T yynewbytes;                                            \
+        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+        Stack = &yyptr->Stack_alloc;                                    \
+        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+        yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                 \
+    while (0)
 
 #endif
 
@@ -431,7 +443,7 @@ union yyalloc
           for (yyi = 0; yyi < (Count); yyi++)   \
             (Dst)[yyi] = (Src)[yyi];            \
         }                                       \
-      while (YYID (0))
+      while (0)
 #  endif
 # endif
 #endif /* !YYCOPY_NEEDED */
@@ -439,25 +451,27 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  4
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   515
+#define YYLAST   513
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  54
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  49
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  133
-/* YYNRULES -- Number of states.  */
-#define YYNSTATES  188
+#define YYNRULES  132
+/* YYNSTATES -- Number of states.  */
+#define YYNSTATES  186
 
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
+   by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
 #define YYMAXUTOK   299
 
-#define YYTRANSLATE(YYX)						\
+#define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, without out-of-bounds checking.  */
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -493,69 +507,7 @@ static const yytype_uint8 yytranslate[]
 };
 
 #if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const yytype_uint16 yyprhs[] =
-{
-       0,     0,     3,     5,     8,     9,    12,    13,    18,    19,
-      23,    25,    27,    29,    31,    34,    37,    41,    42,    44,
-      46,    50,    55,    56,    58,    60,    63,    65,    67,    69,
-      71,    73,    75,    77,    79,    81,    86,    88,    91,    94,
-      97,   101,   105,   109,   112,   115,   118,   120,   122,   124,
-     126,   128,   130,   132,   134,   136,   138,   140,   143,   144,
-     146,   148,   151,   153,   155,   157,   159,   162,   164,   166,
-     168,   173,   178,   181,   185,   189,   192,   194,   196,   198,
-     203,   208,   211,   215,   219,   222,   224,   228,   229,   231,
-     233,   237,   240,   243,   245,   246,   248,   250,   255,   260,
-     263,   267,   271,   275,   276,   278,   281,   285,   289,   290,
-     292,   294,   297,   301,   304,   305,   307,   309,   313,   316,
-     319,   321,   324,   325,   328,   332,   337,   339,   343,   345,
-     349,   352,   353,   355
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int8 yyrhs[] =
-{
-      55,     0,    -1,    56,    -1,    55,    56,    -1,    -1,    57,
-      58,    -1,    -1,    12,    23,    59,    61,    -1,    -1,    23,
-      60,    61,    -1,    61,    -1,    85,    -1,   100,    -1,   102,
-      -1,     1,    45,    -1,     1,    46,    -1,    65,    62,    45,
-      -1,    -1,    63,    -1,    64,    -1,    63,    47,    64,    -1,
-      75,   101,    96,    86,    -1,    -1,    66,    -1,    67,    -1,
-      66,    67,    -1,    68,    -1,    69,    -1,     5,    -1,    17,
-      -1,    21,    -1,    11,    -1,    14,    -1,    70,    -1,    74,
-      -1,    28,    48,    82,    49,    -1,    32,    -1,    22,    38,
-      -1,    24,    38,    -1,    10,    38,    -1,    22,    38,    88,
-      -1,    24,    38,    88,    -1,    10,    38,    97,    -1,    10,
-      97,    -1,    22,    88,    -1,    24,    88,    -1,     7,    -1,
-      19,    -1,    15,    -1,    16,    -1,    20,    -1,    25,    -1,
-      13,    -1,     9,    -1,    26,    -1,     6,    -1,    42,    -1,
-      50,    72,    -1,    -1,    73,    -1,    74,    -1,    73,    74,
-      -1,     8,    -1,    27,    -1,    31,    -1,    18,    -1,    71,
-      75,    -1,    76,    -1,    38,    -1,    42,    -1,    76,    48,
-      79,    49,    -1,    76,    48,     1,    49,    -1,    76,    34,
-      -1,    48,    75,    49,    -1,    48,     1,    49,    -1,    71,
-      77,    -1,    78,    -1,    38,    -1,    42,    -1,    78,    48,
-      79,    49,    -1,    78,    48,     1,    49,    -1,    78,    34,
-      -1,    48,    77,    49,    -1,    48,     1,    49,    -1,    80,
-      37,    -1,    80,    -1,    81,    47,    37,    -1,    -1,    81,
-      -1,    82,    -1,    81,    47,    82,    -1,    66,    83,    -1,
-      71,    83,    -1,    84,    -1,    -1,    38,    -1,    42,    -1,
-      84,    48,    79,    49,    -1,    84,    48,     1,    49,    -1,
-      84,    34,    -1,    48,    83,    49,    -1,    48,     1,    49,
-      -1,    65,    75,    33,    -1,    -1,    87,    -1,    51,    35,
-      -1,    52,    89,    46,    -1,    52,     1,    46,    -1,    -1,
-      90,    -1,    91,    -1,    90,    91,    -1,    65,    92,    45,
-      -1,     1,    45,    -1,    -1,    93,    -1,    94,    -1,    93,
-      47,    94,    -1,    77,    96,    -1,    38,    95,    -1,    95,
-      -1,    53,    35,    -1,    -1,    96,    31,    -1,    52,    98,
-      46,    -1,    52,    98,    47,    46,    -1,    99,    -1,    98,
-      47,    99,    -1,    38,    -1,    38,    51,    35,    -1,    30,
-      45,    -1,    -1,    30,    -1,    29,    48,    38,    49,    45,
-      -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
        0,   124,   124,   125,   129,   129,   135,   135,   137,   137,
@@ -565,13 +517,13 @@ static const yytype_uint16 yyrline[] =
      237,   239,   241,   246,   249,   250,   254,   255,   256,   257,
      258,   259,   260,   261,   262,   263,   264,   268,   273,   274,
      278,   279,   283,   283,   283,   284,   292,   293,   297,   306,
-     315,   317,   319,   321,   323,   330,   331,   335,   336,   337,
-     339,   341,   343,   345,   350,   351,   352,   356,   357,   361,
-     362,   367,   372,   374,   378,   379,   387,   391,   393,   395,
-     397,   399,   404,   413,   414,   419,   424,   425,   429,   430,
-     434,   435,   439,   441,   446,   447,   451,   452,   456,   457,
-     458,   462,   466,   467,   471,   472,   476,   477,   480,   485,
-     493,   497,   498,   502
+     315,   317,   319,   321,   328,   329,   333,   334,   335,   337,
+     339,   341,   343,   348,   349,   350,   354,   355,   359,   360,
+     365,   370,   372,   376,   377,   385,   389,   391,   393,   395,
+     397,   402,   411,   412,   417,   422,   423,   427,   428,   432,
+     433,   437,   439,   444,   445,   449,   450,   454,   455,   456,
+     460,   464,   465,   469,   470,   474,   475,   478,   483,   491,
+     495,   496,   500
 };
 #endif
 
@@ -606,13 +558,13 @@ static const char *const yytname[] =
   "member_declarator_list_opt", "member_declarator_list",
   "member_declarator", "member_bitfield_declarator", "attribute_opt",
   "enum_body", "enumerator_list", "enumerator", "asm_definition",
-  "asm_phrase_opt", "export_definition", YY_NULL
+  "asm_phrase_opt", "export_definition", YY_NULLPTR
 };
 #endif
 
 # ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+   (internal) symbol number NUM (which must be that of a token).  */
 static const yytype_uint16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
@@ -624,47 +576,44 @@ static const yytype_uint16 yytoknum[] =
 };
 # endif
 
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,    54,    55,    55,    57,    56,    59,    58,    60,    58,
-      58,    58,    58,    58,    58,    58,    61,    62,    62,    63,
-      63,    64,    65,    65,    66,    66,    67,    67,    68,    68,
-      68,    68,    68,    69,    69,    69,    69,    69,    69,    69,
-      69,    69,    69,    69,    69,    69,    70,    70,    70,    70,
-      70,    70,    70,    70,    70,    70,    70,    71,    72,    72,
-      73,    73,    74,    74,    74,    74,    75,    75,    76,    76,
-      76,    76,    76,    76,    76,    77,    77,    78,    78,    78,
-      78,    78,    78,    78,    79,    79,    79,    80,    80,    81,
-      81,    82,    83,    83,    84,    84,    84,    84,    84,    84,
-      84,    84,    85,    86,    86,    87,    88,    88,    89,    89,
-      90,    90,    91,    91,    92,    92,    93,    93,    94,    94,
-      94,    95,    96,    96,    97,    97,    98,    98,    99,    99,
-     100,   101,   101,   102
-};
+#define YYPACT_NINF -135
 
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
+#define yypact_value_is_default(Yystate) \
+  (!!((Yystate) == (-135)))
+
+#define YYTABLE_NINF -109
+
+#define yytable_value_is_error(Yytable_value) \
+  0
+
+  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+     STATE-NUM.  */
+static const yytype_int16 yypact[] =
 {
-       0,     2,     1,     2,     0,     2,     0,     4,     0,     3,
-       1,     1,     1,     1,     2,     2,     3,     0,     1,     1,
-       3,     4,     0,     1,     1,     2,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     4,     1,     2,     2,     2,
-       3,     3,     3,     2,     2,     2,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     2,     0,     1,
-       1,     2,     1,     1,     1,     1,     2,     1,     1,     1,
-       4,     4,     2,     3,     3,     2,     1,     1,     1,     4,
-       4,     2,     3,     3,     2,     1,     3,     0,     1,     1,
-       3,     2,     2,     1,     0,     1,     1,     4,     4,     2,
-       3,     3,     3,     0,     1,     2,     3,     3,     0,     1,
-       1,     2,     3,     2,     0,     1,     1,     3,     2,     2,
-       1,     2,     0,     2,     3,     4,     1,     3,     1,     3,
-       2,     0,     1,     5
+    -135,    38,  -135,   206,  -135,  -135,    22,  -135,  -135,  -135,
+    -135,  -135,   -24,  -135,    20,  -135,  -135,  -135,  -135,  -135,
+    -135,  -135,  -135,  -135,   -23,  -135,     6,  -135,  -135,  -135,
+      -2,    15,    24,  -135,  -135,  -135,  -135,  -135,    41,   471,
+    -135,  -135,  -135,  -135,  -135,  -135,  -135,  -135,  -135,  -135,
+      13,    36,  -135,  -135,    35,   106,  -135,   471,    35,  -135,
+     471,    44,  -135,  -135,  -135,    41,    39,    45,    48,  -135,
+      41,   -10,    25,  -135,  -135,    47,    34,  -135,   471,  -135,
+      26,   -26,    53,   156,  -135,  -135,    41,  -135,   387,    52,
+      57,    59,  -135,    39,  -135,  -135,    41,  -135,  -135,  -135,
+    -135,  -135,   252,    67,  -135,   -21,  -135,  -135,  -135,    51,
+    -135,    12,    83,    46,  -135,    27,    84,    88,  -135,  -135,
+    -135,    91,  -135,   109,  -135,  -135,     3,    55,  -135,    30,
+    -135,    95,  -135,  -135,  -135,   -20,    92,    93,   108,    96,
+    -135,  -135,  -135,  -135,  -135,    97,  -135,    98,  -135,  -135,
+     118,  -135,   297,  -135,   -26,   101,  -135,   104,  -135,  -135,
+     342,  -135,  -135,   120,  -135,  -135,  -135,  -135,  -135,   433,
+    -135,  -135,   111,   119,  -135,  -135,  -135,   130,   136,  -135,
+    -135,  -135,  -135,  -135,  -135,  -135
 };
 
-/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
-   Performed when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
+  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+     Performed when YYTABLE does not specify something else to do.  Zero
+     means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
        4,     4,     2,     0,     1,     3,     0,    28,    55,    46,
@@ -673,191 +622,158 @@ static const yytype_uint8 yydefact[] =
        0,     0,     0,    64,    36,    56,     5,    10,    17,    23,
       24,    26,    27,    33,    34,    11,    12,    13,    14,    15,
       39,     0,    43,     6,    37,     0,    44,    22,    38,    45,
-       0,     0,   130,    68,    69,     0,    58,     0,    18,    19,
-       0,   131,    67,    25,    42,   128,     0,   126,    22,    40,
-       0,   114,     0,     0,   110,     9,    17,    41,    94,     0,
-       0,     0,     0,    57,    59,    60,    16,     0,    66,   132,
-     102,   122,    72,     0,     0,   124,     0,     7,   113,   107,
-      77,    78,     0,     0,     0,   122,    76,     0,   115,   116,
-     120,   106,     0,   111,   131,    95,    56,     0,    94,    91,
-      93,    35,     0,    74,    73,    61,    20,   103,     0,     0,
-      85,    88,    89,   129,   125,   127,   119,     0,    77,     0,
-     121,    75,   118,    81,     0,   112,     0,     0,    96,     0,
-      92,    99,     0,   133,   123,     0,    21,   104,    71,    70,
-      84,     0,    83,    82,     0,     0,   117,   101,   100,     0,
-       0,   105,    86,    90,    80,    79,    98,    97
-};
-
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -1,     1,     2,     3,    36,    78,    57,    37,    67,    68,
-      69,    81,    39,    40,    41,    42,    43,    70,    93,    94,
-      44,   124,    72,   115,   116,   139,   140,   141,   142,   129,
-     130,    45,   166,   167,    56,    82,    83,    84,   117,   118,
-     119,   120,   137,    52,    76,    77,    46,   101,    47
+       0,     0,   129,    68,    69,     0,    58,     0,    18,    19,
+       0,   130,    67,    25,    42,   127,     0,   125,    22,    40,
+       0,   113,     0,     0,   109,     9,    17,    41,    93,     0,
+       0,     0,    57,    59,    60,    16,     0,    66,   131,   101,
+     121,    72,     0,     0,   123,     0,     7,   112,   106,    76,
+      77,     0,     0,     0,   121,    75,     0,   114,   115,   119,
+     105,     0,   110,   130,    94,    56,     0,    93,    90,    92,
+      35,     0,    73,    61,    20,   102,     0,     0,    84,    87,
+      88,   128,   124,   126,   118,     0,    76,     0,   120,    74,
+     117,    80,     0,   111,     0,     0,    95,     0,    91,    98,
+       0,   132,   122,     0,    21,   103,    71,    70,    83,     0,
+      82,    81,     0,     0,   116,   100,    99,     0,     0,   104,
+      85,    89,    79,    78,    97,    96
 };
 
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -92
-static const yytype_int16 yypact[] =
+  /* YYPGOTO[NTERM-NUM].  */
+static const yytype_int16 yypgoto[] =
 {
-     -92,    19,   -92,   208,   -92,   -92,    39,   -92,   -92,   -92,
-     -92,   -92,   -27,   -92,    23,   -92,   -92,   -92,   -92,   -92,
-     -92,   -92,   -92,   -92,   -22,   -92,     9,   -92,   -92,   -92,
-      -6,    16,    25,   -92,   -92,   -92,   -92,   -92,    31,   473,
-     -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
-      49,    37,   -92,   -92,    51,   108,   -92,   473,    51,   -92,
-     473,    59,   -92,   -92,   -92,    12,    -3,    60,    57,   -92,
-      31,    -7,    24,   -92,   -92,    55,    42,   -92,   473,   -92,
-      46,   -21,    61,   158,   -92,   -92,    31,   -92,   389,    71,
-      82,    88,    89,   -92,    -3,   -92,   -92,    31,   -92,   -92,
-     -92,   -92,   -92,   254,    73,   -92,   -24,   -92,   -92,   -92,
-      90,   -92,    17,    75,    45,   -92,    32,    96,    95,   -92,
-     -92,   -92,    99,   -92,   115,   -92,   -92,     3,    48,   -92,
-      34,   -92,   102,   -92,   -92,   -92,   -92,   -11,   100,   103,
-     111,   104,   -92,   -92,   -92,   -92,   -92,   106,   -92,   113,
-     -92,   -92,   126,   -92,   299,   -92,   -21,   121,   -92,   132,
-     -92,   -92,   344,   -92,   -92,   125,   -92,   -92,   -92,   -92,
-     -92,   435,   -92,   -92,   138,   139,   -92,   -92,   -92,   142,
-     143,   -92,   -92,   -92,   -92,   -92,   -92,   -92
+    -135,  -135,   157,  -135,  -135,  -135,  -135,   -48,  -135,  -135,
+      90,    -1,   -60,   -33,  -135,  -135,  -135,   -78,  -135,  -135,
+     -61,   -31,  -135,   -92,  -135,  -134,  -135,  -135,   -59,   -41,
+    -135,  -135,  -135,  -135,   -18,  -135,  -135,   107,  -135,  -135,
+      37,    80,    78,   143,  -135,    94,  -135,  -135,  -135
 };
 
-/* YYPGOTO[NTERM-NUM].  */
-static const yytype_int16 yypgoto[] =
+  /* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
 {
-     -92,   -92,   192,   -92,   -92,   -92,   -92,   -47,   -92,   -92,
-      97,     0,   -60,   -32,   -92,   -92,   -92,   -79,   -92,   -92,
-     -58,   -26,   -92,   -38,   -92,   -91,   -92,   -92,   -59,   -28,
-     -92,   -92,   -92,   -92,   -20,   -92,   -92,   112,   -92,   -92,
-      41,    91,    83,   149,   -92,   101,   -92,   -92,   -92
+      -1,     1,     2,     3,    36,    78,    57,    37,    67,    68,
+      69,    81,    39,    40,    41,    42,    43,    70,    92,    93,
+      44,   123,    72,   114,   115,   137,   138,   139,   140,   128,
+     129,    45,   164,   165,    56,    82,    83,    84,   116,   117,
+     118,   119,   135,    52,    76,    77,    46,   100,    47
 };
 
-/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
-   positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -110
+  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
+     positive, shift that token.  If negative, reduce the rule whose
+     number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      88,    89,   114,    38,   157,    10,    59,    73,    95,   128,
-      85,    50,    71,    91,    75,    20,    54,   110,   147,     4,
-     164,   111,   144,    99,    29,    51,   100,   112,    33,    66,
-      55,   107,   113,   114,    79,   114,   135,   -94,    87,    92,
-     165,   125,    60,    88,    98,   158,    53,    58,   128,   128,
-      63,   127,   -94,    66,    64,   148,    73,    86,   102,   111,
-      65,    55,    66,   175,    61,   112,   153,    66,   161,    63,
-      62,   180,   103,    64,   149,    75,   151,   114,    86,    65,
-     154,    66,   162,   148,    48,    49,   125,   111,   105,   106,
-     158,   108,   109,   112,    88,    66,   127,    90,    66,   159,
-     160,    51,    88,    55,    97,    96,   104,   121,   143,    80,
-     150,    88,   183,     7,     8,     9,    10,    11,    12,    13,
-     131,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,   132,    26,    27,    28,    29,    30,   133,   134,    33,
-      34,   155,   156,   113,   108,    99,   -22,   163,   170,   168,
-      35,   171,   169,   -22,  -108,   172,   -22,   164,   -22,   122,
-     181,   -22,   173,     7,     8,     9,    10,    11,    12,    13,
-     177,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,   178,    26,    27,    28,    29,    30,   184,   185,    33,
-      34,   186,   187,     5,   136,   123,   -22,   176,   152,    74,
-      35,   146,     0,   -22,  -109,     0,   -22,   145,   -22,     6,
-       0,   -22,     0,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,     0,     0,     0,     0,     0,   -22,     0,     0,     0,
-      35,     0,     0,   -22,     0,   138,   -22,     0,   -22,     7,
-       8,     9,    10,    11,    12,    13,     0,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,    26,    27,
-      28,    29,    30,     0,     0,    33,    34,     0,     0,     0,
-       0,   -87,     0,     0,     0,     0,    35,     0,     0,     0,
-     174,     0,     0,   -87,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,    26,    27,    28,    29,    30,     0,     0,
-      33,    34,     0,     0,     0,     0,   -87,     0,     0,     0,
-       0,    35,     0,     0,     0,   179,     0,     0,   -87,     7,
-       8,     9,    10,    11,    12,    13,     0,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,    26,    27,
-      28,    29,    30,     0,     0,    33,    34,     0,     0,     0,
-       0,   -87,     0,     0,     0,     0,    35,     0,     0,     0,
-       0,     0,     0,   -87,     7,     8,     9,    10,    11,    12,
-      13,     0,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,    26,    27,    28,    29,    30,     0,     0,
-      33,    34,     0,     0,     0,     0,     0,   125,     0,     0,
-       0,   126,     0,     0,     0,     0,     0,   127,     0,    66,
-       7,     8,     9,    10,    11,    12,    13,     0,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,    26,
-      27,    28,    29,    30,     0,     0,    33,    34,     0,     0,
-       0,     0,   182,     0,     0,     0,     0,    35,     7,     8,
+      88,    89,    38,   113,   155,    94,    73,    71,    59,    85,
+     127,   162,   109,   145,    50,    54,   110,    75,   173,   147,
+      98,   149,   111,    99,    66,   142,   178,   112,    51,    55,
+     106,   163,   133,   113,    91,   113,    79,   -93,     4,    97,
+      87,   124,    88,    53,    58,   156,    60,    10,   127,   127,
+     146,   126,   -93,    66,   110,    73,    86,    20,    55,   101,
+     111,   151,    66,    61,   159,    51,    29,    48,    49,    62,
+      33,   107,   108,   102,    75,   152,   113,    86,   160,    63,
+     104,   105,    90,    64,   146,   157,   158,    55,   110,    65,
+      95,    66,    88,   124,   111,    96,    66,   156,   103,   120,
+      88,   130,   141,   126,   112,    66,   131,    80,   132,    88,
+     181,     7,     8,     9,    10,    11,    12,    13,   148,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,   153,
+      26,    27,    28,    29,    30,   154,   107,    33,    34,    98,
+     161,   166,   167,   169,   -22,   168,   170,   171,    35,   162,
+     175,   -22,  -107,   176,   -22,   179,   -22,   121,     5,   -22,
+     182,     7,     8,     9,    10,    11,    12,    13,   183,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,   184,
+      26,    27,    28,    29,    30,   185,   134,    33,    34,   144,
+     122,   174,   150,    74,   -22,     0,     0,     0,    35,   143,
+       0,   -22,  -108,     0,   -22,     0,   -22,     6,     0,   -22,
+       0,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,     0,
+       0,     0,     0,     0,   -22,     0,     0,     0,    35,     0,
+       0,   -22,     0,   136,   -22,     0,   -22,     7,     8,     9,
+      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,     0,    26,    27,    28,    29,
+      30,     0,     0,    33,    34,     0,     0,     0,     0,   -86,
+       0,     0,     0,     0,    35,     0,     0,     0,   172,     0,
+       0,   -86,     7,     8,     9,    10,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+       0,    26,    27,    28,    29,    30,     0,     0,    33,    34,
+       0,     0,     0,     0,   -86,     0,     0,     0,     0,    35,
+       0,     0,     0,   177,     0,     0,   -86,     7,     8,     9,
+      10,    11,    12,    13,     0,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,     0,    26,    27,    28,    29,
+      30,     0,     0,    33,    34,     0,     0,     0,     0,   -86,
+       0,     0,     0,     0,    35,     0,     0,     0,     0,     0,
+       0,   -86,     7,     8,     9,    10,    11,    12,    13,     0,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+       0,    26,    27,    28,    29,    30,     0,     0,    33,    34,
+       0,     0,     0,     0,     0,   124,     0,     0,     0,   125,
+       0,     0,     0,     0,     0,   126,     0,    66,     7,     8,
        9,    10,    11,    12,    13,     0,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,     0,    26,    27,    28,
       29,    30,     0,     0,    33,    34,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    35
+     180,     0,     0,     0,     0,    35,     7,     8,     9,    10,
+      11,    12,    13,     0,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,     0,    26,    27,    28,    29,    30,
+       0,     0,    33,    34,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    35
 };
 
-#define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-92)))
-
-#define yytable_value_is_error(Yytable_value) \
-  YYID (0)
-
 static const yytype_int16 yycheck[] =
 {
-      60,    60,    81,     3,     1,     8,    26,    39,    66,    88,
-      57,    38,    38,     1,    38,    18,    38,    38,     1,     0,
-      31,    42,    46,    30,    27,    52,    33,    48,    31,    50,
-      52,    78,    53,   112,    54,   114,    94,    34,    58,    65,
-      51,    38,    48,   103,    70,    42,    23,    38,   127,   128,
-      38,    48,    49,    50,    42,    38,    88,    57,    34,    42,
-      48,    52,    50,   154,    48,    48,    34,    50,    34,    38,
-      45,   162,    48,    42,   112,    38,   114,   156,    78,    48,
-      48,    50,    48,    38,    45,    46,    38,    42,    46,    47,
-      42,    45,    46,    48,   154,    50,    48,    38,    50,   127,
-     128,    52,   162,    52,    47,    45,    51,    46,    35,     1,
-      35,   171,   171,     5,     6,     7,     8,     9,    10,    11,
-      49,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    49,    24,    25,    26,    27,    28,    49,    49,    31,
-      32,    45,    47,    53,    45,    30,    38,    45,    37,    49,
-      42,    47,    49,    45,    46,    49,    48,    31,    50,     1,
-      35,    53,    49,     5,     6,     7,     8,     9,    10,    11,
-      49,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    49,    24,    25,    26,    27,    28,    49,    49,    31,
-      32,    49,    49,     1,    97,    83,    38,   156,   115,    50,
-      42,   110,    -1,    45,    46,    -1,    48,   106,    50,     1,
-      -1,    53,    -1,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    -1,    -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,
-      42,    -1,    -1,    45,    -1,     1,    48,    -1,    50,     5,
-       6,     7,     8,     9,    10,    11,    -1,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    -1,    24,    25,
-      26,    27,    28,    -1,    -1,    31,    32,    -1,    -1,    -1,
-      -1,    37,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,
-       1,    -1,    -1,    49,     5,     6,     7,     8,     9,    10,
-      11,    -1,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    -1,    24,    25,    26,    27,    28,    -1,    -1,
-      31,    32,    -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,
-      -1,    42,    -1,    -1,    -1,     1,    -1,    -1,    49,     5,
-       6,     7,     8,     9,    10,    11,    -1,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    -1,    24,    25,
-      26,    27,    28,    -1,    -1,    31,    32,    -1,    -1,    -1,
-      -1,    37,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,
-      -1,    -1,    -1,    49,     5,     6,     7,     8,     9,    10,
-      11,    -1,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    -1,    24,    25,    26,    27,    28,    -1,    -1,
-      31,    32,    -1,    -1,    -1,    -1,    -1,    38,    -1,    -1,
-      -1,    42,    -1,    -1,    -1,    -1,    -1,    48,    -1,    50,
-       5,     6,     7,     8,     9,    10,    11,    -1,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    -1,    24,
-      25,    26,    27,    28,    -1,    -1,    31,    32,    -1,    -1,
-      -1,    -1,    37,    -1,    -1,    -1,    -1,    42,     5,     6,
+      60,    60,     3,    81,     1,    66,    39,    38,    26,    57,
+      88,    31,    38,     1,    38,    38,    42,    38,   152,   111,
+      30,   113,    48,    33,    50,    46,   160,    53,    52,    52,
+      78,    51,    93,   111,    65,   113,    54,    34,     0,    70,
+      58,    38,   102,    23,    38,    42,    48,     8,   126,   127,
+      38,    48,    49,    50,    42,    88,    57,    18,    52,    34,
+      48,    34,    50,    48,    34,    52,    27,    45,    46,    45,
+      31,    45,    46,    48,    38,    48,   154,    78,    48,    38,
+      46,    47,    38,    42,    38,   126,   127,    52,    42,    48,
+      45,    50,   152,    38,    48,    47,    50,    42,    51,    46,
+     160,    49,    35,    48,    53,    50,    49,     1,    49,   169,
+     169,     5,     6,     7,     8,     9,    10,    11,    35,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    45,
+      24,    25,    26,    27,    28,    47,    45,    31,    32,    30,
+      45,    49,    49,    47,    38,    37,    49,    49,    42,    31,
+      49,    45,    46,    49,    48,    35,    50,     1,     1,    53,
+      49,     5,     6,     7,     8,     9,    10,    11,    49,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    49,
+      24,    25,    26,    27,    28,    49,    96,    31,    32,   109,
+      83,   154,   114,    50,    38,    -1,    -1,    -1,    42,   105,
+      -1,    45,    46,    -1,    48,    -1,    50,     1,    -1,    53,
+      -1,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    -1,
+      -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,    42,    -1,
+      -1,    45,    -1,     1,    48,    -1,    50,     5,     6,     7,
+       8,     9,    10,    11,    -1,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    -1,    24,    25,    26,    27,
+      28,    -1,    -1,    31,    32,    -1,    -1,    -1,    -1,    37,
+      -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,     1,    -1,
+      -1,    49,     5,     6,     7,     8,     9,    10,    11,    -1,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      -1,    24,    25,    26,    27,    28,    -1,    -1,    31,    32,
+      -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,    -1,    42,
+      -1,    -1,    -1,     1,    -1,    -1,    49,     5,     6,     7,
+       8,     9,    10,    11,    -1,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    -1,    24,    25,    26,    27,
+      28,    -1,    -1,    31,    32,    -1,    -1,    -1,    -1,    37,
+      -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,
+      -1,    49,     5,     6,     7,     8,     9,    10,    11,    -1,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      -1,    24,    25,    26,    27,    28,    -1,    -1,    31,    32,
+      -1,    -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,    42,
+      -1,    -1,    -1,    -1,    -1,    48,    -1,    50,     5,     6,
        7,     8,     9,    10,    11,    -1,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    -1,    24,    25,    26,
       27,    28,    -1,    -1,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    42
+      37,    -1,    -1,    -1,    -1,    42,     5,     6,     7,     8,
+       9,    10,    11,    -1,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    -1,    24,    25,    26,    27,    28,
+      -1,    -1,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    42
 };
 
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
+  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
        0,    55,    56,    57,     0,    56,     1,     5,     6,     7,
@@ -869,42 +785,66 @@ static const yytype_uint8 yystos[] =
       48,    48,    45,    38,    42,    48,    50,    62,    63,    64,
       71,    75,    76,    67,    97,    38,    98,    99,    59,    88,
        1,    65,    89,    90,    91,    61,    65,    88,    66,    82,
-      38,     1,    75,    72,    73,    74,    45,    47,    75,    30,
-      33,   101,    34,    48,    51,    46,    47,    61,    45,    46,
-      38,    42,    48,    53,    71,    77,    78,    92,    93,    94,
-      95,    46,     1,    91,    75,    38,    42,    48,    71,    83,
-      84,    49,    49,    49,    49,    74,    64,    96,     1,    79,
-      80,    81,    82,    35,    46,    99,    95,     1,    38,    77,
-      35,    77,    96,    34,    48,    45,    47,     1,    42,    83,
-      83,    34,    48,    45,    31,    51,    86,    87,    49,    49,
-      37,    47,    49,    49,     1,    79,    94,    49,    49,     1,
-      79,    35,    37,    82,    49,    49,    49,    49
+      38,    75,    72,    73,    74,    45,    47,    75,    30,    33,
+     101,    34,    48,    51,    46,    47,    61,    45,    46,    38,
+      42,    48,    53,    71,    77,    78,    92,    93,    94,    95,
+      46,     1,    91,    75,    38,    42,    48,    71,    83,    84,
+      49,    49,    49,    74,    64,    96,     1,    79,    80,    81,
+      82,    35,    46,    99,    95,     1,    38,    77,    35,    77,
+      96,    34,    48,    45,    47,     1,    42,    83,    83,    34,
+      48,    45,    31,    51,    86,    87,    49,    49,    37,    47,
+      49,    49,     1,    79,    94,    49,    49,     1,    79,    35,
+      37,    82,    49,    49,    49,    49
 };
 
-#define yyerrok		(yyerrstatus = 0)
-#define yyclearin	(yychar = YYEMPTY)
-#define YYEMPTY		(-2)
-#define YYEOF		0
-
-#define YYACCEPT	goto yyacceptlab
-#define YYABORT		goto yyabortlab
-#define YYERROR		goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  However,
-   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
-   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
-   discussed.  */
-
-#define YYFAIL		goto yyerrlab
-#if defined YYFAIL
-  /* This is here to suppress warnings from the GCC cpp's
-     -Wunused-macros.  Normally we don't worry about that warning, but
-     some users do, and we want to make it easy for users to remove
-     YYFAIL uses, which will produce warnings from Bison 2.5.  */
-#endif
+  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    54,    55,    55,    57,    56,    59,    58,    60,    58,
+      58,    58,    58,    58,    58,    58,    61,    62,    62,    63,
+      63,    64,    65,    65,    66,    66,    67,    67,    68,    68,
+      68,    68,    68,    69,    69,    69,    69,    69,    69,    69,
+      69,    69,    69,    69,    69,    69,    70,    70,    70,    70,
+      70,    70,    70,    70,    70,    70,    70,    71,    72,    72,
+      73,    73,    74,    74,    74,    74,    75,    75,    76,    76,
+      76,    76,    76,    76,    77,    77,    78,    78,    78,    78,
+      78,    78,    78,    79,    79,    79,    80,    80,    81,    81,
+      82,    83,    83,    84,    84,    84,    84,    84,    84,    84,
+      84,    85,    86,    86,    87,    88,    88,    89,    89,    90,
+      90,    91,    91,    92,    92,    93,    93,    94,    94,    94,
+      95,    96,    96,    97,    97,    98,    98,    99,    99,   100,
+     101,   101,   102
+};
+
+  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     1,     2,     0,     2,     0,     4,     0,     3,
+       1,     1,     1,     1,     2,     2,     3,     0,     1,     1,
+       3,     4,     0,     1,     1,     2,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     4,     1,     2,     2,     2,
+       3,     3,     3,     2,     2,     2,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     2,     0,     1,
+       1,     2,     1,     1,     1,     1,     2,     1,     1,     1,
+       4,     4,     2,     3,     2,     1,     1,     1,     4,     4,
+       2,     3,     3,     2,     1,     3,     0,     1,     1,     3,
+       2,     2,     1,     0,     1,     1,     4,     4,     2,     3,
+       3,     3,     0,     1,     2,     3,     3,     0,     1,     1,
+       2,     3,     2,     0,     1,     1,     3,     2,     2,     1,
+       2,     0,     2,     3,     4,     1,     3,     1,     3,     2,
+       0,     1,     5
+};
+
+
+#define yyerrok         (yyerrstatus = 0)
+#define yyclearin       (yychar = YYEMPTY)
+#define YYEMPTY         (-2)
+#define YYEOF           0
+
+#define YYACCEPT        goto yyacceptlab
+#define YYABORT         goto yyabortlab
+#define YYERROR         goto yyerrorlab
+
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
@@ -921,27 +861,15 @@ do
   else                                                          \
     {                                                           \
       yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;							\
-    }								\
-while (YYID (0))
+      YYERROR;                                                  \
+    }                                                           \
+while (0)
 
 /* Error token number */
-#define YYTERROR	1
-#define YYERRCODE	256
+#define YYTERROR        1
+#define YYERRCODE       256
 
 
-/* This macro is provided for backward compatibility. */
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
 
 /* Enable debugging if requested.  */
 #if YYDEBUG
@@ -951,40 +879,36 @@ while (YYID (0))
 #  define YYFPRINTF fprintf
 # endif
 
-# define YYDPRINTF(Args)			\
-do {						\
-  if (yydebug)					\
-    YYFPRINTF Args;				\
-} while (YYID (0))
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
-do {									  \
-  if (yydebug)								  \
-    {									  \
-      YYFPRINTF (stderr, "%s ", Title);					  \
-      yy_symbol_print (stderr,						  \
-		  Type, Value); \
-      YYFPRINTF (stderr, "\n");						  \
-    }									  \
-} while (YYID (0))
+# define YYDPRINTF(Args)                        \
+do {                                            \
+  if (yydebug)                                  \
+    YYFPRINTF Args;                             \
+} while (0)
 
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
+
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
+do {                                                                      \
+  if (yydebug)                                                            \
+    {                                                                     \
+      YYFPRINTF (stderr, "%s ", Title);                                   \
+      yy_symbol_print (stderr,                                            \
+                  Type, Value); \
+      YYFPRINTF (stderr, "\n");                                           \
+    }                                                                     \
+} while (0)
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
 
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+/*----------------------------------------.
+| Print this symbol's value on YYOUTPUT.  |
+`----------------------------------------*/
+
 static void
 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
 {
   FILE *yyo = yyoutput;
   YYUSE (yyo);
@@ -993,14 +917,8 @@ yy_symbol_value_print (yyoutput, yytype,
 # ifdef YYPRINT
   if (yytype < YYNTOKENS)
     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
 # endif
-  switch (yytype)
-    {
-      default:
-        break;
-    }
+  YYUSE (yytype);
 }
 
 
@@ -1008,22 +926,11 @@ yy_symbol_value_print (yyoutput, yytype,
 | Print this symbol on YYOUTPUT.  |
 `--------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
 {
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+  YYFPRINTF (yyoutput, "%s %s (",
+             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
 
   yy_symbol_value_print (yyoutput, yytype, yyvaluep);
   YYFPRINTF (yyoutput, ")");
@@ -1034,16 +941,8 @@ yy_symbol_print (yyoutput, yytype, yyval
 | TOP (included).                                                   |
 `------------------------------------------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-#else
-static void
-yy_stack_print (yybottom, yytop)
-    yytype_int16 *yybottom;
-    yytype_int16 *yytop;
-#endif
 {
   YYFPRINTF (stderr, "Stack now");
   for (; yybottom <= yytop; yybottom++)
@@ -1054,49 +953,42 @@ yy_stack_print (yybottom, yytop)
   YYFPRINTF (stderr, "\n");
 }
 
-# define YY_STACK_PRINT(Bottom, Top)				\
-do {								\
-  if (yydebug)							\
-    yy_stack_print ((Bottom), (Top));				\
-} while (YYID (0))
+# define YY_STACK_PRINT(Bottom, Top)                            \
+do {                                                            \
+  if (yydebug)                                                  \
+    yy_stack_print ((Bottom), (Top));                           \
+} while (0)
 
 
 /*------------------------------------------------.
 | Report that the YYRULE is going to be reduced.  |
 `------------------------------------------------*/
 
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
-#else
 static void
-yy_reduce_print (yyvsp, yyrule)
-    YYSTYPE *yyvsp;
-    int yyrule;
-#endif
+yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
 {
+  unsigned long int yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
-  unsigned long int yylno = yyrline[yyrule];
   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-	     yyrule - 1, yylno);
+             yyrule - 1, yylno);
   /* The symbols being reduced.  */
   for (yyi = 0; yyi < yynrhs; yyi++)
     {
       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-		       &(yyvsp[(yyi + 1) - (yynrhs)])
-		       		       );
+      yy_symbol_print (stderr,
+                       yystos[yyssp[yyi + 1 - yynrhs]],
+                       &(yyvsp[(yyi + 1) - (yynrhs)])
+                                              );
       YYFPRINTF (stderr, "\n");
     }
 }
 
-# define YY_REDUCE_PRINT(Rule)		\
-do {					\
-  if (yydebug)				\
-    yy_reduce_print (yyvsp, Rule); \
-} while (YYID (0))
+# define YY_REDUCE_PRINT(Rule)          \
+do {                                    \
+  if (yydebug)                          \
+    yy_reduce_print (yyssp, yyvsp, Rule); \
+} while (0)
 
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
@@ -1110,7 +1002,7 @@ int yydebug;
 
 
 /* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef	YYINITDEPTH
+#ifndef YYINITDEPTH
 # define YYINITDEPTH 200
 #endif
 
@@ -1133,15 +1025,8 @@ int yydebug;
 #   define yystrlen strlen
 #  else
 /* Return the length of YYSTR.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static YYSIZE_T
 yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
-    const char *yystr;
-#endif
 {
   YYSIZE_T yylen;
   for (yylen = 0; yystr[yylen]; yylen++)
@@ -1157,16 +1042,8 @@ yystrlen (yystr)
 #  else
 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
    YYDEST.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static char *
 yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
-    char *yydest;
-    const char *yysrc;
-#endif
 {
   char *yyd = yydest;
   const char *yys = yysrc;
@@ -1196,27 +1073,27 @@ yytnamerr (char *yyres, const char *yyst
       char const *yyp = yystr;
 
       for (;;)
-	switch (*++yyp)
-	  {
-	  case '\'':
-	  case ',':
-	    goto do_not_strip_quotes;
-
-	  case '\\':
-	    if (*++yyp != '\\')
-	      goto do_not_strip_quotes;
-	    /* Fall through.  */
-	  default:
-	    if (yyres)
-	      yyres[yyn] = *yyp;
-	    yyn++;
-	    break;
-
-	  case '"':
-	    if (yyres)
-	      yyres[yyn] = '\0';
-	    return yyn;
-	  }
+        switch (*++yyp)
+          {
+          case '\'':
+          case ',':
+            goto do_not_strip_quotes;
+
+          case '\\':
+            if (*++yyp != '\\')
+              goto do_not_strip_quotes;
+            /* Fall through.  */
+          default:
+            if (yyres)
+              yyres[yyn] = *yyp;
+            yyn++;
+            break;
+
+          case '"':
+            if (yyres)
+              yyres[yyn] = '\0';
+            return yyn;
+          }
     do_not_strip_quotes: ;
     }
 
@@ -1239,11 +1116,11 @@ static int
 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
                 yytype_int16 *yyssp, int yytoken)
 {
-  YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
+  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
   YYSIZE_T yysize = yysize0;
   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
   /* Internationalized format string. */
-  const char *yyformat = YY_NULL;
+  const char *yyformat = YY_NULLPTR;
   /* Arguments of yyformat. */
   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
   /* Number of reported tokens (one for the "unexpected", one per
@@ -1251,10 +1128,6 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, c
   int yycount = 0;
 
   /* There are many possibilities here to consider:
-     - Assume YYFAIL is not used.  It's too flawed to consider.  See
-       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
-       for details.  YYERROR is fine as it does not invoke this
-       function.
      - If this state is a consistent state with a default action, then
        the only way this function was invoked is if the default action
        is an error action.  In that case, don't check for expected
@@ -1304,7 +1177,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, c
                   }
                 yyarg[yycount++] = yytname[yyx];
                 {
-                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
+                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
                   if (! (yysize <= yysize1
                          && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
                     return 2;
@@ -1371,31 +1244,17 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, c
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
 
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 static void
 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep)
-    const char *yymsg;
-    int yytype;
-    YYSTYPE *yyvaluep;
-#endif
 {
   YYUSE (yyvaluep);
-
   if (!yymsg)
     yymsg = "Deleting";
   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
 
-  switch (yytype)
-    {
-
-      default:
-        break;
-    }
+  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+  YYUSE (yytype);
+  YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
@@ -1404,18 +1263,8 @@ yydestruct (yymsg, yytype, yyvaluep)
 /* The lookahead symbol.  */
 int yychar;
 
-
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
-#endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
-#endif
-
 /* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
-
+YYSTYPE yylval;
 /* Number of syntax errors so far.  */
 int yynerrs;
 
@@ -1424,35 +1273,16 @@ int yynerrs;
 | yyparse.  |
 `----------*/
 
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
-    void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
 int
 yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
 {
     int yystate;
     /* Number of tokens to shift before error messages enabled.  */
     int yyerrstatus;
 
     /* The stacks and their tools:
-       `yyss': related to states.
-       `yyvs': related to semantic values.
+       'yyss': related to states.
+       'yyvs': related to semantic values.
 
        Refer to the stacks through separate pointers, to allow yyoverflow
        to reallocate them elsewhere.  */
@@ -1520,23 +1350,23 @@ yyparse ()
 
 #ifdef yyoverflow
       {
-	/* Give user a chance to reallocate the stack.  Use copies of
-	   these so that the &'s don't force the real ones into
-	   memory.  */
-	YYSTYPE *yyvs1 = yyvs;
-	yytype_int16 *yyss1 = yyss;
-
-	/* Each stack pointer address is followed by the size of the
-	   data in use in that stack, in bytes.  This used to be a
-	   conditional around just the two extra args, but that might
-	   be undefined if yyoverflow is a macro.  */
-	yyoverflow (YY_("memory exhausted"),
-		    &yyss1, yysize * sizeof (*yyssp),
-		    &yyvs1, yysize * sizeof (*yyvsp),
-		    &yystacksize);
+        /* Give user a chance to reallocate the stack.  Use copies of
+           these so that the &'s don't force the real ones into
+           memory.  */
+        YYSTYPE *yyvs1 = yyvs;
+        yytype_int16 *yyss1 = yyss;
+
+        /* Each stack pointer address is followed by the size of the
+           data in use in that stack, in bytes.  This used to be a
+           conditional around just the two extra args, but that might
+           be undefined if yyoverflow is a macro.  */
+        yyoverflow (YY_("memory exhausted"),
+                    &yyss1, yysize * sizeof (*yyssp),
+                    &yyvs1, yysize * sizeof (*yyvsp),
+                    &yystacksize);
 
-	yyss = yyss1;
-	yyvs = yyvs1;
+        yyss = yyss1;
+        yyvs = yyvs1;
       }
 #else /* no yyoverflow */
 # ifndef YYSTACK_RELOCATE
@@ -1544,22 +1374,22 @@ yyparse ()
 # else
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
-	goto yyexhaustedlab;
+        goto yyexhaustedlab;
       yystacksize *= 2;
       if (YYMAXDEPTH < yystacksize)
-	yystacksize = YYMAXDEPTH;
+        yystacksize = YYMAXDEPTH;
 
       {
-	yytype_int16 *yyss1 = yyss;
-	union yyalloc *yyptr =
-	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-	if (! yyptr)
-	  goto yyexhaustedlab;
-	YYSTACK_RELOCATE (yyss_alloc, yyss);
-	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+        yytype_int16 *yyss1 = yyss;
+        union yyalloc *yyptr =
+          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+        if (! yyptr)
+          goto yyexhaustedlab;
+        YYSTACK_RELOCATE (yyss_alloc, yyss);
+        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
 #  undef YYSTACK_RELOCATE
-	if (yyss1 != yyssa)
-	  YYSTACK_FREE (yyss1);
+        if (yyss1 != yyssa)
+          YYSTACK_FREE (yyss1);
       }
 # endif
 #endif /* no yyoverflow */
@@ -1568,10 +1398,10 @@ yyparse ()
       yyvsp = yyvs + yysize - 1;
 
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-		  (unsigned long int) yystacksize));
+                  (unsigned long int) yystacksize));
 
       if (yyss + yystacksize - 1 <= yyssp)
-	YYABORT;
+        YYABORT;
     }
 
   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
@@ -1600,7 +1430,7 @@ yybackup:
   if (yychar == YYEMPTY)
     {
       YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
+      yychar = yylex ();
     }
 
   if (yychar <= YYEOF)
@@ -1665,7 +1495,7 @@ yyreduce:
   yylen = yyr2[yyn];
 
   /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
+     '$$ = $1'.
 
      Otherwise, the following line sets YYVAL to garbage.
      This behavior is undocumented and Bison
@@ -1679,483 +1509,560 @@ yyreduce:
   switch (yyn)
     {
         case 4:
-
+#line 129 "parse.y" /* yacc.c:1646  */
     { is_typedef = 0; is_extern = 0; current_name = NULL; decl_spec = NULL; }
+#line 1515 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 5:
-
-    { free_list(*(yyvsp[(2) - (2)]), NULL); *(yyvsp[(2) - (2)]) = NULL; }
+#line 131 "parse.y" /* yacc.c:1646  */
+    { free_list(*(yyvsp[0]), NULL); *(yyvsp[0]) = NULL; }
+#line 1521 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 6:
-
+#line 135 "parse.y" /* yacc.c:1646  */
     { is_typedef = 1; }
+#line 1527 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 7:
-
-    { (yyval) = (yyvsp[(4) - (4)]); }
+#line 136 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1533 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 8:
-
+#line 137 "parse.y" /* yacc.c:1646  */
     { is_typedef = 1; }
+#line 1539 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 9:
-
-    { (yyval) = (yyvsp[(3) - (3)]); }
+#line 138 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1545 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 14:
-
-    { (yyval) = (yyvsp[(2) - (2)]); }
+#line 143 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1551 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 15:
-
-    { (yyval) = (yyvsp[(2) - (2)]); }
+#line 144 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1557 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 16:
-
+#line 149 "parse.y" /* yacc.c:1646  */
     { if (current_name) {
-		    struct string_list *decl = (*(yyvsp[(3) - (3)]))->next;
-		    (*(yyvsp[(3) - (3)]))->next = NULL;
+		    struct string_list *decl = (*(yyvsp[0]))->next;
+		    (*(yyvsp[0]))->next = NULL;
 		    add_symbol(current_name,
 			       is_typedef ? SYM_TYPEDEF : SYM_NORMAL,
 			       decl, is_extern);
 		    current_name = NULL;
 		  }
-		  (yyval) = (yyvsp[(3) - (3)]);
+		  (yyval) = (yyvsp[0]);
 		}
+#line 1572 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 17:
-
+#line 162 "parse.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 1578 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 19:
-
-    { struct string_list *decl = *(yyvsp[(1) - (1)]);
-		  *(yyvsp[(1) - (1)]) = NULL;
+#line 168 "parse.y" /* yacc.c:1646  */
+    { struct string_list *decl = *(yyvsp[0]);
+		  *(yyvsp[0]) = NULL;
 		  add_symbol(current_name,
 			     is_typedef ? SYM_TYPEDEF : SYM_NORMAL, decl, is_extern);
 		  current_name = NULL;
-		  (yyval) = (yyvsp[(1) - (1)]);
+		  (yyval) = (yyvsp[0]);
 		}
+#line 1590 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 20:
-
-    { struct string_list *decl = *(yyvsp[(3) - (3)]);
-		  *(yyvsp[(3) - (3)]) = NULL;
-		  free_list(*(yyvsp[(2) - (3)]), NULL);
-		  *(yyvsp[(2) - (3)]) = decl_spec;
+#line 176 "parse.y" /* yacc.c:1646  */
+    { struct string_list *decl = *(yyvsp[0]);
+		  *(yyvsp[0]) = NULL;
+		  free_list(*(yyvsp[-1]), NULL);
+		  *(yyvsp[-1]) = decl_spec;
 		  add_symbol(current_name,
 			     is_typedef ? SYM_TYPEDEF : SYM_NORMAL, decl, is_extern);
 		  current_name = NULL;
-		  (yyval) = (yyvsp[(3) - (3)]);
+		  (yyval) = (yyvsp[0]);
 		}
+#line 1604 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 21:
-
-    { (yyval) = (yyvsp[(4) - (4)]) ? (yyvsp[(4) - (4)]) : (yyvsp[(3) - (4)]) ? (yyvsp[(3) - (4)]) : (yyvsp[(2) - (4)]) ? (yyvsp[(2) - (4)]) : (yyvsp[(1) - (4)]); }
+#line 189 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]) ? (yyvsp[0]) : (yyvsp[-1]) ? (yyvsp[-1]) : (yyvsp[-2]) ? (yyvsp[-2]) : (yyvsp[-3]); }
+#line 1610 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 22:
-
+#line 194 "parse.y" /* yacc.c:1646  */
     { decl_spec = NULL; }
+#line 1616 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 24:
-
-    { decl_spec = *(yyvsp[(1) - (1)]); }
+#line 199 "parse.y" /* yacc.c:1646  */
+    { decl_spec = *(yyvsp[0]); }
+#line 1622 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 25:
-
-    { decl_spec = *(yyvsp[(2) - (2)]); }
+#line 200 "parse.y" /* yacc.c:1646  */
+    { decl_spec = *(yyvsp[0]); }
+#line 1628 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 26:
-
+#line 205 "parse.y" /* yacc.c:1646  */
     { /* Version 2 checksumming ignores storage class, as that
 		     is really irrelevant to the linkage.  */
-		  remove_node((yyvsp[(1) - (1)]));
-		  (yyval) = (yyvsp[(1) - (1)]);
+		  remove_node((yyvsp[0]));
+		  (yyval) = (yyvsp[0]);
 		}
+#line 1638 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 31:
-
-    { is_extern = 1; (yyval) = (yyvsp[(1) - (1)]); }
+#line 217 "parse.y" /* yacc.c:1646  */
+    { is_extern = 1; (yyval) = (yyvsp[0]); }
+#line 1644 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 32:
-
-    { is_extern = 0; (yyval) = (yyvsp[(1) - (1)]); }
+#line 218 "parse.y" /* yacc.c:1646  */
+    { is_extern = 0; (yyval) = (yyvsp[0]); }
+#line 1650 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 37:
-
-    { remove_node((yyvsp[(1) - (2)])); (*(yyvsp[(2) - (2)]))->tag = SYM_STRUCT; (yyval) = (yyvsp[(2) - (2)]); }
+#line 230 "parse.y" /* yacc.c:1646  */
+    { remove_node((yyvsp[-1])); (*(yyvsp[0]))->tag = SYM_STRUCT; (yyval) = (yyvsp[0]); }
+#line 1656 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 38:
-
-    { remove_node((yyvsp[(1) - (2)])); (*(yyvsp[(2) - (2)]))->tag = SYM_UNION; (yyval) = (yyvsp[(2) - (2)]); }
+#line 232 "parse.y" /* yacc.c:1646  */
+    { remove_node((yyvsp[-1])); (*(yyvsp[0]))->tag = SYM_UNION; (yyval) = (yyvsp[0]); }
+#line 1662 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 39:
-
-    { remove_node((yyvsp[(1) - (2)])); (*(yyvsp[(2) - (2)]))->tag = SYM_ENUM; (yyval) = (yyvsp[(2) - (2)]); }
+#line 234 "parse.y" /* yacc.c:1646  */
+    { remove_node((yyvsp[-1])); (*(yyvsp[0]))->tag = SYM_ENUM; (yyval) = (yyvsp[0]); }
+#line 1668 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 40:
-
-    { record_compound((yyvsp[(1) - (3)]), (yyvsp[(2) - (3)]), (yyvsp[(3) - (3)]), SYM_STRUCT); (yyval) = (yyvsp[(3) - (3)]); }
+#line 238 "parse.y" /* yacc.c:1646  */
+    { record_compound((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), SYM_STRUCT); (yyval) = (yyvsp[0]); }
+#line 1674 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 41:
-
-    { record_compound((yyvsp[(1) - (3)]), (yyvsp[(2) - (3)]), (yyvsp[(3) - (3)]), SYM_UNION); (yyval) = (yyvsp[(3) - (3)]); }
+#line 240 "parse.y" /* yacc.c:1646  */
+    { record_compound((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), SYM_UNION); (yyval) = (yyvsp[0]); }
+#line 1680 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 42:
-
-    { record_compound((yyvsp[(1) - (3)]), (yyvsp[(2) - (3)]), (yyvsp[(3) - (3)]), SYM_ENUM); (yyval) = (yyvsp[(3) - (3)]); }
+#line 242 "parse.y" /* yacc.c:1646  */
+    { record_compound((yyvsp[-2]), (yyvsp[-1]), (yyvsp[0]), SYM_ENUM); (yyval) = (yyvsp[0]); }
+#line 1686 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 43:
-
-    { add_symbol(NULL, SYM_ENUM, NULL, 0); (yyval) = (yyvsp[(2) - (2)]); }
+#line 247 "parse.y" /* yacc.c:1646  */
+    { add_symbol(NULL, SYM_ENUM, NULL, 0); (yyval) = (yyvsp[0]); }
+#line 1692 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 44:
-
-    { (yyval) = (yyvsp[(2) - (2)]); }
+#line 249 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1698 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 45:
-
-    { (yyval) = (yyvsp[(2) - (2)]); }
+#line 250 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1704 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 56:
-
-    { (*(yyvsp[(1) - (1)]))->tag = SYM_TYPEDEF; (yyval) = (yyvsp[(1) - (1)]); }
+#line 264 "parse.y" /* yacc.c:1646  */
+    { (*(yyvsp[0]))->tag = SYM_TYPEDEF; (yyval) = (yyvsp[0]); }
+#line 1710 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 57:
-
-    { (yyval) = (yyvsp[(2) - (2)]) ? (yyvsp[(2) - (2)]) : (yyvsp[(1) - (2)]); }
+#line 269 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]) ? (yyvsp[0]) : (yyvsp[-1]); }
+#line 1716 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 58:
-
+#line 273 "parse.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 1722 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 61:
-
-    { (yyval) = (yyvsp[(2) - (2)]); }
+#line 279 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1728 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 65:
-
+#line 285 "parse.y" /* yacc.c:1646  */
     { /* restrict has no effect in prototypes so ignore it */
-		  remove_node((yyvsp[(1) - (1)]));
-		  (yyval) = (yyvsp[(1) - (1)]);
+		  remove_node((yyvsp[0]));
+		  (yyval) = (yyvsp[0]);
 		}
+#line 1737 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 66:
-
-    { (yyval) = (yyvsp[(2) - (2)]); }
+#line 292 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1743 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 68:
-
+#line 298 "parse.y" /* yacc.c:1646  */
     { if (current_name != NULL) {
 		    error_with_pos("unexpected second declaration name");
 		    YYERROR;
 		  } else {
-		    current_name = (*(yyvsp[(1) - (1)]))->string;
-		    (yyval) = (yyvsp[(1) - (1)]);
+		    current_name = (*(yyvsp[0]))->string;
+		    (yyval) = (yyvsp[0]);
 		  }
 		}
+#line 1756 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 69:
-
+#line 307 "parse.y" /* yacc.c:1646  */
     { if (current_name != NULL) {
 		    error_with_pos("unexpected second declaration name");
 		    YYERROR;
 		  } else {
-		    current_name = (*(yyvsp[(1) - (1)]))->string;
-		    (yyval) = (yyvsp[(1) - (1)]);
+		    current_name = (*(yyvsp[0]))->string;
+		    (yyval) = (yyvsp[0]);
 		  }
 		}
+#line 1769 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 70:
-
-    { (yyval) = (yyvsp[(4) - (4)]); }
+#line 316 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1775 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 71:
-
-    { (yyval) = (yyvsp[(4) - (4)]); }
+#line 318 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1781 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 72:
-
-    { (yyval) = (yyvsp[(2) - (2)]); }
+#line 320 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1787 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 73:
-
-    { (yyval) = (yyvsp[(3) - (3)]); }
+#line 322 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1793 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 74:
-
-    { (yyval) = (yyvsp[(3) - (3)]); }
+#line 328 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1799 "parse.tab.c" /* yacc.c:1646  */
     break;
 
-  case 75:
-
-    { (yyval) = (yyvsp[(2) - (2)]); }
+  case 78:
+#line 336 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1805 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 79:
-
-    { (yyval) = (yyvsp[(4) - (4)]); }
+#line 338 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1811 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 80:
-
-    { (yyval) = (yyvsp[(4) - (4)]); }
+#line 340 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1817 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 81:
-
-    { (yyval) = (yyvsp[(2) - (2)]); }
+#line 342 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1823 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 82:
-
-    { (yyval) = (yyvsp[(3) - (3)]); }
+#line 344 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1829 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 83:
-
-    { (yyval) = (yyvsp[(3) - (3)]); }
+#line 348 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1835 "parse.tab.c" /* yacc.c:1646  */
     break;
 
-  case 84:
-
-    { (yyval) = (yyvsp[(2) - (2)]); }
+  case 85:
+#line 350 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1841 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 86:
-
-    { (yyval) = (yyvsp[(3) - (3)]); }
+#line 354 "parse.y" /* yacc.c:1646  */
+    { (yyval) = NULL; }
+#line 1847 "parse.tab.c" /* yacc.c:1646  */
     break;
 
-  case 87:
-
-    { (yyval) = NULL; }
+  case 89:
+#line 361 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1853 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 90:
-
-    { (yyval) = (yyvsp[(3) - (3)]); }
+#line 366 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]) ? (yyvsp[0]) : (yyvsp[-1]); }
+#line 1859 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 91:
-
-    { (yyval) = (yyvsp[(2) - (2)]) ? (yyvsp[(2) - (2)]) : (yyvsp[(1) - (2)]); }
+#line 371 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]) ? (yyvsp[0]) : (yyvsp[-1]); }
+#line 1865 "parse.tab.c" /* yacc.c:1646  */
     break;
 
-  case 92:
-
-    { (yyval) = (yyvsp[(2) - (2)]) ? (yyvsp[(2) - (2)]) : (yyvsp[(1) - (2)]); }
+  case 93:
+#line 376 "parse.y" /* yacc.c:1646  */
+    { (yyval) = NULL; }
+#line 1871 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 94:
-
-    { (yyval) = NULL; }
+#line 378 "parse.y" /* yacc.c:1646  */
+    { /* For version 2 checksums, we don't want to remember
+		     private parameter names.  */
+		  remove_node((yyvsp[0]));
+		  (yyval) = (yyvsp[0]);
+		}
+#line 1881 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 95:
-
-    { /* For version 2 checksums, we don't want to remember
-		     private parameter names.  */
-		  remove_node((yyvsp[(1) - (1)]));
-		  (yyval) = (yyvsp[(1) - (1)]);
+#line 386 "parse.y" /* yacc.c:1646  */
+    { remove_node((yyvsp[0]));
+		  (yyval) = (yyvsp[0]);
 		}
+#line 1889 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 96:
-
-    { remove_node((yyvsp[(1) - (1)]));
-		  (yyval) = (yyvsp[(1) - (1)]);
-		}
+#line 390 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1895 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 97:
-
-    { (yyval) = (yyvsp[(4) - (4)]); }
+#line 392 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1901 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 98:
-
-    { (yyval) = (yyvsp[(4) - (4)]); }
+#line 394 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1907 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 99:
-
-    { (yyval) = (yyvsp[(2) - (2)]); }
+#line 396 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1913 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 100:
-
-    { (yyval) = (yyvsp[(3) - (3)]); }
+#line 398 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1919 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 101:
-
-    { (yyval) = (yyvsp[(3) - (3)]); }
-    break;
-
-  case 102:
-
-    { struct string_list *decl = *(yyvsp[(2) - (3)]);
-		  *(yyvsp[(2) - (3)]) = NULL;
+#line 403 "parse.y" /* yacc.c:1646  */
+    { struct string_list *decl = *(yyvsp[-1]);
+		  *(yyvsp[-1]) = NULL;
 		  add_symbol(current_name, SYM_NORMAL, decl, is_extern);
-		  (yyval) = (yyvsp[(3) - (3)]);
+		  (yyval) = (yyvsp[0]);
 		}
+#line 1929 "parse.tab.c" /* yacc.c:1646  */
     break;
 
-  case 103:
-
+  case 102:
+#line 411 "parse.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 1935 "parse.tab.c" /* yacc.c:1646  */
     break;
 
-  case 105:
+  case 104:
+#line 418 "parse.y" /* yacc.c:1646  */
+    { remove_list((yyvsp[0]), &(*(yyvsp[-1]))->next); (yyval) = (yyvsp[0]); }
+#line 1941 "parse.tab.c" /* yacc.c:1646  */
+    break;
 
-    { remove_list((yyvsp[(2) - (2)]), &(*(yyvsp[(1) - (2)]))->next); (yyval) = (yyvsp[(2) - (2)]); }
+  case 105:
+#line 422 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1947 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 106:
-
-    { (yyval) = (yyvsp[(3) - (3)]); }
+#line 423 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1953 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 107:
-
-    { (yyval) = (yyvsp[(3) - (3)]); }
+#line 427 "parse.y" /* yacc.c:1646  */
+    { (yyval) = NULL; }
+#line 1959 "parse.tab.c" /* yacc.c:1646  */
     break;
 
-  case 108:
-
-    { (yyval) = NULL; }
+  case 110:
+#line 433 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1965 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 111:
-
-    { (yyval) = (yyvsp[(2) - (2)]); }
+#line 438 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1971 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 112:
-
-    { (yyval) = (yyvsp[(3) - (3)]); }
+#line 440 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1977 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 113:
-
-    { (yyval) = (yyvsp[(2) - (2)]); }
+#line 444 "parse.y" /* yacc.c:1646  */
+    { (yyval) = NULL; }
+#line 1983 "parse.tab.c" /* yacc.c:1646  */
     break;
 
-  case 114:
-
-    { (yyval) = NULL; }
+  case 116:
+#line 450 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 1989 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 117:
-
-    { (yyval) = (yyvsp[(3) - (3)]); }
+#line 454 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]) ? (yyvsp[0]) : (yyvsp[-1]); }
+#line 1995 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 118:
-
-    { (yyval) = (yyvsp[(2) - (2)]) ? (yyvsp[(2) - (2)]) : (yyvsp[(1) - (2)]); }
+#line 455 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 2001 "parse.tab.c" /* yacc.c:1646  */
     break;
 
-  case 119:
-
-    { (yyval) = (yyvsp[(2) - (2)]); }
+  case 120:
+#line 460 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 2007 "parse.tab.c" /* yacc.c:1646  */
     break;
 
   case 121:
-
-    { (yyval) = (yyvsp[(2) - (2)]); }
-    break;
-
-  case 122:
-
+#line 464 "parse.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 2013 "parse.tab.c" /* yacc.c:1646  */
     break;
 
-  case 124:
-
-    { (yyval) = (yyvsp[(3) - (3)]); }
+  case 123:
+#line 469 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 2019 "parse.tab.c" /* yacc.c:1646  */
     break;
 
-  case 125:
-
-    { (yyval) = (yyvsp[(4) - (4)]); }
+  case 124:
+#line 470 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 2025 "parse.tab.c" /* yacc.c:1646  */
     break;
 
-  case 128:
-
+  case 127:
+#line 479 "parse.y" /* yacc.c:1646  */
     {
-			const char *name = strdup((*(yyvsp[(1) - (1)]))->string);
+			const char *name = strdup((*(yyvsp[0]))->string);
 			add_symbol(name, SYM_ENUM_CONST, NULL, 0);
 		}
+#line 2034 "parse.tab.c" /* yacc.c:1646  */
     break;
 
-  case 129:
-
+  case 128:
+#line 484 "parse.y" /* yacc.c:1646  */
     {
-			const char *name = strdup((*(yyvsp[(1) - (3)]))->string);
-			struct string_list *expr = copy_list_range(*(yyvsp[(3) - (3)]), *(yyvsp[(2) - (3)]));
+			const char *name = strdup((*(yyvsp[-2]))->string);
+			struct string_list *expr = copy_list_range(*(yyvsp[0]), *(yyvsp[-1]));
 			add_symbol(name, SYM_ENUM_CONST, expr, 0);
 		}
+#line 2044 "parse.tab.c" /* yacc.c:1646  */
     break;
 
-  case 130:
-
-    { (yyval) = (yyvsp[(2) - (2)]); }
+  case 129:
+#line 491 "parse.y" /* yacc.c:1646  */
+    { (yyval) = (yyvsp[0]); }
+#line 2050 "parse.tab.c" /* yacc.c:1646  */
     break;
 
-  case 131:
-
+  case 130:
+#line 495 "parse.y" /* yacc.c:1646  */
     { (yyval) = NULL; }
+#line 2056 "parse.tab.c" /* yacc.c:1646  */
     break;
 
-  case 133:
-
-    { export_symbol((*(yyvsp[(3) - (5)]))->string); (yyval) = (yyvsp[(5) - (5)]); }
+  case 132:
+#line 501 "parse.y" /* yacc.c:1646  */
+    { export_symbol((*(yyvsp[-2]))->string); (yyval) = (yyvsp[0]); }
+#line 2062 "parse.tab.c" /* yacc.c:1646  */
     break;
 
 
-
+#line 2066 "parse.tab.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -2177,7 +2084,7 @@ yyreduce:
 
   *++yyvsp = yyval;
 
-  /* Now `shift' the result of the reduction.  Determine what state
+  /* Now 'shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
 
@@ -2192,9 +2099,9 @@ yyreduce:
   goto yynewstate;
 
 
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
+/*--------------------------------------.
+| yyerrlab -- here on detecting error.  |
+`--------------------------------------*/
 yyerrlab:
   /* Make sure we have latest lookahead translation.  See comments at
      user semantic actions for why this is necessary.  */
@@ -2245,20 +2152,20 @@ yyerrlab:
   if (yyerrstatus == 3)
     {
       /* If just tried and failed to reuse lookahead token after an
-	 error, discard it.  */
+         error, discard it.  */
 
       if (yychar <= YYEOF)
-	{
-	  /* Return failure if at end of input.  */
-	  if (yychar == YYEOF)
-	    YYABORT;
-	}
+        {
+          /* Return failure if at end of input.  */
+          if (yychar == YYEOF)
+            YYABORT;
+        }
       else
-	{
-	  yydestruct ("Error: discarding",
-		      yytoken, &yylval);
-	  yychar = YYEMPTY;
-	}
+        {
+          yydestruct ("Error: discarding",
+                      yytoken, &yylval);
+          yychar = YYEMPTY;
+        }
     }
 
   /* Else will try to reuse lookahead token after shifting the error
@@ -2277,7 +2184,7 @@ yyerrorlab:
   if (/*CONSTCOND*/ 0)
      goto yyerrorlab;
 
-  /* Do not reclaim the symbols of the rule which action triggered
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYERROR.  */
   YYPOPSTACK (yylen);
   yylen = 0;
@@ -2290,29 +2197,29 @@ yyerrorlab:
 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
 `-------------------------------------------------------------*/
 yyerrlab1:
-  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
 
   for (;;)
     {
       yyn = yypact[yystate];
       if (!yypact_value_is_default (yyn))
-	{
-	  yyn += YYTERROR;
-	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-	    {
-	      yyn = yytable[yyn];
-	      if (0 < yyn)
-		break;
-	    }
-	}
+        {
+          yyn += YYTERROR;
+          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+            {
+              yyn = yytable[yyn];
+              if (0 < yyn)
+                break;
+            }
+        }
 
       /* Pop the current state because it cannot handle the error token.  */
       if (yyssp == yyss)
-	YYABORT;
+        YYABORT;
 
 
       yydestruct ("Error: popping",
-		  yystos[yystate], yyvsp);
+                  yystos[yystate], yyvsp);
       YYPOPSTACK (1);
       yystate = *yyssp;
       YY_STACK_PRINT (yyss, yyssp);
@@ -2363,14 +2270,14 @@ yyreturn:
       yydestruct ("Cleanup: discarding lookahead",
                   yytoken, &yylval);
     }
-  /* Do not reclaim the symbols of the rule which action triggered
+  /* Do not reclaim the symbols of the rule whose action triggered
      this YYABORT or YYACCEPT.  */
   YYPOPSTACK (yylen);
   YY_STACK_PRINT (yyss, yyssp);
   while (yyssp != yyss)
     {
       yydestruct ("Cleanup: popping",
-		  yystos[*yyssp], yyvsp);
+                  yystos[*yyssp], yyvsp);
       YYPOPSTACK (1);
     }
 #ifndef yyoverflow
@@ -2381,12 +2288,9 @@ yyreturn:
   if (yymsg != yymsgbuf)
     YYSTACK_FREE (yymsg);
 #endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
+  return yyresult;
 }
-
-
-
+#line 505 "parse.y" /* yacc.c:1906  */
 
 
 static void
--- a/scripts/genksyms/parse.tab.h_shipped
+++ b/scripts/genksyms/parse.tab.h_shipped
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 2.7.  */
+/* A Bison parser, made by GNU Bison 3.0.4.  */
 
 /* Bison interface for Yacc-like parsers in C
-   
-      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
-   
+
+   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
+
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
@@ -26,93 +26,80 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-   
+
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
-#ifndef YY_YY_SCRIPTS_GENKSYMS_PARSE_TAB_H_SHIPPED_INCLUDED
-# define YY_YY_SCRIPTS_GENKSYMS_PARSE_TAB_H_SHIPPED_INCLUDED
-/* Enabling traces.  */
+#ifndef YY_YY_PARSE_TAB_H_INCLUDED
+# define YY_YY_PARSE_TAB_H_INCLUDED
+/* Debug traces.  */
 #ifndef YYDEBUG
-# define YYDEBUG 1
+# define YYDEBUG 0
 #endif
 #if YYDEBUG
 extern int yydebug;
 #endif
 
-/* Tokens.  */
+/* Token type.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     ASM_KEYW = 258,
-     ATTRIBUTE_KEYW = 259,
-     AUTO_KEYW = 260,
-     BOOL_KEYW = 261,
-     CHAR_KEYW = 262,
-     CONST_KEYW = 263,
-     DOUBLE_KEYW = 264,
-     ENUM_KEYW = 265,
-     EXTERN_KEYW = 266,
-     EXTENSION_KEYW = 267,
-     FLOAT_KEYW = 268,
-     INLINE_KEYW = 269,
-     INT_KEYW = 270,
-     LONG_KEYW = 271,
-     REGISTER_KEYW = 272,
-     RESTRICT_KEYW = 273,
-     SHORT_KEYW = 274,
-     SIGNED_KEYW = 275,
-     STATIC_KEYW = 276,
-     STRUCT_KEYW = 277,
-     TYPEDEF_KEYW = 278,
-     UNION_KEYW = 279,
-     UNSIGNED_KEYW = 280,
-     VOID_KEYW = 281,
-     VOLATILE_KEYW = 282,
-     TYPEOF_KEYW = 283,
-     EXPORT_SYMBOL_KEYW = 284,
-     ASM_PHRASE = 285,
-     ATTRIBUTE_PHRASE = 286,
-     TYPEOF_PHRASE = 287,
-     BRACE_PHRASE = 288,
-     BRACKET_PHRASE = 289,
-     EXPRESSION_PHRASE = 290,
-     CHAR = 291,
-     DOTS = 292,
-     IDENT = 293,
-     INT = 294,
-     REAL = 295,
-     STRING = 296,
-     TYPE = 297,
-     OTHER = 298,
-     FILENAME = 299
-   };
+  enum yytokentype
+  {
+    ASM_KEYW = 258,
+    ATTRIBUTE_KEYW = 259,
+    AUTO_KEYW = 260,
+    BOOL_KEYW = 261,
+    CHAR_KEYW = 262,
+    CONST_KEYW = 263,
+    DOUBLE_KEYW = 264,
+    ENUM_KEYW = 265,
+    EXTERN_KEYW = 266,
+    EXTENSION_KEYW = 267,
+    FLOAT_KEYW = 268,
+    INLINE_KEYW = 269,
+    INT_KEYW = 270,
+    LONG_KEYW = 271,
+    REGISTER_KEYW = 272,
+    RESTRICT_KEYW = 273,
+    SHORT_KEYW = 274,
+    SIGNED_KEYW = 275,
+    STATIC_KEYW = 276,
+    STRUCT_KEYW = 277,
+    TYPEDEF_KEYW = 278,
+    UNION_KEYW = 279,
+    UNSIGNED_KEYW = 280,
+    VOID_KEYW = 281,
+    VOLATILE_KEYW = 282,
+    TYPEOF_KEYW = 283,
+    EXPORT_SYMBOL_KEYW = 284,
+    ASM_PHRASE = 285,
+    ATTRIBUTE_PHRASE = 286,
+    TYPEOF_PHRASE = 287,
+    BRACE_PHRASE = 288,
+    BRACKET_PHRASE = 289,
+    EXPRESSION_PHRASE = 290,
+    CHAR = 291,
+    DOTS = 292,
+    IDENT = 293,
+    INT = 294,
+    REAL = 295,
+    STRING = 296,
+    TYPE = 297,
+    OTHER = 298,
+    FILENAME = 299
+  };
 #endif
 
-
+/* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef int YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 #endif
 
+
 extern YYSTYPE yylval;
 
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
 int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
 
-#endif /* !YY_YY_SCRIPTS_GENKSYMS_PARSE_TAB_H_SHIPPED_INCLUDED  */
+#endif /* !YY_YY_PARSE_TAB_H_INCLUDED  */
--- a/scripts/genksyms/parse.y
+++ b/scripts/genksyms/parse.y
@@ -320,8 +320,6 @@ direct_declarator:
 		{ $$ = $2; }
 	| '(' declarator ')'
 		{ $$ = $3; }
-	| '(' error ')'
-		{ $$ = $3; }
 	;
 
 /* Nested declarators differ from regular declarators in that they do

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 161/193] x86/microcode/AMD: Change load_microcode_amd()s param to bool to fix preemptibility bug
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (159 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 160/193] genksyms: Fix segfault with invalid declarations Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 162/193] drm/gma500: remove helper function Greg Kroah-Hartman
                   ` (38 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Greg Kroah-Hartman, Borislav Petkov, Linus Torvalds,
	Peter Zijlstra, Thomas Gleixner, Ingo Molnar, Arnd Bergmann

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Borislav Petkov <bp@suse.de>

commit dac6ca243c4c49a9ca7507d3d66140ebfac8b04b upstream.

With CONFIG_DEBUG_PREEMPT enabled, I get:

  BUG: using smp_processor_id() in preemptible [00000000] code: swapper/0/1
  caller is debug_smp_processor_id
  CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.12.0-rc2+ #2
  Call Trace:
   dump_stack
   check_preemption_disabled
   debug_smp_processor_id
   save_microcode_in_initrd_amd
   ? microcode_init
   save_microcode_in_initrd
   ...

because, well, it says it above, we're using smp_processor_id() in
preemptible code.

But passing the CPU number is not really needed. It is only used to
determine whether we're on the BSP, and, if so, to save the microcode
patch for early loading.

 [ We don't absolutely need to do it on the BSP but we do that
   customarily there. ]

Instead, convert that function parameter to a boolean which denotes
whether the patch should be saved or not, thereby avoiding the use of
smp_processor_id() in preemptible code.

Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20170528200414.31305-1-bp@alien8.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
[arnd: rebased to 4.9, after running into warning:
 arch/x86/kernel/cpu/microcode/amd.c:881:30: self-comparison always evaluates to true]
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/include/asm/microcode_amd.h |    1 -
 arch/x86/kernel/cpu/microcode/amd.c  |   17 +++++++++++------
 2 files changed, 11 insertions(+), 7 deletions(-)

--- a/arch/x86/include/asm/microcode_amd.h
+++ b/arch/x86/include/asm/microcode_amd.h
@@ -59,7 +59,6 @@ static inline u16 find_equiv_id(struct e
 
 extern int __apply_microcode_amd(struct microcode_amd *mc_amd);
 extern int apply_microcode_amd(int cpu);
-extern enum ucode_state load_microcode_amd(int cpu, u8 family, const u8 *data, size_t size);
 
 #define PATCH_MAX_SIZE PAGE_SIZE
 extern u8 amd_ucode_patch[PATCH_MAX_SIZE];
--- a/arch/x86/kernel/cpu/microcode/amd.c
+++ b/arch/x86/kernel/cpu/microcode/amd.c
@@ -131,6 +131,9 @@ static size_t compute_container_size(u8
 	return size;
 }
 
+static enum ucode_state
+load_microcode_amd(bool save, u8 family, const u8 *data, size_t size);
+
 /*
  * Early load occurs before we can vmalloc(). So we look for the microcode
  * patch container file in initrd, traverse equivalent cpu table, look for a
@@ -438,7 +441,7 @@ int __init save_microcode_in_initrd_amd(
 	eax   = cpuid_eax(0x00000001);
 	eax   = ((eax >> 8) & 0xf) + ((eax >> 20) & 0xff);
 
-	ret = load_microcode_amd(smp_processor_id(), eax, container, container_size);
+	ret = load_microcode_amd(true, eax, container, container_size);
 	if (ret != UCODE_OK)
 		retval = -EINVAL;
 
@@ -854,7 +857,8 @@ static enum ucode_state __load_microcode
 	return UCODE_OK;
 }
 
-enum ucode_state load_microcode_amd(int cpu, u8 family, const u8 *data, size_t size)
+static enum ucode_state
+load_microcode_amd(bool save, u8 family, const u8 *data, size_t size)
 {
 	enum ucode_state ret;
 
@@ -868,8 +872,8 @@ enum ucode_state load_microcode_amd(int
 
 #ifdef CONFIG_X86_32
 	/* save BSP's matching patch for early load */
-	if (cpu_data(cpu).cpu_index == boot_cpu_data.cpu_index) {
-		struct ucode_patch *p = find_patch(cpu);
+	if (save) {
+		struct ucode_patch *p = find_patch(0);
 		if (p) {
 			memset(amd_ucode_patch, 0, PATCH_MAX_SIZE);
 			memcpy(amd_ucode_patch, p->data, min_t(u32, ksize(p->data),
@@ -901,11 +905,12 @@ static enum ucode_state request_microcod
 {
 	char fw_name[36] = "amd-ucode/microcode_amd.bin";
 	struct cpuinfo_x86 *c = &cpu_data(cpu);
+	bool bsp = c->cpu_index == boot_cpu_data.cpu_index;
 	enum ucode_state ret = UCODE_NFOUND;
 	const struct firmware *fw;
 
 	/* reload ucode container only on the boot cpu */
-	if (!refresh_fw || c->cpu_index != boot_cpu_data.cpu_index)
+	if (!refresh_fw || !bsp)
 		return UCODE_OK;
 
 	if (c->x86 >= 0x15)
@@ -922,7 +927,7 @@ static enum ucode_state request_microcod
 		goto fw_release;
 	}
 
-	ret = load_microcode_amd(cpu, c->x86, fw->data, fw->size);
+	ret = load_microcode_amd(bsp, c->x86, fw->data, fw->size);
 
  fw_release:
 	release_firmware(fw);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 162/193] drm/gma500: remove helper function
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (160 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 161/193] x86/microcode/AMD: Change load_microcode_amd()s param to bool to fix preemptibility bug Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 163/193] kasan: rework Kconfig settings Greg Kroah-Hartman
                   ` (37 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Greg Kroah-Hartman, Sudip Mukherjee, Patrik Jakobsson,
	Daniel Vetter, Arnd Bergmann

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Sudip Mukherjee <sudipm.mukherjee@gmail.com>

commit db9b60400f9253c25ae639797df2d0ff7a35d9d8 upstream.

We were getting build warning about:
drivers/gpu/drm/gma500/mdfld_dsi_output.c:407:2: warning: initialization
	from incompatible pointer type

The callback to dpms was pointing to a helper function which had a
return type of void, whereas the callback should point to a function
which has a return type of int.
On closer look it turned out that we do not need the helper function
since if we call drm_helper_connector_dpms() directly, the first check
that drm_helper_connector_dpms() does is: if (mode == connector->dpms)

Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
Link: http://patchwork.freedesktop.org/patch/msgid/1454393155-13142-1-git-send-email-sudipm.mukherjee@gmail.com
Acked-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
[arnd: rebased to 4.4]
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/gpu/drm/gma500/mdfld_dsi_output.c |   12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)

--- a/drivers/gpu/drm/gma500/mdfld_dsi_output.c
+++ b/drivers/gpu/drm/gma500/mdfld_dsi_output.c
@@ -382,16 +382,6 @@ static int mdfld_dsi_connector_mode_vali
 	return MODE_OK;
 }
 
-static void mdfld_dsi_connector_dpms(struct drm_connector *connector, int mode)
-{
-	if (mode == connector->dpms)
-		return;
-
-	/*first, execute dpms*/
-
-	drm_helper_connector_dpms(connector, mode);
-}
-
 static struct drm_encoder *mdfld_dsi_connector_best_encoder(
 				struct drm_connector *connector)
 {
@@ -404,7 +394,7 @@ static struct drm_encoder *mdfld_dsi_con
 
 /*DSI connector funcs*/
 static const struct drm_connector_funcs mdfld_dsi_connector_funcs = {
-	.dpms = /*drm_helper_connector_dpms*/mdfld_dsi_connector_dpms,
+	.dpms = drm_helper_connector_dpms,
 	.save = mdfld_dsi_connector_save,
 	.restore = mdfld_dsi_connector_restore,
 	.detect = mdfld_dsi_connector_detect,

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 163/193] kasan: rework Kconfig settings
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (161 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 162/193] drm/gma500: remove helper function Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-03-06 14:29   ` Ben Hutchings
  2018-02-23 18:26 ` [PATCH 4.4 164/193] KVM: async_pf: Fix #DF due to inject "Page not Present" and "Page Ready" exceptions simultaneously Greg Kroah-Hartman
                   ` (36 subsequent siblings)
  199 siblings, 1 reply; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Greg Kroah-Hartman, Arnd Bergmann, Andrey Ryabinin,
	Mauro Carvalho Chehab, Alexander Potapenko, Dmitry Vyukov,
	Andrey Konovalov, Andrew Morton, Linus Torvalds

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit e7c52b84fb18f08ce49b6067ae6285aca79084a8 upstream.

We get a lot of very large stack frames using gcc-7.0.1 with the default
-fsanitize-address-use-after-scope --param asan-stack=1 options, which can
easily cause an overflow of the kernel stack, e.g.

  drivers/gpu/drm/i915/gvt/handlers.c:2434:1: warning: the frame size of 46176 bytes is larger than 3072 bytes
  drivers/net/wireless/ralink/rt2x00/rt2800lib.c:5650:1: warning: the frame size of 23632 bytes is larger than 3072 bytes
  lib/atomic64_test.c:250:1: warning: the frame size of 11200 bytes is larger than 3072 bytes
  drivers/gpu/drm/i915/gvt/handlers.c:2621:1: warning: the frame size of 9208 bytes is larger than 3072 bytes
  drivers/media/dvb-frontends/stv090x.c:3431:1: warning: the frame size of 6816 bytes is larger than 3072 bytes
  fs/fscache/stats.c:287:1: warning: the frame size of 6536 bytes is larger than 3072 bytes

To reduce this risk, -fsanitize-address-use-after-scope is now split out
into a separate CONFIG_KASAN_EXTRA Kconfig option, leading to stack
frames that are smaller than 2 kilobytes most of the time on x86_64.  An
earlier version of this patch also prevented combining KASAN_EXTRA with
KASAN_INLINE, but that is no longer necessary with gcc-7.0.1.

All patches to get the frame size below 2048 bytes with CONFIG_KASAN=y
and CONFIG_KASAN_EXTRA=n have been merged by maintainers now, so we can
bring back that default now.  KASAN_EXTRA=y still causes lots of
warnings but now defaults to !COMPILE_TEST to disable it in
allmodconfig, and it remains disabled in all other defconfigs since it
is a new option.  I arbitrarily raise the warning limit for KASAN_EXTRA
to 3072 to reduce the noise, but an allmodconfig kernel still has around
50 warnings on gcc-7.

I experimented a bit more with smaller stack frames and have another
follow-up series that reduces the warning limit for 64-bit architectures
to 1280 bytes (without CONFIG_KASAN).

With earlier versions of this patch series, I also had patches to address
the warnings we get with KASAN and/or KASAN_EXTRA, using a
"noinline_if_stackbloat" annotation.

That annotation now got replaced with a gcc-8 bugfix (see
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81715) and a workaround for
older compilers, which means that KASAN_EXTRA is now just as bad as
before and will lead to an instant stack overflow in a few extreme
cases.

This reverts parts of commit 3f181b4d8652 ("lib/Kconfig.debug: disable
-Wframe-larger-than warnings with KASAN=y").  Two patches in linux-next
should be merged first to avoid introducing warnings in an allmodconfig
build:
  3cd890dbe2a4 ("media: dvb-frontends: fix i2c access helpers for KASAN")
  16c3ada89cff ("media: r820t: fix r820t_write_reg for KASAN")

Do we really need to backport this?

I think we do: without this patch, enabling KASAN will lead to
unavoidable kernel stack overflow in certain device drivers when built
with gcc-7 or higher on linux-4.10+ or any version that contains a
backport of commit c5caf21ab0cf8.  Most people are probably still on
older compilers, but it will get worse over time as they upgrade their
distros.

The warnings we get on kernels older than this should all be for code
that uses dangerously large stack frames, though most of them do not
cause an actual stack overflow by themselves.The asan-stack option was
added in linux-4.0, and commit 3f181b4d8652 ("lib/Kconfig.debug:
disable -Wframe-larger-than warnings with KASAN=y") effectively turned
off the warning for allmodconfig kernels, so I would like to see this
fix backported to any kernels later than 4.0.

I have done dozens of fixes for individual functions with stack frames
larger than 2048 bytes with asan-stack, and I plan to make sure that
all those fixes make it into the stable kernels as well (most are
already there).

Part of the complication here is that asan-stack (from 4.0) was
originally assumed to always require much larger stacks, but that
turned out to be a combination of multiple gcc bugs that we have now
worked around and fixed, but sanitize-address-use-after-scope (from
v4.10) has a much higher inherent stack usage and also suffers from at
least three other problems that we have analyzed but not yet fixed
upstream, each of them makes the stack usage more severe than it should
be.

Link: http://lkml.kernel.org/r/20171221134744.2295529-1-arnd@arndb.de
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Alexander Potapenko <glider@google.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Andrey Konovalov <andreyknvl@google.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
[arnd: rebase to v4.4; only re-enable warning]
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 lib/Kconfig.debug |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -197,7 +197,7 @@ config ENABLE_MUST_CHECK
 config FRAME_WARN
 	int "Warn for stack frames larger than (needs gcc 4.4)"
 	range 0 8192
-	default 0 if KASAN
+	default 2048 if GCC_PLUGIN_LATENT_ENTROPY
 	default 1024 if !64BIT
 	default 2048 if 64BIT
 	help

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 164/193] KVM: async_pf: Fix #DF due to inject "Page not Present" and "Page Ready" exceptions simultaneously
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (162 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 163/193] kasan: rework Kconfig settings Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 165/193] x86/retpoline: Remove the esp/rsp thunk Greg Kroah-Hartman
                   ` (35 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Paolo Bonzini,
	Radim Krčmář,
	Wanpeng Li, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Wanpeng Li <wanpeng.li@hotmail.com>

commit 9a6e7c39810e4a8bc7fc95056cefb40583fe07ef upstream.

qemu-system-x86-8600  [004] d..1  7205.687530: kvm_entry: vcpu 2
qemu-system-x86-8600  [004] ....  7205.687532: kvm_exit: reason EXCEPTION_NMI rip 0xffffffffa921297d info ffffeb2c0e44e018 80000b0e
qemu-system-x86-8600  [004] ....  7205.687532: kvm_page_fault: address ffffeb2c0e44e018 error_code 0
qemu-system-x86-8600  [004] ....  7205.687620: kvm_try_async_get_page: gva = 0xffffeb2c0e44e018, gfn = 0x427e4e
qemu-system-x86-8600  [004] .N..  7205.687628: kvm_async_pf_not_present: token 0x8b002 gva 0xffffeb2c0e44e018
    kworker/4:2-7814  [004] ....  7205.687655: kvm_async_pf_completed: gva 0xffffeb2c0e44e018 address 0x7fcc30c4e000
qemu-system-x86-8600  [004] ....  7205.687703: kvm_async_pf_ready: token 0x8b002 gva 0xffffeb2c0e44e018
qemu-system-x86-8600  [004] d..1  7205.687711: kvm_entry: vcpu 2

After running some memory intensive workload in guest, I catch the kworker
which completes the GUP too quickly, and queues an "Page Ready" #PF exception
after the "Page not Present" exception before the next vmentry as the above
trace which will result in #DF injected to guest.

This patch fixes it by clearing the queue for "Page not Present" if "Page Ready"
occurs before the next vmentry since the GUP has already got the required page
and shadow page table has already been fixed by "Page Ready" handler.

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
Fixes: 7c90705bf2a3 ("KVM: Inject asynchronous page fault into a PV guest if page is swapped out.")
[Changed indentation and added clearing of injected. - Radim]
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
[port from upstream v4.14-rc1, Don't assign to kvm_queued_exception::injected or
 x86_exception::async_page_fault]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 arch/x86/kvm/x86.c |   34 ++++++++++++++++++++++++++--------
 1 file changed, 26 insertions(+), 8 deletions(-)

--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -8210,6 +8210,13 @@ static int apf_put_user(struct kvm_vcpu
 				      sizeof(val));
 }
 
+static int apf_get_user(struct kvm_vcpu *vcpu, u32 *val)
+{
+
+	return kvm_read_guest_cached(vcpu->kvm, &vcpu->arch.apf.data, val,
+				      sizeof(u32));
+}
+
 void kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu,
 				     struct kvm_async_pf *work)
 {
@@ -8236,6 +8243,7 @@ void kvm_arch_async_page_present(struct
 				 struct kvm_async_pf *work)
 {
 	struct x86_exception fault;
+	u32 val;
 
 	if (work->wakeup_all)
 		work->arch.token = ~0; /* broadcast wakeup */
@@ -8243,14 +8251,24 @@ void kvm_arch_async_page_present(struct
 		kvm_del_async_pf_gfn(vcpu, work->arch.gfn);
 	trace_kvm_async_pf_ready(work->arch.token, work->gva);
 
-	if ((vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED) &&
-	    !apf_put_user(vcpu, KVM_PV_REASON_PAGE_READY)) {
-		fault.vector = PF_VECTOR;
-		fault.error_code_valid = true;
-		fault.error_code = 0;
-		fault.nested_page_fault = false;
-		fault.address = work->arch.token;
-		kvm_inject_page_fault(vcpu, &fault);
+	if (vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED &&
+	    !apf_get_user(vcpu, &val)) {
+		if (val == KVM_PV_REASON_PAGE_NOT_PRESENT &&
+		    vcpu->arch.exception.pending &&
+		    vcpu->arch.exception.nr == PF_VECTOR &&
+		    !apf_put_user(vcpu, 0)) {
+			vcpu->arch.exception.pending = false;
+			vcpu->arch.exception.nr = 0;
+			vcpu->arch.exception.has_error_code = false;
+			vcpu->arch.exception.error_code = 0;
+		} else if (!apf_put_user(vcpu, KVM_PV_REASON_PAGE_READY)) {
+			fault.vector = PF_VECTOR;
+			fault.error_code_valid = true;
+			fault.error_code = 0;
+			fault.nested_page_fault = false;
+			fault.address = work->arch.token;
+			kvm_inject_page_fault(vcpu, &fault);
+		}
 	}
 	vcpu->arch.apf.halted = false;
 	vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 165/193] x86/retpoline: Remove the esp/rsp thunk
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (163 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 164/193] KVM: async_pf: Fix #DF due to inject "Page not Present" and "Page Ready" exceptions simultaneously Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 166/193] KVM: x86: Make indirect calls in emulator speculation safe Greg Kroah-Hartman
                   ` (34 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Jeff Law, Waiman Long,
	Thomas Gleixner, David Woodhouse, Tom Lendacky, Kees Cook,
	Andi Kleen, Tim Chen, Peter Zijlstra, Linus Torvalds,
	Jiri Kosina, Andy Lutomirski, Dave Hansen, Josh Poimboeuf,
	Arjan van de Ven, Paul Turner, Jack Wang, Greg Kroah-Hartman

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Waiman Long <longman@redhat.com>

commit 1df37383a8aeabb9b418698f0bcdffea01f4b1b2 upstream.

It doesn't make sense to have an indirect call thunk with esp/rsp as
retpoline code won't work correctly with the stack pointer register.
Removing it will help compiler writers to catch error in case such
a thunk call is emitted incorrectly.

Fixes: 76b043848fd2 ("x86/retpoline: Add initial retpoline support")
Suggested-by: Jeff Law <law@redhat.com>
Signed-off-by: Waiman Long <longman@redhat.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: David Woodhouse <dwmw@amazon.co.uk>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Kees Cook <keescook@google.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Tim Chen <tim.c.chen@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Jiri Kosina <jikos@kernel.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Arjan van de Ven <arjan@linux.intel.com>
Cc: Greg Kroah-Hartman <gregkh@linux-foundation.org>
Cc: Paul Turner <pjt@google.com>
Link: https://lkml.kernel.org/r/1516658974-27852-1-git-send-email-longman@redhat.com
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: cherry pick to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/include/asm/asm-prototypes.h |    1 -
 arch/x86/lib/retpoline.S              |    1 -
 2 files changed, 2 deletions(-)

--- a/arch/x86/include/asm/asm-prototypes.h
+++ b/arch/x86/include/asm/asm-prototypes.h
@@ -37,5 +37,4 @@ INDIRECT_THUNK(dx)
 INDIRECT_THUNK(si)
 INDIRECT_THUNK(di)
 INDIRECT_THUNK(bp)
-INDIRECT_THUNK(sp)
 #endif /* CONFIG_RETPOLINE */
--- a/arch/x86/lib/retpoline.S
+++ b/arch/x86/lib/retpoline.S
@@ -36,7 +36,6 @@ GENERATE_THUNK(_ASM_DX)
 GENERATE_THUNK(_ASM_SI)
 GENERATE_THUNK(_ASM_DI)
 GENERATE_THUNK(_ASM_BP)
-GENERATE_THUNK(_ASM_SP)
 #ifdef CONFIG_64BIT
 GENERATE_THUNK(r8)
 GENERATE_THUNK(r9)

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 166/193] KVM: x86: Make indirect calls in emulator speculation safe
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (164 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 165/193] x86/retpoline: Remove the esp/rsp thunk Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 167/193] KVM: VMX: Make indirect call " Greg Kroah-Hartman
                   ` (33 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Peter Zijlstra (Intel),
	Thomas Gleixner, David Woodhouse, Andrea Arcangeli, Andi Kleen,
	Ashok Raj, Jun Nakajima, David Woodhouse, Linus Torvalds, rga,
	Dave Hansen, Asit Mallick, Andy Lutomirski, Josh Poimboeuf,
	Jason Baron, Paolo Bonzini, Dan Williams, Arjan Van De Ven,
	Tim Chen, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Peter Zijlstra <peterz@infradead.org>

(cherry picked from commit 1a29b5b7f347a1a9230c1e0af5b37e3e571588ab)

Replace the indirect calls with CALL_NOSPEC.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: David Woodhouse <dwmw@amazon.co.uk>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ashok Raj <ashok.raj@intel.com>
Cc: Greg KH <gregkh@linuxfoundation.org>
Cc: Jun Nakajima <jun.nakajima@intel.com>
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: rga@amazon.de
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Asit Mallick <asit.k.mallick@intel.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Jason Baron <jbaron@akamai.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Arjan Van De Ven <arjan.van.de.ven@intel.com>
Cc: Tim Chen <tim.c.chen@linux.intel.com>
Link: https://lkml.kernel.org/r/20180125095843.595615683@infradead.org
[dwmw2: Use ASM_CALL_CONSTRAINT like upstream, now we have it]
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[backport to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/kvm/emulate.c |    9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -26,6 +26,7 @@
 #include <asm/kvm_emulate.h>
 #include <linux/stringify.h>
 #include <asm/debugreg.h>
+#include <asm/nospec-branch.h>
 
 #include "x86.h"
 #include "tss.h"
@@ -1000,8 +1001,8 @@ static u8 test_cc(unsigned int condition
 	void (*fop)(void) = (void *)em_setcc + 4 * (condition & 0xf);
 
 	flags = (flags & EFLAGS_MASK) | X86_EFLAGS_IF;
-	asm("push %[flags]; popf; call *%[fastop]"
-	    : "=a"(rc) : [fastop]"r"(fop), [flags]"r"(flags));
+	asm("push %[flags]; popf; " CALL_NOSPEC
+	    : "=a"(rc) : [thunk_target]"r"(fop), [flags]"r"(flags));
 	return rc;
 }
 
@@ -5297,9 +5298,9 @@ static int fastop(struct x86_emulate_ctx
 	ulong flags = (ctxt->eflags & EFLAGS_MASK) | X86_EFLAGS_IF;
 	if (!(ctxt->d & ByteOp))
 		fop += __ffs(ctxt->dst.bytes) * FASTOP_SIZE;
-	asm("push %[flags]; popf; call *%[fastop]; pushf; pop %[flags]\n"
+	asm("push %[flags]; popf; " CALL_NOSPEC "; pushf; pop %[flags]\n"
 	    : "+a"(ctxt->dst.val), "+d"(ctxt->src.val), [flags]"+D"(flags),
-	      [fastop]"+S"(fop)
+	      [thunk_target]"+S"(fop)
 	    : "c"(ctxt->src2.val));
 	ctxt->eflags = (ctxt->eflags & ~EFLAGS_MASK) | (flags & EFLAGS_MASK);
 	if (!fop) /* exception is returned in fop variable */

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 167/193] KVM: VMX: Make indirect call speculation safe
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (165 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 166/193] KVM: x86: Make indirect calls in emulator speculation safe Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 168/193] module/retpoline: Warn about missing retpoline in module Greg Kroah-Hartman
                   ` (32 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Peter Zijlstra (Intel),
	Thomas Gleixner, David Woodhouse, Andrea Arcangeli, Andi Kleen,
	Ashok Raj, Jun Nakajima, David Woodhouse, Linus Torvalds, rga,
	Dave Hansen, Asit Mallick, Andy Lutomirski, Josh Poimboeuf,
	Jason Baron, Paolo Bonzini, Dan Williams, Arjan Van De Ven,
	Tim Chen, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Peter Zijlstra <peterz@infradead.org>

(cherry picked from commit c940a3fb1e2e9b7d03228ab28f375fb5a47ff699)

Replace indirect call with CALL_NOSPEC.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: David Woodhouse <dwmw@amazon.co.uk>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ashok Raj <ashok.raj@intel.com>
Cc: Greg KH <gregkh@linuxfoundation.org>
Cc: Jun Nakajima <jun.nakajima@intel.com>
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: rga@amazon.de
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Asit Mallick <asit.k.mallick@intel.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Jason Baron <jbaron@akamai.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Arjan Van De Ven <arjan.van.de.ven@intel.com>
Cc: Tim Chen <tim.c.chen@linux.intel.com>
Link: https://lkml.kernel.org/r/20180125095843.645776917@infradead.org
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[backport to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/kvm/vmx.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -8377,13 +8377,13 @@ static void vmx_handle_external_intr(str
 			"pushf\n\t"
 			"orl $0x200, (%%" _ASM_SP ")\n\t"
 			__ASM_SIZE(push) " $%c[cs]\n\t"
-			"call *%[entry]\n\t"
+			CALL_NOSPEC
 			:
 #ifdef CONFIG_X86_64
 			[sp]"=&r"(tmp)
 #endif
 			:
-			[entry]"r"(entry),
+			THUNK_TARGET(entry),
 			[ss]"i"(__KERNEL_DS),
 			[cs]"i"(__KERNEL_CS)
 			);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 168/193] module/retpoline: Warn about missing retpoline in module
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (166 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 167/193] KVM: VMX: Make indirect call " Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 169/193] x86/nospec: Fix header guards names Greg Kroah-Hartman
                   ` (31 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Andi Kleen, Thomas Gleixner,
	David Woodhouse, torvalds, jeyu, arjan, David Woodhouse,
	Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Andi Kleen <ak@linux.intel.com>

(cherry picked from commit caf7501a1b4ec964190f31f9c3f163de252273b8)

There's a risk that a kernel which has full retpoline mitigations becomes
vulnerable when a module gets loaded that hasn't been compiled with the
right compiler or the right option.

To enable detection of that mismatch at module load time, add a module info
string "retpoline" at build time when the module was compiled with
retpoline support. This only covers compiled C source, but assembler source
or prebuilt object files are not checked.

If a retpoline enabled kernel detects a non retpoline protected module at
load time, print a warning and report it in the sysfs vulnerability file.

[ tglx: Massaged changelog ]

Signed-off-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: gregkh@linuxfoundation.org
Cc: torvalds@linux-foundation.org
Cc: jeyu@kernel.org
Cc: arjan@linux.intel.com
Link: https://lkml.kernel.org/r/20180125235028.31211-1-andi@firstfloor.org
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: port to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/kernel/cpu/bugs.c |   18 +++++++++++++++++-
 include/linux/module.h     |    9 +++++++++
 kernel/module.c            |   11 +++++++++++
 scripts/mod/modpost.c      |    9 +++++++++
 4 files changed, 46 insertions(+), 1 deletion(-)

--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -10,6 +10,7 @@
 #include <linux/init.h>
 #include <linux/utsname.h>
 #include <linux/cpu.h>
+#include <linux/module.h>
 
 #include <asm/nospec-branch.h>
 #include <asm/cmdline.h>
@@ -93,6 +94,20 @@ static const char *spectre_v2_strings[]
 
 static enum spectre_v2_mitigation spectre_v2_enabled = SPECTRE_V2_NONE;
 
+static bool spectre_v2_bad_module;
+
+#ifdef RETPOLINE
+bool retpoline_module_ok(bool has_retpoline)
+{
+	if (spectre_v2_enabled == SPECTRE_V2_NONE || has_retpoline)
+		return true;
+
+	pr_err("System may be vunerable to spectre v2\n");
+	spectre_v2_bad_module = true;
+	return false;
+}
+#endif
+
 static void __init spec2_print_if_insecure(const char *reason)
 {
 	if (boot_cpu_has_bug(X86_BUG_SPECTRE_V2))
@@ -277,6 +292,7 @@ ssize_t cpu_show_spectre_v2(struct devic
 	if (!boot_cpu_has_bug(X86_BUG_SPECTRE_V2))
 		return sprintf(buf, "Not affected\n");
 
-	return sprintf(buf, "%s\n", spectre_v2_strings[spectre_v2_enabled]);
+	return sprintf(buf, "%s%s\n", spectre_v2_strings[spectre_v2_enabled],
+		       spectre_v2_bad_module ? " - vulnerable module loaded" : "");
 }
 #endif
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -789,6 +789,15 @@ static inline void module_bug_finalize(c
 static inline void module_bug_cleanup(struct module *mod) {}
 #endif	/* CONFIG_GENERIC_BUG */
 
+#ifdef RETPOLINE
+extern bool retpoline_module_ok(bool has_retpoline);
+#else
+static inline bool retpoline_module_ok(bool has_retpoline)
+{
+	return true;
+}
+#endif
+
 #ifdef CONFIG_MODULE_SIG
 static inline bool module_sig_ok(struct module *module)
 {
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -2869,6 +2869,15 @@ static struct module *setup_load_info(st
 	return mod;
 }
 
+static void check_modinfo_retpoline(struct module *mod, struct load_info *info)
+{
+	if (retpoline_module_ok(get_modinfo(info, "retpoline")))
+		return;
+
+	pr_warn("%s: loading module not compiled with retpoline compiler.\n",
+		mod->name);
+}
+
 static int check_modinfo(struct module *mod, struct load_info *info, int flags)
 {
 	const char *modmagic = get_modinfo(info, "vermagic");
@@ -2895,6 +2904,8 @@ static int check_modinfo(struct module *
 		add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK);
 	}
 
+	check_modinfo_retpoline(mod, info);
+
 	if (get_modinfo(info, "staging")) {
 		add_taint_module(mod, TAINT_CRAP, LOCKDEP_STILL_OK);
 		pr_warn("%s: module is from the staging directory, the quality "
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -2129,6 +2129,14 @@ static void add_intree_flag(struct buffe
 		buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n");
 }
 
+/* Cannot check for assembler */
+static void add_retpoline(struct buffer *b)
+{
+	buf_printf(b, "\n#ifdef RETPOLINE\n");
+	buf_printf(b, "MODULE_INFO(retpoline, \"Y\");\n");
+	buf_printf(b, "#endif\n");
+}
+
 static void add_staging_flag(struct buffer *b, const char *name)
 {
 	static const char *staging_dir = "drivers/staging";
@@ -2473,6 +2481,7 @@ int main(int argc, char **argv)
 
 		add_header(&buf, mod);
 		add_intree_flag(&buf, !external_module);
+		add_retpoline(&buf);
 		add_staging_flag(&buf, mod->name);
 		err |= add_versions(&buf, mod);
 		add_depends(&buf, mod, modules);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 169/193] x86/nospec: Fix header guards names
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (167 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 168/193] module/retpoline: Warn about missing retpoline in module Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 170/193] x86/bugs: Drop one "mitigation" from dmesg Greg Kroah-Hartman
                   ` (30 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Borislav Petkov, Thomas Gleixner,
	riel, ak, peterz, David Woodhouse, jikos, luto, dave.hansen,
	torvalds, keescook, Josh Poimboeuf, tim.c.chen, pjt,
	David Woodhouse, Jack Wang, gregkh

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Borislav Petkov <bp@suse.de>

(cherry picked from commit 7a32fc51ca938e67974cbb9db31e1a43f98345a9)

... to adhere to the _ASM_X86_ naming scheme.

No functional change.

Signed-off-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: riel@redhat.com
Cc: ak@linux.intel.com
Cc: peterz@infradead.org
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: jikos@kernel.org
Cc: luto@amacapital.net
Cc: dave.hansen@intel.com
Cc: torvalds@linux-foundation.org
Cc: keescook@google.com
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: tim.c.chen@linux.intel.com
Cc: gregkh@linux-foundation.org
Cc: pjt@google.com
Link: https://lkml.kernel.org/r/20180126121139.31959-3-bp@alien8.de
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[cherry-pick to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/include/asm/nospec-branch.h |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

--- a/arch/x86/include/asm/nospec-branch.h
+++ b/arch/x86/include/asm/nospec-branch.h
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 
-#ifndef __NOSPEC_BRANCH_H__
-#define __NOSPEC_BRANCH_H__
+#ifndef _ASM_X86_NOSPEC_BRANCH_H_
+#define _ASM_X86_NOSPEC_BRANCH_H_
 
 #include <asm/alternative.h>
 #include <asm/alternative-asm.h>
@@ -195,4 +195,4 @@ static inline void vmexit_fill_RSB(void)
 }
 
 #endif /* __ASSEMBLY__ */
-#endif /* __NOSPEC_BRANCH_H__ */
+#endif /* _ASM_X86_NOSPEC_BRANCH_H_ */

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 170/193] x86/bugs: Drop one "mitigation" from dmesg
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (168 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 169/193] x86/nospec: Fix header guards names Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 171/193] x86/cpu/bugs: Make retpoline module warning conditional Greg Kroah-Hartman
                   ` (29 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Borislav Petkov, Thomas Gleixner,
	riel, ak, peterz, David Woodhouse, jikos, luto, dave.hansen,
	torvalds, keescook, Josh Poimboeuf, tim.c.chen, pjt,
	David Woodhouse, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Borislav Petkov <bp@suse.de>

(cherry picked from commit 55fa19d3e51f33d9cd4056d25836d93abf9438db)

Make

[    0.031118] Spectre V2 mitigation: Mitigation: Full generic retpoline

into

[    0.031118] Spectre V2: Mitigation: Full generic retpoline

to reduce the mitigation mitigations strings.

Signed-off-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: riel@redhat.com
Cc: ak@linux.intel.com
Cc: peterz@infradead.org
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: jikos@kernel.org
Cc: luto@amacapital.net
Cc: dave.hansen@intel.com
Cc: torvalds@linux-foundation.org
Cc: keescook@google.com
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: tim.c.chen@linux.intel.com
Cc: pjt@google.com
Link: https://lkml.kernel.org/r/20180126121139.31959-5-bp@alien8.de
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: port to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/kernel/cpu/bugs.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -90,7 +90,7 @@ static const char *spectre_v2_strings[]
 };
 
 #undef pr_fmt
-#define pr_fmt(fmt)     "Spectre V2 mitigation: " fmt
+#define pr_fmt(fmt)     "Spectre V2 : " fmt
 
 static enum spectre_v2_mitigation spectre_v2_enabled = SPECTRE_V2_NONE;
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 171/193] x86/cpu/bugs: Make retpoline module warning conditional
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (169 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 170/193] x86/bugs: Drop one "mitigation" from dmesg Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 172/193] x86/spectre: Check CONFIG_RETPOLINE in command line parser Greg Kroah-Hartman
                   ` (28 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Borislav Petkov, Thomas Gleixner,
	Andi Kleen, David Woodhouse, David Woodhouse, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Thomas Gleixner <tglx@linutronix.de>

(cherry picked from commit e383095c7fe8d218e00ec0f83e4b95ed4e627b02)

If sysfs is disabled and RETPOLINE not defined:

arch/x86/kernel/cpu/bugs.c:97:13: warning: ‘spectre_v2_bad_module’ defined but not used
[-Wunused-variable]
 static bool spectre_v2_bad_module;

Hide it.

Fixes: caf7501a1b4e ("module/retpoline: Warn about missing retpoline in module")
Reported-by: Borislav Petkov <bp@alien8.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: port to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/kernel/cpu/bugs.c |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -94,9 +94,10 @@ static const char *spectre_v2_strings[]
 
 static enum spectre_v2_mitigation spectre_v2_enabled = SPECTRE_V2_NONE;
 
-static bool spectre_v2_bad_module;
 
 #ifdef RETPOLINE
+static bool spectre_v2_bad_module;
+
 bool retpoline_module_ok(bool has_retpoline)
 {
 	if (spectre_v2_enabled == SPECTRE_V2_NONE || has_retpoline)
@@ -106,6 +107,13 @@ bool retpoline_module_ok(bool has_retpol
 	spectre_v2_bad_module = true;
 	return false;
 }
+
+static inline const char *spectre_v2_module_string(void)
+{
+	return spectre_v2_bad_module ? " - vulnerable module loaded" : "";
+}
+#else
+static inline const char *spectre_v2_module_string(void) { return ""; }
 #endif
 
 static void __init spec2_print_if_insecure(const char *reason)
@@ -293,6 +301,6 @@ ssize_t cpu_show_spectre_v2(struct devic
 		return sprintf(buf, "Not affected\n");
 
 	return sprintf(buf, "%s%s\n", spectre_v2_strings[spectre_v2_enabled],
-		       spectre_v2_bad_module ? " - vulnerable module loaded" : "");
+		       spectre_v2_module_string());
 }
 #endif

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 172/193] x86/spectre: Check CONFIG_RETPOLINE in command line parser
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (170 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 171/193] x86/cpu/bugs: Make retpoline module warning conditional Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 173/193] Documentation: Document array_index_nospec Greg Kroah-Hartman
                   ` (27 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Dou Liyang, Thomas Gleixner, ak,
	peterz, Tomohiro, dave.hansen, bp, arjan, dwmw, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Dou Liyang <douly.fnst@cn.fujitsu.com>

(cherry picked from commit 9471eee9186a46893726e22ebb54cade3f9bc043)

The spectre_v2 option 'auto' does not check whether CONFIG_RETPOLINE is
enabled. As a consequence it fails to emit the appropriate warning and sets
feature flags which have no effect at all.

Add the missing IS_ENABLED() check.

Fixes: da285121560e ("x86/spectre: Add boot time option to select Spectre v2 mitigation")
Signed-off-by: Dou Liyang <douly.fnst@cn.fujitsu.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: ak@linux.intel.com
Cc: peterz@infradead.org
Cc: Tomohiro <misono.tomohiro@jp.fujitsu.com>
Cc: dave.hansen@intel.com
Cc: bp@alien8.de
Cc: arjan@linux.intel.com
Cc: dwmw@amazon.co.uk
Cc: stable@vger.kernel.org
Link: https://lkml.kernel.org/r/f5892721-7528-3647-08fb-f8d10e65ad87@cn.fujitsu.com
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: cherry-pick to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/kernel/cpu/bugs.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -213,10 +213,10 @@ static void __init spectre_v2_select_mit
 		return;
 
 	case SPECTRE_V2_CMD_FORCE:
-		/* FALLTRHU */
 	case SPECTRE_V2_CMD_AUTO:
-		goto retpoline_auto;
-
+		if (IS_ENABLED(CONFIG_RETPOLINE))
+			goto retpoline_auto;
+		break;
 	case SPECTRE_V2_CMD_RETPOLINE_AMD:
 		if (IS_ENABLED(CONFIG_RETPOLINE))
 			goto retpoline_amd;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 173/193] Documentation: Document array_index_nospec
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (171 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 172/193] x86/spectre: Check CONFIG_RETPOLINE in command line parser Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 174/193] array_index_nospec: Sanitize speculative array de-references Greg Kroah-Hartman
                   ` (26 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Mark Rutland, Will Deacon,
	Dan Williams, Thomas Gleixner, Kees Cook, linux-arch,
	Jonathan Corbet, Peter Zijlstra, kernel-hardening, torvalds,
	alan, David Woodhouse, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Mark Rutland <mark.rutland@arm.com>

(cherry picked from commit f84a56f73dddaeac1dba8045b007f742f61cd2da)

Document the rationale and usage of the new array_index_nospec() helper.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Kees Cook <keescook@chromium.org>
Cc: linux-arch@vger.kernel.org
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: gregkh@linuxfoundation.org
Cc: kernel-hardening@lists.openwall.com
Cc: torvalds@linux-foundation.org
Cc: alan@linux.intel.com
Link: https://lkml.kernel.org/r/151727413645.33451.15878817161436755393.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: cherry pick to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 Documentation/speculation.txt |   90 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 90 insertions(+)
 create mode 100644 Documentation/speculation.txt

--- /dev/null
+++ b/Documentation/speculation.txt
@@ -0,0 +1,90 @@
+This document explains potential effects of speculation, and how undesirable
+effects can be mitigated portably using common APIs.
+
+===========
+Speculation
+===========
+
+To improve performance and minimize average latencies, many contemporary CPUs
+employ speculative execution techniques such as branch prediction, performing
+work which may be discarded at a later stage.
+
+Typically speculative execution cannot be observed from architectural state,
+such as the contents of registers. However, in some cases it is possible to
+observe its impact on microarchitectural state, such as the presence or
+absence of data in caches. Such state may form side-channels which can be
+observed to extract secret information.
+
+For example, in the presence of branch prediction, it is possible for bounds
+checks to be ignored by code which is speculatively executed. Consider the
+following code:
+
+	int load_array(int *array, unsigned int index)
+	{
+		if (index >= MAX_ARRAY_ELEMS)
+			return 0;
+		else
+			return array[index];
+	}
+
+Which, on arm64, may be compiled to an assembly sequence such as:
+
+	CMP	<index>, #MAX_ARRAY_ELEMS
+	B.LT	less
+	MOV	<returnval>, #0
+	RET
+  less:
+	LDR	<returnval>, [<array>, <index>]
+	RET
+
+It is possible that a CPU mis-predicts the conditional branch, and
+speculatively loads array[index], even if index >= MAX_ARRAY_ELEMS. This
+value will subsequently be discarded, but the speculated load may affect
+microarchitectural state which can be subsequently measured.
+
+More complex sequences involving multiple dependent memory accesses may
+result in sensitive information being leaked. Consider the following
+code, building on the prior example:
+
+	int load_dependent_arrays(int *arr1, int *arr2, int index)
+	{
+		int val1, val2,
+
+		val1 = load_array(arr1, index);
+		val2 = load_array(arr2, val1);
+
+		return val2;
+	}
+
+Under speculation, the first call to load_array() may return the value
+of an out-of-bounds address, while the second call will influence
+microarchitectural state dependent on this value. This may provide an
+arbitrary read primitive.
+
+====================================
+Mitigating speculation side-channels
+====================================
+
+The kernel provides a generic API to ensure that bounds checks are
+respected even under speculation. Architectures which are affected by
+speculation-based side-channels are expected to implement these
+primitives.
+
+The array_index_nospec() helper in <linux/nospec.h> can be used to
+prevent information from being leaked via side-channels.
+
+A call to array_index_nospec(index, size) returns a sanitized index
+value that is bounded to [0, size) even under cpu speculation
+conditions.
+
+This can be used to protect the earlier load_array() example:
+
+	int load_array(int *array, unsigned int index)
+	{
+		if (index >= MAX_ARRAY_ELEMS)
+			return 0;
+		else {
+			index = array_index_nospec(index, MAX_ARRAY_ELEMS);
+			return array[index];
+		}
+	}

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 174/193] array_index_nospec: Sanitize speculative array de-references
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (172 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 173/193] Documentation: Document array_index_nospec Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 175/193] x86: Implement array_index_mask_nospec Greg Kroah-Hartman
                   ` (25 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Cyril Novikov, Dan Williams,
	Thomas Gleixner, linux-arch, kernel-hardening, Peter Zijlstra,
	Catalin Marinas, Will Deacon, Russell King, torvalds, alan,
	David Woodhouse, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Dan Williams <dan.j.williams@intel.com>

(cherry picked from commit f3804203306e098dae9ca51540fcd5eb700d7f40)

array_index_nospec() is proposed as a generic mechanism to mitigate
against Spectre-variant-1 attacks, i.e. an attack that bypasses boundary
checks via speculative execution. The array_index_nospec()
implementation is expected to be safe for current generation CPUs across
multiple architectures (ARM, x86).

Based on an original implementation by Linus Torvalds, tweaked to remove
speculative flows by Alexei Starovoitov, and tweaked again by Linus to
introduce an x86 assembly implementation for the mask generation.

Co-developed-by: Linus Torvalds <torvalds@linux-foundation.org>
Co-developed-by: Alexei Starovoitov <ast@kernel.org>
Suggested-by: Cyril Novikov <cnovikov@lynx.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org
Cc: kernel-hardening@lists.openwall.com
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: gregkh@linuxfoundation.org
Cc: torvalds@linux-foundation.org
Cc: alan@linux.intel.com
Link: https://lkml.kernel.org/r/151727414229.33451.18411580953862676575.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: cherry pick to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 include/linux/nospec.h |   72 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)
 create mode 100644 include/linux/nospec.h

--- /dev/null
+++ b/include/linux/nospec.h
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright(c) 2018 Linus Torvalds. All rights reserved.
+// Copyright(c) 2018 Alexei Starovoitov. All rights reserved.
+// Copyright(c) 2018 Intel Corporation. All rights reserved.
+
+#ifndef _LINUX_NOSPEC_H
+#define _LINUX_NOSPEC_H
+
+/**
+ * array_index_mask_nospec() - generate a ~0 mask when index < size, 0 otherwise
+ * @index: array element index
+ * @size: number of elements in array
+ *
+ * When @index is out of bounds (@index >= @size), the sign bit will be
+ * set.  Extend the sign bit to all bits and invert, giving a result of
+ * zero for an out of bounds index, or ~0 if within bounds [0, @size).
+ */
+#ifndef array_index_mask_nospec
+static inline unsigned long array_index_mask_nospec(unsigned long index,
+						    unsigned long size)
+{
+	/*
+	 * Warn developers about inappropriate array_index_nospec() usage.
+	 *
+	 * Even if the CPU speculates past the WARN_ONCE branch, the
+	 * sign bit of @index is taken into account when generating the
+	 * mask.
+	 *
+	 * This warning is compiled out when the compiler can infer that
+	 * @index and @size are less than LONG_MAX.
+	 */
+	if (WARN_ONCE(index > LONG_MAX || size > LONG_MAX,
+			"array_index_nospec() limited to range of [0, LONG_MAX]\n"))
+		return 0;
+
+	/*
+	 * Always calculate and emit the mask even if the compiler
+	 * thinks the mask is not needed. The compiler does not take
+	 * into account the value of @index under speculation.
+	 */
+	OPTIMIZER_HIDE_VAR(index);
+	return ~(long)(index | (size - 1UL - index)) >> (BITS_PER_LONG - 1);
+}
+#endif
+
+/*
+ * array_index_nospec - sanitize an array index after a bounds check
+ *
+ * For a code sequence like:
+ *
+ *     if (index < size) {
+ *         index = array_index_nospec(index, size);
+ *         val = array[index];
+ *     }
+ *
+ * ...if the CPU speculates past the bounds check then
+ * array_index_nospec() will clamp the index within the range of [0,
+ * size).
+ */
+#define array_index_nospec(index, size)					\
+({									\
+	typeof(index) _i = (index);					\
+	typeof(size) _s = (size);					\
+	unsigned long _mask = array_index_mask_nospec(_i, _s);		\
+									\
+	BUILD_BUG_ON(sizeof(_i) > sizeof(long));			\
+	BUILD_BUG_ON(sizeof(_s) > sizeof(long));			\
+									\
+	_i &= _mask;							\
+	_i;								\
+})
+#endif /* _LINUX_NOSPEC_H */

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 175/193] x86: Implement array_index_mask_nospec
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (173 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 174/193] array_index_nospec: Sanitize speculative array de-references Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 176/193] x86: Introduce barrier_nospec Greg Kroah-Hartman
                   ` (24 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Linus Torvalds, Dan Williams,
	Thomas Gleixner, linux-arch, kernel-hardening, alan,
	David Woodhouse, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Dan Williams <dan.j.williams@intel.com>

(cherry picked from commit babdde2698d482b6c0de1eab4f697cf5856c5859)

array_index_nospec() uses a mask to sanitize user controllable array
indexes, i.e. generate a 0 mask if 'index' >= 'size', and a ~0 mask
otherwise. While the default array_index_mask_nospec() handles the
carry-bit from the (index - size) result in software.

The x86 array_index_mask_nospec() does the same, but the carry-bit is
handled in the processor CF flag without conditional instructions in the
control flow.

Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org
Cc: kernel-hardening@lists.openwall.com
Cc: gregkh@linuxfoundation.org
Cc: alan@linux.intel.com
Link: https://lkml.kernel.org/r/151727414808.33451.1873237130672785331.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang:chery pick to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/include/asm/barrier.h |   24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

--- a/arch/x86/include/asm/barrier.h
+++ b/arch/x86/include/asm/barrier.h
@@ -24,6 +24,30 @@
 #define wmb()	asm volatile("sfence" ::: "memory")
 #endif
 
+/**
+ * array_index_mask_nospec() - generate a mask that is ~0UL when the
+ * 	bounds check succeeds and 0 otherwise
+ * @index: array element index
+ * @size: number of elements in array
+ *
+ * Returns:
+ *     0 - (index < size)
+ */
+static inline unsigned long array_index_mask_nospec(unsigned long index,
+		unsigned long size)
+{
+	unsigned long mask;
+
+	asm ("cmp %1,%2; sbb %0,%0;"
+			:"=r" (mask)
+			:"r"(size),"r" (index)
+			:"cc");
+	return mask;
+}
+
+/* Override the default implementation from linux/nospec.h. */
+#define array_index_mask_nospec array_index_mask_nospec
+
 #ifdef CONFIG_X86_PPRO_FENCE
 #define dma_rmb()	rmb()
 #else

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 176/193] x86: Introduce barrier_nospec
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (174 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 175/193] x86: Implement array_index_mask_nospec Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 177/193] x86/get_user: Use pointer masking to limit speculation Greg Kroah-Hartman
                   ` (23 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Linus Torvalds, Andi Kleen,
	Ingo Molnar, Dan Williams, Thomas Gleixner, linux-arch,
	Tom Lendacky, Kees Cook, kernel-hardening, Al Viro, alan,
	David Woodhouse, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Dan Williams <dan.j.williams@intel.com>

(cherry picked from commit b3d7ad85b80bbc404635dca80f5b129f6242bc7a)

Rename the open coded form of this instruction sequence from
rdtsc_ordered() into a generic barrier primitive, barrier_nospec().

One of the mitigations for Spectre variant1 vulnerabilities is to fence
speculative execution after successfully validating a bounds check. I.e.
force the result of a bounds check to resolve in the instruction pipeline
to ensure speculative execution honors that result before potentially
operating on out-of-bounds data.

No functional changes.

Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Suggested-by: Andi Kleen <ak@linux.intel.com>
Suggested-by: Ingo Molnar <mingo@redhat.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: kernel-hardening@lists.openwall.com
Cc: gregkh@linuxfoundation.org
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: alan@linux.intel.com
Link: https://lkml.kernel.org/r/151727415361.33451.9049453007262764675.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: cherry pick to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/include/asm/barrier.h |    4 ++++
 arch/x86/include/asm/msr.h     |    3 +--
 2 files changed, 5 insertions(+), 2 deletions(-)

--- a/arch/x86/include/asm/barrier.h
+++ b/arch/x86/include/asm/barrier.h
@@ -48,6 +48,10 @@ static inline unsigned long array_index_
 /* Override the default implementation from linux/nospec.h. */
 #define array_index_mask_nospec array_index_mask_nospec
 
+/* Prevent speculative execution past this barrier. */
+#define barrier_nospec() alternative_2("", "mfence", X86_FEATURE_MFENCE_RDTSC, \
+					   "lfence", X86_FEATURE_LFENCE_RDTSC)
+
 #ifdef CONFIG_X86_PPRO_FENCE
 #define dma_rmb()	rmb()
 #else
--- a/arch/x86/include/asm/msr.h
+++ b/arch/x86/include/asm/msr.h
@@ -147,8 +147,7 @@ static __always_inline unsigned long lon
 	 * that some other imaginary CPU is updating continuously with a
 	 * time stamp.
 	 */
-	alternative_2("", "mfence", X86_FEATURE_MFENCE_RDTSC,
-			  "lfence", X86_FEATURE_LFENCE_RDTSC);
+	barrier_nospec();
 	return rdtsc();
 }
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 177/193] x86/get_user: Use pointer masking to limit speculation
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (175 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 176/193] x86: Introduce barrier_nospec Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 178/193] x86/syscall: Sanitize syscall table de-references under speculation Greg Kroah-Hartman
                   ` (22 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Dan Williams, Thomas Gleixner,
	linux-arch, Kees Cook, kernel-hardening, Al Viro,
	Andy Lutomirski, torvalds, alan, David Woodhouse, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Dan Williams <dan.j.williams@intel.com>

(cherry picked from commit c7f631cb07e7da06ac1d231ca178452339e32a94)

Quoting Linus:

    I do think that it would be a good idea to very expressly document
    the fact that it's not that the user access itself is unsafe. I do
    agree that things like "get_user()" want to be protected, but not
    because of any direct bugs or problems with get_user() and friends,
    but simply because get_user() is an excellent source of a pointer
    that is obviously controlled from a potentially attacking user
    space. So it's a prime candidate for then finding _subsequent_
    accesses that can then be used to perturb the cache.

Unlike the __get_user() case get_user() includes the address limit check
near the pointer de-reference. With that locality the speculation can be
mitigated with pointer narrowing rather than a barrier, i.e.
array_index_nospec(). Where the narrowing is performed by:

	cmp %limit, %ptr
	sbb %mask, %mask
	and %mask, %ptr

With respect to speculation the value of %ptr is either less than %limit
or NULL.

Co-developed-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org
Cc: Kees Cook <keescook@chromium.org>
Cc: kernel-hardening@lists.openwall.com
Cc: gregkh@linuxfoundation.org
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: torvalds@linux-foundation.org
Cc: alan@linux.intel.com
Link: https://lkml.kernel.org/r/151727417469.33451.11804043010080838495.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: port to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/lib/getuser.S |   10 ++++++++++
 1 file changed, 10 insertions(+)

--- a/arch/x86/lib/getuser.S
+++ b/arch/x86/lib/getuser.S
@@ -38,6 +38,8 @@ ENTRY(__get_user_1)
 	GET_THREAD_INFO(%_ASM_DX)
 	cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
 	jae bad_get_user
+	sbb %_ASM_DX, %_ASM_DX		/* array_index_mask_nospec() */
+	and %_ASM_DX, %_ASM_AX
 	ASM_STAC
 1:	movzbl (%_ASM_AX),%edx
 	xor %eax,%eax
@@ -51,6 +53,8 @@ ENTRY(__get_user_2)
 	GET_THREAD_INFO(%_ASM_DX)
 	cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
 	jae bad_get_user
+	sbb %_ASM_DX, %_ASM_DX		/* array_index_mask_nospec() */
+	and %_ASM_DX, %_ASM_AX
 	ASM_STAC
 2:	movzwl -1(%_ASM_AX),%edx
 	xor %eax,%eax
@@ -64,6 +68,8 @@ ENTRY(__get_user_4)
 	GET_THREAD_INFO(%_ASM_DX)
 	cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
 	jae bad_get_user
+	sbb %_ASM_DX, %_ASM_DX		/* array_index_mask_nospec() */
+	and %_ASM_DX, %_ASM_AX
 	ASM_STAC
 3:	movl -3(%_ASM_AX),%edx
 	xor %eax,%eax
@@ -78,6 +84,8 @@ ENTRY(__get_user_8)
 	GET_THREAD_INFO(%_ASM_DX)
 	cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
 	jae bad_get_user
+	sbb %_ASM_DX, %_ASM_DX		/* array_index_mask_nospec() */
+	and %_ASM_DX, %_ASM_AX
 	ASM_STAC
 4:	movq -7(%_ASM_AX),%rdx
 	xor %eax,%eax
@@ -89,6 +97,8 @@ ENTRY(__get_user_8)
 	GET_THREAD_INFO(%_ASM_DX)
 	cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
 	jae bad_get_user_8
+	sbb %_ASM_DX, %_ASM_DX		/* array_index_mask_nospec() */
+	and %_ASM_DX, %_ASM_AX
 	ASM_STAC
 4:	movl -7(%_ASM_AX),%edx
 5:	movl -3(%_ASM_AX),%ecx

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 178/193] x86/syscall: Sanitize syscall table de-references under speculation
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (176 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 177/193] x86/get_user: Use pointer masking to limit speculation Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-03-06 14:21   ` Jiri Slaby
  2018-02-23 18:26 ` [PATCH 4.4 179/193] vfs, fdtable: Prevent bounds-check bypass via speculative execution Greg Kroah-Hartman
                   ` (21 subsequent siblings)
  199 siblings, 1 reply; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Linus Torvalds, Dan Williams,
	Thomas Gleixner, linux-arch, kernel-hardening, Andy Lutomirski,
	alan, David Woodhouse, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Dan Williams <dan.j.williams@intel.com>

(cherry picked from commit 2fbd7af5af8665d18bcefae3e9700be07e22b681)

The syscall table base is a user controlled function pointer in kernel
space. Use array_index_nospec() to prevent any out of bounds speculation.

While retpoline prevents speculating into a userspace directed target it
does not stop the pointer de-reference, the concern is leaking memory
relative to the syscall table base, by observing instruction cache
behavior.

Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org
Cc: kernel-hardening@lists.openwall.com
Cc: gregkh@linuxfoundation.org
Cc: Andy Lutomirski <luto@kernel.org>
Cc: alan@linux.intel.com
Link: https://lkml.kernel.org/r/151727417984.33451.1216731042505722161.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: port to 4.4, no syscall_64]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/entry/common.c |    2 ++
 1 file changed, 2 insertions(+)

--- a/arch/x86/entry/common.c
+++ b/arch/x86/entry/common.c
@@ -20,6 +20,7 @@
 #include <linux/export.h>
 #include <linux/context_tracking.h>
 #include <linux/user-return-notifier.h>
+#include <linux/nospec.h>
 #include <linux/uprobes.h>
 
 #include <asm/desc.h>
@@ -381,6 +382,7 @@ __always_inline void do_syscall_32_irqs_
 	}
 
 	if (likely(nr < IA32_NR_syscalls)) {
+		nr = array_index_nospec(nr, IA32_NR_syscalls);
 		/*
 		 * It's possible that a 32-bit syscall implementation
 		 * takes a 64-bit parameter but nonetheless assumes that

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 179/193] vfs, fdtable: Prevent bounds-check bypass via speculative execution
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (177 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 178/193] x86/syscall: Sanitize syscall table de-references under speculation Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 180/193] nl80211: Sanitize array index in parse_txq_params Greg Kroah-Hartman
                   ` (20 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Dan Williams, Thomas Gleixner,
	linux-arch, kernel-hardening, Al Viro, torvalds, alan,
	David Woodhouse, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Dan Williams <dan.j.williams@intel.com>

(cherry picked from commit 56c30ba7b348b90484969054d561f711ba196507)

'fd' is a user controlled value that is used as a data dependency to
read from the 'fdt->fd' array.  In order to avoid potential leaks of
kernel memory values, block speculative execution of the instruction
stream that could issue reads based on an invalid 'file *' returned from
__fcheck_files.

Co-developed-by: Elena Reshetova <elena.reshetova@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org
Cc: kernel-hardening@lists.openwall.com
Cc: gregkh@linuxfoundation.org
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: torvalds@linux-foundation.org
Cc: alan@linux.intel.com
Link: https://lkml.kernel.org/r/151727418500.33451.17392199002892248656.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: cherry pick to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 include/linux/fdtable.h |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

--- a/include/linux/fdtable.h
+++ b/include/linux/fdtable.h
@@ -9,6 +9,7 @@
 #include <linux/compiler.h>
 #include <linux/spinlock.h>
 #include <linux/rcupdate.h>
+#include <linux/nospec.h>
 #include <linux/types.h>
 #include <linux/init.h>
 #include <linux/fs.h>
@@ -81,8 +82,10 @@ static inline struct file *__fcheck_file
 {
 	struct fdtable *fdt = rcu_dereference_raw(files->fdt);
 
-	if (fd < fdt->max_fds)
+	if (fd < fdt->max_fds) {
+		fd = array_index_nospec(fd, fdt->max_fds);
 		return rcu_dereference_raw(fdt->fd[fd]);
+	}
 	return NULL;
 }
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 180/193] nl80211: Sanitize array index in parse_txq_params
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (178 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 179/193] vfs, fdtable: Prevent bounds-check bypass via speculative execution Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 181/193] x86/spectre: Report get_user mitigation for spectre_v1 Greg Kroah-Hartman
                   ` (19 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Christian Lamparter, Elena Reshetova,
	Dan Williams, Thomas Gleixner, Johannes Berg, linux-arch,
	kernel-hardening, linux-wireless, torvalds, David S. Miller,
	alan, David Woodhouse, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Dan Williams <dan.j.williams@intel.com>

(cherry picked from commit 259d8c1e984318497c84eef547bbb6b1d9f4eb05)

Wireless drivers rely on parse_txq_params to validate that txq_params->ac
is less than NL80211_NUM_ACS by the time the low-level driver's ->conf_tx()
handler is called. Use a new helper, array_index_nospec(), to sanitize
txq_params->ac with respect to speculation. I.e. ensure that any
speculation into ->conf_tx() handlers is done with a value of
txq_params->ac that is within the bounds of [0, NL80211_NUM_ACS).

Reported-by: Christian Lamparter <chunkeey@gmail.com>
Reported-by: Elena Reshetova <elena.reshetova@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Johannes Berg <johannes@sipsolutions.net>
Cc: linux-arch@vger.kernel.org
Cc: kernel-hardening@lists.openwall.com
Cc: gregkh@linuxfoundation.org
Cc: linux-wireless@vger.kernel.org
Cc: torvalds@linux-foundation.org
Cc: "David S. Miller" <davem@davemloft.net>
Cc: alan@linux.intel.com
Link: https://lkml.kernel.org/r/151727419584.33451.7700736761686184303.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: cherry pick to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 net/wireless/nl80211.c |    9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -16,6 +16,7 @@
 #include <linux/nl80211.h>
 #include <linux/rtnetlink.h>
 #include <linux/netlink.h>
+#include <linux/nospec.h>
 #include <linux/etherdevice.h>
 #include <net/net_namespace.h>
 #include <net/genetlink.h>
@@ -1879,20 +1880,22 @@ static const struct nla_policy txq_param
 static int parse_txq_params(struct nlattr *tb[],
 			    struct ieee80211_txq_params *txq_params)
 {
+	u8 ac;
+
 	if (!tb[NL80211_TXQ_ATTR_AC] || !tb[NL80211_TXQ_ATTR_TXOP] ||
 	    !tb[NL80211_TXQ_ATTR_CWMIN] || !tb[NL80211_TXQ_ATTR_CWMAX] ||
 	    !tb[NL80211_TXQ_ATTR_AIFS])
 		return -EINVAL;
 
-	txq_params->ac = nla_get_u8(tb[NL80211_TXQ_ATTR_AC]);
+	ac = nla_get_u8(tb[NL80211_TXQ_ATTR_AC]);
 	txq_params->txop = nla_get_u16(tb[NL80211_TXQ_ATTR_TXOP]);
 	txq_params->cwmin = nla_get_u16(tb[NL80211_TXQ_ATTR_CWMIN]);
 	txq_params->cwmax = nla_get_u16(tb[NL80211_TXQ_ATTR_CWMAX]);
 	txq_params->aifs = nla_get_u8(tb[NL80211_TXQ_ATTR_AIFS]);
 
-	if (txq_params->ac >= NL80211_NUM_ACS)
+	if (ac >= NL80211_NUM_ACS)
 		return -EINVAL;
-
+	txq_params->ac = array_index_nospec(ac, NL80211_NUM_ACS);
 	return 0;
 }
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 181/193] x86/spectre: Report get_user mitigation for spectre_v1
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (179 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 180/193] nl80211: Sanitize array index in parse_txq_params Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 182/193] x86/spectre: Fix spelling mistake: "vunerable"-> "vulnerable" Greg Kroah-Hartman
                   ` (18 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Jiri Slaby, Dan Williams,
	Thomas Gleixner, linux-arch, kernel-hardening, torvalds, alan,
	David Woodhouse, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Dan Williams <dan.j.williams@intel.com>

(cherry picked from commit edfbae53dab8348fca778531be9f4855d2ca0360)

Reflect the presence of get_user(), __get_user(), and 'syscall' protections
in sysfs. The expectation is that new and better tooling will allow the
kernel to grow more usages of array_index_nospec(), for now, only claim
mitigation for __user pointer de-references.

Reported-by: Jiri Slaby <jslaby@suse.cz>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-arch@vger.kernel.org
Cc: kernel-hardening@lists.openwall.com
Cc: gregkh@linuxfoundation.org
Cc: torvalds@linux-foundation.org
Cc: alan@linux.intel.com
Link: https://lkml.kernel.org/r/151727420158.33451.11658324346540434635.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: cherry pick to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/kernel/cpu/bugs.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -291,7 +291,7 @@ ssize_t cpu_show_spectre_v1(struct devic
 {
 	if (!boot_cpu_has_bug(X86_BUG_SPECTRE_V1))
 		return sprintf(buf, "Not affected\n");
-	return sprintf(buf, "Vulnerable\n");
+	return sprintf(buf, "Mitigation: __user pointer sanitization\n");
 }
 
 ssize_t cpu_show_spectre_v2(struct device *dev,

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 182/193] x86/spectre: Fix spelling mistake: "vunerable"-> "vulnerable"
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (180 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 181/193] x86/spectre: Report get_user mitigation for spectre_v1 Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 183/193] x86/paravirt: Remove noreplace-paravirt cmdline option Greg Kroah-Hartman
                   ` (17 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Colin Ian King, Thomas Gleixner,
	Andi Kleen, kernel-janitors, Andy Lutomirski, Borislav Petkov,
	David Woodhouse, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Colin Ian King <colin.king@canonical.com>

(cherry picked from commit e698dcdfcda41efd0984de539767b4cddd235f1e)

Trivial fix to spelling mistake in pr_err error message text.

Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: kernel-janitors@vger.kernel.org
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Woodhouse <dwmw@amazon.co.uk>
Link: https://lkml.kernel.org/r/20180130193218.9271-1-colin.king@canonical.com
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: cherry pick to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/kernel/cpu/bugs.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -103,7 +103,7 @@ bool retpoline_module_ok(bool has_retpol
 	if (spectre_v2_enabled == SPECTRE_V2_NONE || has_retpoline)
 		return true;
 
-	pr_err("System may be vunerable to spectre v2\n");
+	pr_err("System may be vulnerable to spectre v2\n");
 	spectre_v2_bad_module = true;
 	return false;
 }

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 183/193] x86/paravirt: Remove noreplace-paravirt cmdline option
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (181 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 182/193] x86/spectre: Fix spelling mistake: "vunerable"-> "vulnerable" Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 184/193] x86/kvm: Update spectre-v1 mitigation Greg Kroah-Hartman
                   ` (16 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Josh Poimboeuf, Thomas Gleixner,
	Juergen Gross, Andrea Arcangeli, Peter Zijlstra, Andi Kleen,
	Ashok Raj, Jun Nakajima, Tim Chen, Rusty Russell, Dave Hansen,
	Asit Mallick, Andy Lutomirski, Linus Torvalds, Jason Baron,
	Paolo Bonzini, Alok Kataria, Arjan Van De Ven, David Woodhouse,
	Dan Williams, David Woodhouse, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Josh Poimboeuf <jpoimboe@redhat.com>

(cherry picked from commit 12c69f1e94c89d40696e83804dd2f0965b5250cd)

The 'noreplace-paravirt' option disables paravirt patching, leaving the
original pv indirect calls in place.

That's highly incompatible with retpolines, unless we want to uglify
paravirt even further and convert the paravirt calls to retpolines.

As far as I can tell, the option doesn't seem to be useful for much
other than introducing surprising corner cases and making the kernel
vulnerable to Spectre v2.  It was probably a debug option from the early
paravirt days.  So just remove it.

Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Juergen Gross <jgross@suse.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ashok Raj <ashok.raj@intel.com>
Cc: Greg KH <gregkh@linuxfoundation.org>
Cc: Jun Nakajima <jun.nakajima@intel.com>
Cc: Tim Chen <tim.c.chen@linux.intel.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Asit Mallick <asit.k.mallick@intel.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Jason Baron <jbaron@akamai.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Alok Kataria <akataria@vmware.com>
Cc: Arjan Van De Ven <arjan.van.de.ven@intel.com>
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: Dan Williams <dan.j.williams@intel.com>
Link: https://lkml.kernel.org/r/20180131041333.2x6blhxirc2kclrq@treble
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: chery pick to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 Documentation/kernel-parameters.txt |    2 --
 arch/x86/kernel/alternative.c       |   14 --------------
 2 files changed, 16 deletions(-)

--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -2565,8 +2565,6 @@ bytes respectively. Such letter suffixes
 	norandmaps	Don't use address space randomization.  Equivalent to
 			echo 0 > /proc/sys/kernel/randomize_va_space
 
-	noreplace-paravirt	[X86,IA-64,PV_OPS] Don't patch paravirt_ops
-
 	noreplace-smp	[X86-32,SMP] Don't replace SMP instructions
 			with UP alternatives
 
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
@@ -45,17 +45,6 @@ static int __init setup_noreplace_smp(ch
 }
 __setup("noreplace-smp", setup_noreplace_smp);
 
-#ifdef CONFIG_PARAVIRT
-static int __initdata_or_module noreplace_paravirt = 0;
-
-static int __init setup_noreplace_paravirt(char *str)
-{
-	noreplace_paravirt = 1;
-	return 1;
-}
-__setup("noreplace-paravirt", setup_noreplace_paravirt);
-#endif
-
 #define DPRINTK(fmt, args...)						\
 do {									\
 	if (debug_alternative)						\
@@ -587,9 +576,6 @@ void __init_or_module apply_paravirt(str
 	struct paravirt_patch_site *p;
 	char insnbuf[MAX_PATCH_LEN];
 
-	if (noreplace_paravirt)
-		return;
-
 	for (p = start; p < end; p++) {
 		unsigned int used;
 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 184/193] x86/kvm: Update spectre-v1 mitigation
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (182 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 183/193] x86/paravirt: Remove noreplace-paravirt cmdline option Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 185/193] x86/retpoline: Avoid retpolines for built-in __init functions Greg Kroah-Hartman
                   ` (15 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Dan Williams, Thomas Gleixner,
	Paolo Bonzini, Andrew Honig, kvm, Jim Mattson, David Woodhouse,
	Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Dan Williams <dan.j.williams@intel.com>

(cherry picked from commit 085331dfc6bbe3501fb936e657331ca943827600)

Commit 75f139aaf896 "KVM: x86: Add memory barrier on vmcs field lookup"
added a raw 'asm("lfence");' to prevent a bounds check bypass of
'vmcs_field_to_offset_table'.

The lfence can be avoided in this path by using the array_index_nospec()
helper designed for these types of fixes.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Cc: Andrew Honig <ahonig@google.com>
Cc: kvm@vger.kernel.org
Cc: Jim Mattson <jmattson@google.com>
Link: https://lkml.kernel.org/r/151744959670.6342.3001723920950249067.stgit@dwillia2-desk3.amr.corp.intel.com
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: cherry pick to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/kvm/vmx.c |   20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -32,6 +32,7 @@
 #include <linux/slab.h>
 #include <linux/tboot.h>
 #include <linux/hrtimer.h>
+#include <linux/nospec.h>
 #include "kvm_cache_regs.h"
 #include "x86.h"
 
@@ -827,21 +828,18 @@ static const unsigned short vmcs_field_t
 
 static inline short vmcs_field_to_offset(unsigned long field)
 {
-	BUILD_BUG_ON(ARRAY_SIZE(vmcs_field_to_offset_table) > SHRT_MAX);
+	const size_t size = ARRAY_SIZE(vmcs_field_to_offset_table);
+	unsigned short offset;
 
-	if (field >= ARRAY_SIZE(vmcs_field_to_offset_table))
+	BUILD_BUG_ON(size > SHRT_MAX);
+	if (field >= size)
 		return -ENOENT;
 
-	/*
-	 * FIXME: Mitigation for CVE-2017-5753.  To be replaced with a
-	 * generic mechanism.
-	 */
-	asm("lfence");
-
-	if (vmcs_field_to_offset_table[field] == 0)
+	field = array_index_nospec(field, size);
+	offset = vmcs_field_to_offset_table[field];
+	if (offset == 0)
 		return -ENOENT;
-
-	return vmcs_field_to_offset_table[field];
+	return offset;
 }
 
 static inline struct vmcs12 *get_vmcs12(struct kvm_vcpu *vcpu)

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 185/193] x86/retpoline: Avoid retpolines for built-in __init functions
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (183 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 184/193] x86/kvm: Update spectre-v1 mitigation Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:26 ` [PATCH 4.4 186/193] x86/spectre: Simplify spectre_v2 command line parsing Greg Kroah-Hartman
                   ` (14 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, David Woodhouse, Thomas Gleixner,
	karahmed, peterz, bp, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: David Woodhouse <dwmw@amazon.co.uk>

(cherry picked from commit 66f793099a636862a71c59d4a6ba91387b155e0c)

There's no point in building init code with retpolines, since it runs before
any potentially hostile userspace does. And before the retpoline is actually
ALTERNATIVEd into place, for much of it.

Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: karahmed@amazon.de
Cc: peterz@infradead.org
Cc: bp@alien8.de
Link: https://lkml.kernel.org/r/1517484441-1420-2-git-send-email-dwmw@amazon.co.uk
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: port to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 include/linux/init.h |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -4,6 +4,13 @@
 #include <linux/compiler.h>
 #include <linux/types.h>
 
+/* Built-in __init functions needn't be compiled with retpoline */
+#if defined(RETPOLINE) && !defined(MODULE)
+#define __noretpoline __attribute__((indirect_branch("keep")))
+#else
+#define __noretpoline
+#endif
+
 /* These macros are used to mark some functions or 
  * initialized data (doesn't apply to uninitialized data)
  * as `initialization' functions. The kernel can take this
@@ -39,7 +46,7 @@
 
 /* These are for everybody (although not all archs will actually
    discard it in modules) */
-#define __init		__section(.init.text) __cold notrace
+#define __init		__section(.init.text) __cold notrace __noretpoline
 #define __initdata	__section(.init.data)
 #define __initconst	__constsection(.init.rodata)
 #define __exitdata	__section(.exit.data)

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 186/193] x86/spectre: Simplify spectre_v2 command line parsing
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (184 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 185/193] x86/retpoline: Avoid retpolines for built-in __init functions Greg Kroah-Hartman
@ 2018-02-23 18:26 ` Greg Kroah-Hartman
  2018-02-23 18:27 ` [PATCH 4.4 187/193] x86/speculation: Fix typo IBRS_ATT, which should be IBRS_ALL Greg Kroah-Hartman
                   ` (13 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:26 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, KarimAllah Ahmed, David Woodhouse,
	Thomas Gleixner, peterz, bp, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: KarimAllah Ahmed <karahmed@amazon.de>

(cherry picked from commit 9005c6834c0ffdfe46afa76656bd9276cca864f6)

[dwmw2: Use ARRAY_SIZE]

Signed-off-by: KarimAllah Ahmed <karahmed@amazon.de>
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: peterz@infradead.org
Cc: bp@alien8.de
Link: https://lkml.kernel.org/r/1517484441-1420-3-git-send-email-dwmw@amazon.co.uk
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: cherry pick to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/kernel/cpu/bugs.c |   84 +++++++++++++++++++++++++++++----------------
 1 file changed, 55 insertions(+), 29 deletions(-)

--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -119,13 +119,13 @@ static inline const char *spectre_v2_mod
 static void __init spec2_print_if_insecure(const char *reason)
 {
 	if (boot_cpu_has_bug(X86_BUG_SPECTRE_V2))
-		pr_info("%s\n", reason);
+		pr_info("%s selected on command line.\n", reason);
 }
 
 static void __init spec2_print_if_secure(const char *reason)
 {
 	if (!boot_cpu_has_bug(X86_BUG_SPECTRE_V2))
-		pr_info("%s\n", reason);
+		pr_info("%s selected on command line.\n", reason);
 }
 
 static inline bool retp_compiler(void)
@@ -140,42 +140,68 @@ static inline bool match_option(const ch
 	return len == arglen && !strncmp(arg, opt, len);
 }
 
+static const struct {
+	const char *option;
+	enum spectre_v2_mitigation_cmd cmd;
+	bool secure;
+} mitigation_options[] = {
+	{ "off",               SPECTRE_V2_CMD_NONE,              false },
+	{ "on",                SPECTRE_V2_CMD_FORCE,             true },
+	{ "retpoline",         SPECTRE_V2_CMD_RETPOLINE,         false },
+	{ "retpoline,amd",     SPECTRE_V2_CMD_RETPOLINE_AMD,     false },
+	{ "retpoline,generic", SPECTRE_V2_CMD_RETPOLINE_GENERIC, false },
+	{ "auto",              SPECTRE_V2_CMD_AUTO,              false },
+};
+
 static enum spectre_v2_mitigation_cmd __init spectre_v2_parse_cmdline(void)
 {
 	char arg[20];
-	int ret;
+	int ret, i;
+	enum spectre_v2_mitigation_cmd cmd = SPECTRE_V2_CMD_AUTO;
+
+	if (cmdline_find_option_bool(boot_command_line, "nospectre_v2"))
+		return SPECTRE_V2_CMD_NONE;
+	else {
+		ret = cmdline_find_option(boot_command_line, "spectre_v2", arg,
+					  sizeof(arg));
+		if (ret < 0)
+			return SPECTRE_V2_CMD_AUTO;
 
-	ret = cmdline_find_option(boot_command_line, "spectre_v2", arg,
-				  sizeof(arg));
-	if (ret > 0)  {
-		if (match_option(arg, ret, "off")) {
-			goto disable;
-		} else if (match_option(arg, ret, "on")) {
-			spec2_print_if_secure("force enabled on command line.");
-			return SPECTRE_V2_CMD_FORCE;
-		} else if (match_option(arg, ret, "retpoline")) {
-			spec2_print_if_insecure("retpoline selected on command line.");
-			return SPECTRE_V2_CMD_RETPOLINE;
-		} else if (match_option(arg, ret, "retpoline,amd")) {
-			if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD) {
-				pr_err("retpoline,amd selected but CPU is not AMD. Switching to AUTO select\n");
-				return SPECTRE_V2_CMD_AUTO;
-			}
-			spec2_print_if_insecure("AMD retpoline selected on command line.");
-			return SPECTRE_V2_CMD_RETPOLINE_AMD;
-		} else if (match_option(arg, ret, "retpoline,generic")) {
-			spec2_print_if_insecure("generic retpoline selected on command line.");
-			return SPECTRE_V2_CMD_RETPOLINE_GENERIC;
-		} else if (match_option(arg, ret, "auto")) {
+		for (i = 0; i < ARRAY_SIZE(mitigation_options); i++) {
+			if (!match_option(arg, ret, mitigation_options[i].option))
+				continue;
+			cmd = mitigation_options[i].cmd;
+			break;
+		}
+
+		if (i >= ARRAY_SIZE(mitigation_options)) {
+			pr_err("unknown option (%s). Switching to AUTO select\n",
+			       mitigation_options[i].option);
 			return SPECTRE_V2_CMD_AUTO;
 		}
 	}
 
-	if (!cmdline_find_option_bool(boot_command_line, "nospectre_v2"))
+	if ((cmd == SPECTRE_V2_CMD_RETPOLINE ||
+	     cmd == SPECTRE_V2_CMD_RETPOLINE_AMD ||
+	     cmd == SPECTRE_V2_CMD_RETPOLINE_GENERIC) &&
+	    !IS_ENABLED(CONFIG_RETPOLINE)) {
+		pr_err("%s selected but not compiled in. Switching to AUTO select\n",
+		       mitigation_options[i].option);
 		return SPECTRE_V2_CMD_AUTO;
-disable:
-	spec2_print_if_insecure("disabled on command line.");
-	return SPECTRE_V2_CMD_NONE;
+	}
+
+	if (cmd == SPECTRE_V2_CMD_RETPOLINE_AMD &&
+	    boot_cpu_data.x86_vendor != X86_VENDOR_AMD) {
+		pr_err("retpoline,amd selected but CPU is not AMD. Switching to AUTO select\n");
+		return SPECTRE_V2_CMD_AUTO;
+	}
+
+	if (mitigation_options[i].secure)
+		spec2_print_if_secure(mitigation_options[i].option);
+	else
+		spec2_print_if_insecure(mitigation_options[i].option);
+
+	return cmd;
 }
 
 /* Check for Skylake-like CPUs (for RSB handling) */

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 187/193] x86/speculation: Fix typo IBRS_ATT, which should be IBRS_ALL
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (185 preceding siblings ...)
  2018-02-23 18:26 ` [PATCH 4.4 186/193] x86/spectre: Simplify spectre_v2 command line parsing Greg Kroah-Hartman
@ 2018-02-23 18:27 ` Greg Kroah-Hartman
  2018-02-23 18:27 ` [PATCH 4.4 188/193] KVM: nVMX: kmap() cant fail Greg Kroah-Hartman
                   ` (12 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Darren Kenny, Thomas Gleixner,
	Konrad Rzeszutek Wilk, Tom Lendacky, Andi Kleen, Borislav Petkov,
	Masami Hiramatsu, Arjan van de Ven, David Woodhouse, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Darren Kenny <darren.kenny@oracle.com>

(cherry picked from commit af189c95a371b59f493dbe0f50c0a09724868881)

Fixes: 117cc7a908c83 ("x86/retpoline: Fill return stack buffer on vmexit")
Signed-off-by: Darren Kenny <darren.kenny@oracle.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Arjan van de Ven <arjan@linux.intel.com>
Cc: David Woodhouse <dwmw@amazon.co.uk>
Link: https://lkml.kernel.org/r/20180202191220.blvgkgutojecxr3b@starbug-vm.ie.oracle.com
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: cherry pick to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/include/asm/nospec-branch.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/x86/include/asm/nospec-branch.h
+++ b/arch/x86/include/asm/nospec-branch.h
@@ -178,7 +178,7 @@ extern char __indirect_thunk_end[];
  * On VMEXIT we must ensure that no RSB predictions learned in the guest
  * can be followed in the host, by overwriting the RSB completely. Both
  * retpoline and IBRS mitigations for Spectre v2 need this; only on future
- * CPUs with IBRS_ATT *might* it be avoided.
+ * CPUs with IBRS_ALL *might* it be avoided.
  */
 static inline void vmexit_fill_RSB(void)
 {

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 188/193] KVM: nVMX: kmap() cant fail
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (186 preceding siblings ...)
  2018-02-23 18:27 ` [PATCH 4.4 187/193] x86/speculation: Fix typo IBRS_ATT, which should be IBRS_ALL Greg Kroah-Hartman
@ 2018-02-23 18:27 ` Greg Kroah-Hartman
  2018-02-23 18:27 ` [PATCH 4.4 189/193] KVM: nVMX: vmx_complete_nested_posted_interrupt() " Greg Kroah-Hartman
                   ` (11 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, David Hildenbrand, Paolo Bonzini, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: David Hildenbrand <david@redhat.com>

commit 42cf014d38d8822cce63703a467e00f65d000952 upstream.

kmap() can't fail, therefore it will always return a valid pointer. Let's
just get rid of the unnecessary checks.

Signed-off-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
[jwang: port to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/kvm/vmx.c |    9 ---------
 1 file changed, 9 deletions(-)

--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -4532,10 +4532,6 @@ static int vmx_complete_nested_posted_in
 			return 0;
 
 		vapic_page = kmap(vmx->nested.virtual_apic_page);
-		if (!vapic_page) {
-			WARN_ON(1);
-			return -ENOMEM;
-		}
 		__kvm_apic_update_irr(vmx->nested.pi_desc->pir, vapic_page);
 		kunmap(vmx->nested.virtual_apic_page);
 
@@ -9238,11 +9234,6 @@ static inline bool nested_vmx_merge_msr_
 		return false;
 	}
 	msr_bitmap = (unsigned long *)kmap(page);
-	if (!msr_bitmap) {
-		nested_release_page_clean(page);
-		WARN_ON(1);
-		return false;
-	}
 
 	if (nested_cpu_has_virt_x2apic_mode(vmcs12)) {
 		if (nested_cpu_has_apic_reg_virt(vmcs12))

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 189/193] KVM: nVMX: vmx_complete_nested_posted_interrupt() cant fail
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (187 preceding siblings ...)
  2018-02-23 18:27 ` [PATCH 4.4 188/193] KVM: nVMX: kmap() cant fail Greg Kroah-Hartman
@ 2018-02-23 18:27 ` Greg Kroah-Hartman
  2018-02-23 18:27 ` [PATCH 4.4 190/193] kvm: nVMX: Fix kernel panics induced by illegal INVEPT/INVVPID types Greg Kroah-Hartman
                   ` (10 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, David Hildenbrand, Paolo Bonzini,
	David Woodhouse, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: David Hildenbrand <david@redhat.com>

(cherry picked from commit 6342c50ad12e8ce0736e722184a7dbdea4a3477f)

vmx_complete_nested_posted_interrupt() can't fail, let's turn it into
a void function.

Signed-off-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
[jwang: port to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/kvm/vmx.c |   10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -4512,7 +4512,7 @@ static int vmx_cpu_uses_apicv(struct kvm
 	return enable_apicv && lapic_in_kernel(vcpu);
 }
 
-static int vmx_complete_nested_posted_interrupt(struct kvm_vcpu *vcpu)
+static void vmx_complete_nested_posted_interrupt(struct kvm_vcpu *vcpu)
 {
 	struct vcpu_vmx *vmx = to_vmx(vcpu);
 	int max_irr;
@@ -4523,13 +4523,13 @@ static int vmx_complete_nested_posted_in
 	    vmx->nested.pi_pending) {
 		vmx->nested.pi_pending = false;
 		if (!pi_test_and_clear_on(vmx->nested.pi_desc))
-			return 0;
+			return;
 
 		max_irr = find_last_bit(
 			(unsigned long *)vmx->nested.pi_desc->pir, 256);
 
 		if (max_irr == 256)
-			return 0;
+			return;
 
 		vapic_page = kmap(vmx->nested.virtual_apic_page);
 		__kvm_apic_update_irr(vmx->nested.pi_desc->pir, vapic_page);
@@ -4542,7 +4542,6 @@ static int vmx_complete_nested_posted_in
 			vmcs_write16(GUEST_INTR_STATUS, status);
 		}
 	}
-	return 0;
 }
 
 static inline bool kvm_vcpu_trigger_posted_interrupt(struct kvm_vcpu *vcpu)
@@ -10155,7 +10154,8 @@ static int vmx_check_nested_events(struc
 		return 0;
 	}
 
-	return vmx_complete_nested_posted_interrupt(vcpu);
+	vmx_complete_nested_posted_interrupt(vcpu);
+	return 0;
 }
 
 static u32 vmx_get_preemption_timer_value(struct kvm_vcpu *vcpu)

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 190/193] kvm: nVMX: Fix kernel panics induced by illegal INVEPT/INVVPID types
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (188 preceding siblings ...)
  2018-02-23 18:27 ` [PATCH 4.4 189/193] KVM: nVMX: vmx_complete_nested_posted_interrupt() " Greg Kroah-Hartman
@ 2018-02-23 18:27 ` Greg Kroah-Hartman
  2018-02-23 18:27 ` [PATCH 4.4 191/193] KVM: VMX: clean up declaration of VPID/EPT invalidation types Greg Kroah-Hartman
                   ` (9 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Jim Mattson, Paolo Bonzini, Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Jim Mattson <jmattson@google.com>

commit 85c856b39b479dde410ddd09df1da745343010c9 upstream

Bitwise shifts by amounts greater than or equal to the width of the left
operand are undefined. A malicious guest can exploit this to crash a
32-bit host, due to the BUG_ON(1)'s in handle_{invept,invvpid}.

Signed-off-by: Jim Mattson <jmattson@google.com>
Message-Id: <1477496318-17681-1-git-send-email-jmattson@google.com>
[Change 1UL to 1, to match the range check on the shift count. - Paolo]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
[jwang: port from linux-4.9 to 4.4 ]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/kvm/vmx.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -7361,7 +7361,7 @@ static int handle_invept(struct kvm_vcpu
 
 	types = (vmx->nested.nested_vmx_ept_caps >> VMX_EPT_EXTENT_SHIFT) & 6;
 
-	if (!(types & (1UL << type))) {
+	if (type >= 32 || !(types & (1 << type))) {
 		nested_vmx_failValid(vcpu,
 				VMXERR_INVALID_OPERAND_TO_INVEPT_INVVPID);
 		skip_emulated_instruction(vcpu);
@@ -7420,7 +7420,7 @@ static int handle_invvpid(struct kvm_vcp
 
 	types = (vmx->nested.nested_vmx_vpid_caps >> 8) & 0x7;
 
-	if (!(types & (1UL << type))) {
+	if (type >= 32 || !(types & (1 << type))) {
 		nested_vmx_failValid(vcpu,
 			VMXERR_INVALID_OPERAND_TO_INVEPT_INVVPID);
 		skip_emulated_instruction(vcpu);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 191/193] KVM: VMX: clean up declaration of VPID/EPT invalidation types
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (189 preceding siblings ...)
  2018-02-23 18:27 ` [PATCH 4.4 190/193] kvm: nVMX: Fix kernel panics induced by illegal INVEPT/INVVPID types Greg Kroah-Hartman
@ 2018-02-23 18:27 ` Greg Kroah-Hartman
  2018-02-23 18:27 ` [PATCH 4.4 192/193] KVM: nVMX: invvpid handling improvements Greg Kroah-Hartman
                   ` (8 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Jan Dakinevich, Ladi Prosek,
	Radim Krčmář,
	Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Jan Dakinevich <jan.dakinevich@gmail.com>

commit 63f3ac48133a19110c8a3666028dbd9b1bf3dcb3 upstream

- Remove VMX_EPT_EXTENT_INDIVIDUAL_ADDR, since there is no such type of
   EPT invalidation

 - Add missing VPID types names

Signed-off-by: Jan Dakinevich <jan.dakinevich@gmail.com>
Tested-by: Ladi Prosek <lprosek@redhat.com>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
[jwang: port to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/include/asm/vmx.h |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

--- a/arch/x86/include/asm/vmx.h
+++ b/arch/x86/include/asm/vmx.h
@@ -400,10 +400,11 @@ enum vmcs_field {
 #define IDENTITY_PAGETABLE_PRIVATE_MEMSLOT	(KVM_USER_MEM_SLOTS + 2)
 
 #define VMX_NR_VPIDS				(1 << 16)
+#define VMX_VPID_EXTENT_INDIVIDUAL_ADDR		0
 #define VMX_VPID_EXTENT_SINGLE_CONTEXT		1
 #define VMX_VPID_EXTENT_ALL_CONTEXT		2
+#define VMX_VPID_EXTENT_SINGLE_NON_GLOBAL	3
 
-#define VMX_EPT_EXTENT_INDIVIDUAL_ADDR		0
 #define VMX_EPT_EXTENT_CONTEXT			1
 #define VMX_EPT_EXTENT_GLOBAL			2
 #define VMX_EPT_EXTENT_SHIFT			24
@@ -420,8 +421,10 @@ enum vmcs_field {
 #define VMX_EPT_EXTENT_GLOBAL_BIT		(1ull << 26)
 
 #define VMX_VPID_INVVPID_BIT                    (1ull << 0) /* (32 - 32) */
+#define VMX_VPID_EXTENT_INDIVIDUAL_ADDR_BIT     (1ull << 8) /* (40 - 32) */
 #define VMX_VPID_EXTENT_SINGLE_CONTEXT_BIT      (1ull << 9) /* (41 - 32) */
 #define VMX_VPID_EXTENT_GLOBAL_CONTEXT_BIT      (1ull << 10) /* (42 - 32) */
+#define VMX_VPID_EXTENT_SINGLE_NON_GLOBAL_BIT   (1ull << 11) /* (43 - 32) */
 
 #define VMX_EPT_DEFAULT_GAW			3
 #define VMX_EPT_MAX_GAW				0x4

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 192/193] KVM: nVMX: invvpid handling improvements
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (190 preceding siblings ...)
  2018-02-23 18:27 ` [PATCH 4.4 191/193] KVM: VMX: clean up declaration of VPID/EPT invalidation types Greg Kroah-Hartman
@ 2018-02-23 18:27 ` Greg Kroah-Hartman
  2018-02-23 18:27 ` [PATCH 4.4 193/193] crypto: s5p-sss - Fix kernel Oops in AES-ECB mode Greg Kroah-Hartman
                   ` (7 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Jan Dakinevich, Ladi Prosek,
	Radim Krčmář,
	Jack Wang

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Jan Dakinevich <jan.dakinevich@gmail.com>

commit bcdde302b8268ef7dbc4ddbdaffb5b44eafe9a1e upstream

 - Expose all invalidation types to the L1

 - Reject invvpid instruction, if L1 passed zero vpid value to single
   context invalidations

Signed-off-by: Jan Dakinevich <jan.dakinevich@gmail.com>
Tested-by: Ladi Prosek <lprosek@redhat.com>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
[jwang: port to 4.4]
Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/x86/kvm/vmx.c |   36 ++++++++++++++++++++++++------------
 1 file changed, 24 insertions(+), 12 deletions(-)

--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -126,6 +126,12 @@ module_param_named(pml, enable_pml, bool
 
 #define VMX_MISC_EMULATED_PREEMPTION_TIMER_RATE 5
 
+#define VMX_VPID_EXTENT_SUPPORTED_MASK		\
+	(VMX_VPID_EXTENT_INDIVIDUAL_ADDR_BIT |	\
+	VMX_VPID_EXTENT_SINGLE_CONTEXT_BIT |	\
+	VMX_VPID_EXTENT_GLOBAL_CONTEXT_BIT |	\
+	VMX_VPID_EXTENT_SINGLE_NON_GLOBAL_BIT)
+
 /*
  * These 2 parameters are used to config the controls for Pause-Loop Exiting:
  * ple_gap:    upper bound on the amount of time between two successive
@@ -2657,8 +2663,7 @@ static void nested_vmx_setup_ctls_msrs(s
 	 */
 	if (enable_vpid)
 		vmx->nested.nested_vmx_vpid_caps = VMX_VPID_INVVPID_BIT |
-				VMX_VPID_EXTENT_SINGLE_CONTEXT_BIT |
-				VMX_VPID_EXTENT_GLOBAL_CONTEXT_BIT;
+			VMX_VPID_EXTENT_SUPPORTED_MASK;
 	else
 		vmx->nested.nested_vmx_vpid_caps = 0;
 
@@ -7418,7 +7423,8 @@ static int handle_invvpid(struct kvm_vcp
 	vmx_instruction_info = vmcs_read32(VMX_INSTRUCTION_INFO);
 	type = kvm_register_readl(vcpu, (vmx_instruction_info >> 28) & 0xf);
 
-	types = (vmx->nested.nested_vmx_vpid_caps >> 8) & 0x7;
+	types = (vmx->nested.nested_vmx_vpid_caps &
+			VMX_VPID_EXTENT_SUPPORTED_MASK) >> 8;
 
 	if (type >= 32 || !(types & (1 << type))) {
 		nested_vmx_failValid(vcpu,
@@ -7440,21 +7446,27 @@ static int handle_invvpid(struct kvm_vcp
 	}
 
 	switch (type) {
+	case VMX_VPID_EXTENT_INDIVIDUAL_ADDR:
 	case VMX_VPID_EXTENT_SINGLE_CONTEXT:
-		/*
-		 * Old versions of KVM use the single-context version so we
-		 * have to support it; just treat it the same as all-context.
-		 */
+	case VMX_VPID_EXTENT_SINGLE_NON_GLOBAL:
+		if (!vpid) {
+			nested_vmx_failValid(vcpu,
+				VMXERR_INVALID_OPERAND_TO_INVEPT_INVVPID);
+			skip_emulated_instruction(vcpu);
+			return 1;
+		}
+		break;
 	case VMX_VPID_EXTENT_ALL_CONTEXT:
-		__vmx_flush_tlb(vcpu, to_vmx(vcpu)->nested.vpid02);
-		nested_vmx_succeed(vcpu);
 		break;
 	default:
-		/* Trap individual address invalidation invvpid calls */
-		BUG_ON(1);
-		break;
+		WARN_ON_ONCE(1);
+		skip_emulated_instruction(vcpu);
+		return 1;
 	}
 
+	__vmx_flush_tlb(vcpu, vmx->nested.vpid02);
+	nested_vmx_succeed(vcpu);
+
 	skip_emulated_instruction(vcpu);
 	return 1;
 }

^ permalink raw reply	[flat|nested] 226+ messages in thread

* [PATCH 4.4 193/193] crypto: s5p-sss - Fix kernel Oops in AES-ECB mode
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (191 preceding siblings ...)
  2018-02-23 18:27 ` [PATCH 4.4 192/193] KVM: nVMX: invvpid handling improvements Greg Kroah-Hartman
@ 2018-02-23 18:27 ` Greg Kroah-Hartman
  2018-02-23 22:37 ` [PATCH 4.4 000/193] 4.4.118-stable review kernelci.org bot
                   ` (6 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-23 18:27 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Kamil Konieczny, Anand Moon,
	Krzysztof Kozlowski, Herbert Xu

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Kamil Konieczny <k.konieczny@partner.samsung.com>

commit c927b080c67e3e97193c81fc1d27f4251bf4e036 upstream.

In AES-ECB mode crypt is done with key only, so any use of IV
can cause kernel Oops. Use IV only in AES-CBC and AES-CTR.

Signed-off-by: Kamil Konieczny <k.konieczny@partner.samsung.com>
Reported-by: Anand Moon <linux.amoon@gmail.com>
Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>
Tested-by: Anand Moon <linux.amoon@gmail.com>
Cc: stable@vger.kernel.org # can be applied after commit 8f9702aad138
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/crypto/s5p-sss.c |   13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

--- a/drivers/crypto/s5p-sss.c
+++ b/drivers/crypto/s5p-sss.c
@@ -401,16 +401,21 @@ static void s5p_aes_crypt_start(struct s
 	uint32_t                    aes_control;
 	int                         err;
 	unsigned long               flags;
+	u8 *iv;
 
 	aes_control = SSS_AES_KEY_CHANGE_MODE;
 	if (mode & FLAGS_AES_DECRYPT)
 		aes_control |= SSS_AES_MODE_DECRYPT;
 
-	if ((mode & FLAGS_AES_MODE_MASK) == FLAGS_AES_CBC)
+	if ((mode & FLAGS_AES_MODE_MASK) == FLAGS_AES_CBC) {
 		aes_control |= SSS_AES_CHAIN_MODE_CBC;
-	else if ((mode & FLAGS_AES_MODE_MASK) == FLAGS_AES_CTR)
+		iv = req->info;
+	} else if ((mode & FLAGS_AES_MODE_MASK) == FLAGS_AES_CTR) {
 		aes_control |= SSS_AES_CHAIN_MODE_CTR;
-
+		iv = req->info;
+	} else {
+		iv = NULL; /* AES_ECB */
+	}
 	if (dev->ctx->keylen == AES_KEYSIZE_192)
 		aes_control |= SSS_AES_KEY_SIZE_192;
 	else if (dev->ctx->keylen == AES_KEYSIZE_256)
@@ -440,7 +445,7 @@ static void s5p_aes_crypt_start(struct s
 		goto outdata_error;
 
 	SSS_AES_WRITE(dev, AES_CONTROL, aes_control);
-	s5p_set_aes(dev, dev->ctx->aes_key, req->info, dev->ctx->keylen);
+	s5p_set_aes(dev, dev->ctx->aes_key, iv, dev->ctx->keylen);
 
 	s5p_set_dma_indata(dev,  req->src);
 	s5p_set_dma_outdata(dev, req->dst);

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 013/193] staging: android: ion: Add __GFP_NOWARN for system contig heap
  2018-02-23 18:24 ` [PATCH 4.4 013/193] staging: android: ion: Add __GFP_NOWARN for system contig heap Greg Kroah-Hartman
@ 2018-02-23 20:46   ` Nathan Chancellor
  2018-02-24  8:26     ` Greg Kroah-Hartman
  0 siblings, 1 reply; 226+ messages in thread
From: Nathan Chancellor @ 2018-02-23 20:46 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-kernel, stable, syzbot+76e7efc4748495855a4d, syzbot, Laura Abbott

On Fri, Feb 23, 2018 at 07:24:06PM +0100, Greg Kroah-Hartman wrote:
> 4.4-stable review patch.  If anyone has any objections, please let me know.
> 
> ------------------
> 
> From: Laura Abbott <labbott@redhat.com>
> 
> commit 0c75f10312a35b149b2cebb1832316b35c2337ca upstream.
> 
> syzbot reported a warning from Ion:
> 
>   WARNING: CPU: 1 PID: 3485 at mm/page_alloc.c:3926
> 
>   ...
>    __alloc_pages_nodemask+0x9fb/0xd80 mm/page_alloc.c:4252
>   alloc_pages_current+0xb6/0x1e0 mm/mempolicy.c:2036
>   alloc_pages include/linux/gfp.h:492 [inline]
>   ion_system_contig_heap_allocate+0x40/0x2c0
>   drivers/staging/android/ion/ion_system_heap.c:374
>   ion_buffer_create drivers/staging/android/ion/ion.c:93 [inline]
>   ion_alloc+0x2c1/0x9e0 drivers/staging/android/ion/ion.c:420
>   ion_ioctl+0x26d/0x380 drivers/staging/android/ion/ion-ioctl.c:84
>   vfs_ioctl fs/ioctl.c:46 [inline]
>   do_vfs_ioctl+0x1b1/0x1520 fs/ioctl.c:686
>   SYSC_ioctl fs/ioctl.c:701 [inline]
>   SyS_ioctl+0x8f/0xc0 fs/ioctl.c:692
> 
> This is a warning about attempting to allocate order > MAX_ORDER. This
> is coming from a userspace Ion allocation request. Since userspace is
> free to request however much memory it wants (and the kernel is free to
> deny its allocation), silence the allocation attempt with __GFP_NOWARN
> in case it fails.
> 
> Reported-by: syzbot+76e7efc4748495855a4d@syzkaller.appspotmail.com
> Reported-by: syzbot <syzkaller@googlegroups.com>
> Signed-off-by: Laura Abbott <labbott@redhat.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> 
> ---
>  drivers/staging/android/ion/ion_system_heap.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> --- a/drivers/staging/android/ion/ion_system_heap.c
> +++ b/drivers/staging/android/ion/ion_system_heap.c
> @@ -336,7 +336,7 @@ static int ion_system_contig_heap_alloca
>  	if (align > (PAGE_SIZE << order))
>  		return -EINVAL;
>  
> -	page = alloc_pages(low_order_gfp_flags, order);
> +	page = alloc_pages(low_order_gfp_flags | __GFP_NOWARN, order);
>  	if (!page)
>  		return -ENOMEM;
>  
> 
>

This commit is not necessary as __GFP_NOWARN is still in the global
low_order_gfp_flags since commit d2805d7fff5b ("staging: ion: remove
__GFP_NOWARN when use low order gfp flags") did not show up until 4.9.
This also applies to 3.18.

Thanks!
Nathan

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 000/193] 4.4.118-stable review
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (192 preceding siblings ...)
  2018-02-23 18:27 ` [PATCH 4.4 193/193] crypto: s5p-sss - Fix kernel Oops in AES-ECB mode Greg Kroah-Hartman
@ 2018-02-23 22:37 ` kernelci.org bot
  2018-02-23 23:13 ` Nathan Chancellor
                   ` (5 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: kernelci.org bot @ 2018-02-23 22:37 UTC (permalink / raw)
  To: Greg Kroah-Hartman, linux-kernel
  Cc: Greg Kroah-Hartman, torvalds, akpm, linux, shuahkh, patches,
	ben.hutchings, lkft-triage, stable

stable-rc/linux-4.4.y boot: 86 boots: 2 failed, 70 passed with 14 offline (v4.4.117-194-g5468668278fb)

Full Boot Summary: https://kernelci.org/boot/all/job/stable-rc/branch/linux-4.4.y/kernel/v4.4.117-194-g5468668278fb/
Full Build Summary: https://kernelci.org/build/stable-rc/branch/linux-4.4.y/kernel/v4.4.117-194-g5468668278fb/

Tree: stable-rc
Branch: linux-4.4.y
Git Describe: v4.4.117-194-g5468668278fb
Git Commit: 5468668278fb027d3101294c021c57bb000f7962
Git URL: http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Tested: 44 unique boards, 18 SoC families, 15 builds out of 176

Boot Regressions Detected:

arm:

    exynos_defconfig:
        exynos5422-odroidxu3:
            lab-collabora: new failure (last pass: v4.4.116)

    multi_v7_defconfig:
        exynos5422-odroidxu3:
            lab-collabora: new failure (last pass: v4.4.116)

Boot Failures Detected:

arm:

    multi_v7_defconfig
        exynos5422-odroidxu3: 1 failed lab

    exynos_defconfig
        exynos5422-odroidxu3: 1 failed lab

Offline Platforms:

arm:

    exynos_defconfig:
        exynos5410-odroidxu: 1 offline lab
        exynos5422-odroidxu3: 1 offline lab

    multi_v7_defconfig:
        alpine-db: 1 offline lab
        am335x-boneblack: 1 offline lab
        at91-sama5d4_xplained: 1 offline lab
        exynos5410-odroidxu: 1 offline lab
        exynos5422-odroidxu3: 1 offline lab
        socfpga_cyclone5_de0_sockit: 1 offline lab
        tegra124-jetson-tk1: 1 offline lab

    sama5_defconfig:
        at91-sama5d4_xplained: 1 offline lab

    tegra_defconfig:
        tegra124-jetson-tk1: 1 offline lab

    bcm2835_defconfig:
        bcm2835-rpi-b: 1 offline lab

    omap2plus_defconfig:
        am335x-boneblack: 1 offline lab

arm64:

    defconfig:
        apq8016-sbc: 1 offline lab

---
For more info write to <info@kernelci.org>

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 002/193] net: replace dst_cache ip6_tunnel implementation with the generic one
  2018-02-23 18:23 ` [PATCH 4.4 002/193] net: replace dst_cache ip6_tunnel implementation with the generic one Greg Kroah-Hartman
@ 2018-02-23 23:00   ` Nathan Chancellor
  2018-02-24  8:35     ` Greg Kroah-Hartman
  2018-02-26 12:59     ` Greg Kroah-Hartman
  2018-02-27  8:05   ` Michal Kubecek
  1 sibling, 2 replies; 226+ messages in thread
From: Nathan Chancellor @ 2018-02-23 23:00 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-kernel, stable, Paolo Abeni, David S. Miller, Manoj Boopathi Raj

On Fri, Feb 23, 2018 at 07:23:55PM +0100, Greg Kroah-Hartman wrote:
> 4.4-stable review patch.  If anyone has any objections, please let me know.
> 
> ------------------
> 
> From: Paolo Abeni <pabeni@redhat.com>
> 
> commit 607f725f6f7d5ec3759fbc16224afb60e2152a5b upstream.
> 
> This also fix a potential race into the existing tunnel code, which
> could lead to the wrong dst to be permanenty cached:
> 
> CPU1:					CPU2:
>   <xmit on ip6_tunnel>
>   <cache lookup fails>
>   dst = ip6_route_output(...)
> 					<tunnel params are changed via nl>
> 					dst_cache_reset() // no effect,
> 							// the cache is empty
>   dst_cache_set() // the wrong dst
> 	// is permanenty stored
> 	// into the cache
> 
> With the new dst implementation the above race is not possible
> since the first cache lookup after dst_cache_reset will fail due
> to the timestamp check
> 
> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
> Suggested-and-acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
> Signed-off-by: David S. Miller <davem@davemloft.net>
> Signed-off-by: Manoj Boopathi Raj <manojboopathi@google.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> 
> ---
>  include/net/ip6_tunnel.h |   15 ----
>  net/ipv6/Kconfig         |    1 
>  net/ipv6/ip6_gre.c       |   12 +--
>  net/ipv6/ip6_tunnel.c    |  151 +++++++----------------------------------------
>  net/ipv6/ip6_vti.c       |    2 
>  5 files changed, 35 insertions(+), 146 deletions(-)
> 
> --- a/include/net/ip6_tunnel.h
> +++ b/include/net/ip6_tunnel.h
> @@ -5,6 +5,8 @@
>  #include <linux/netdevice.h>
>  #include <linux/if_tunnel.h>
>  #include <linux/ip6_tunnel.h>
> +#include <net/ip_tunnels.h>
> +#include <net/dst_cache.h>
>  
>  #define IP6TUNNEL_ERR_TIMEO (30*HZ)
>  
> @@ -32,12 +34,6 @@ struct __ip6_tnl_parm {
>  	__be32			o_key;
>  };
>  
> -struct ip6_tnl_dst {
> -	seqlock_t lock;
> -	struct dst_entry __rcu *dst;
> -	u32 cookie;
> -};
> -
>  /* IPv6 tunnel */
>  struct ip6_tnl {
>  	struct ip6_tnl __rcu *next;	/* next tunnel in list */
> @@ -45,7 +41,7 @@ struct ip6_tnl {
>  	struct net *net;	/* netns for packet i/o */
>  	struct __ip6_tnl_parm parms;	/* tunnel configuration parameters */
>  	struct flowi fl;	/* flowi template for xmit */
> -	struct ip6_tnl_dst __percpu *dst_cache;	/* cached dst */
> +	struct dst_cache dst_cache;	/* cached dst */
>  
>  	int err_count;
>  	unsigned long err_time;
> @@ -65,11 +61,6 @@ struct ipv6_tlv_tnl_enc_lim {
>  	__u8 encap_limit;	/* tunnel encapsulation limit   */
>  } __packed;
>  
> -struct dst_entry *ip6_tnl_dst_get(struct ip6_tnl *t);
> -int ip6_tnl_dst_init(struct ip6_tnl *t);
> -void ip6_tnl_dst_destroy(struct ip6_tnl *t);
> -void ip6_tnl_dst_reset(struct ip6_tnl *t);
> -void ip6_tnl_dst_set(struct ip6_tnl *t, struct dst_entry *dst);
>  int ip6_tnl_rcv_ctl(struct ip6_tnl *t, const struct in6_addr *laddr,
>  		const struct in6_addr *raddr);
>  int ip6_tnl_xmit_ctl(struct ip6_tnl *t, const struct in6_addr *laddr,
> --- a/net/ipv6/Kconfig
> +++ b/net/ipv6/Kconfig
> @@ -205,6 +205,7 @@ config IPV6_NDISC_NODETYPE
>  config IPV6_TUNNEL
>  	tristate "IPv6: IP-in-IPv6 tunnel (RFC2473)"
>  	select INET6_TUNNEL
> +	select DST_CACHE
>  	---help---
>  	  Support for IPv6-in-IPv6 and IPv4-in-IPv6 tunnels described in
>  	  RFC 2473.
> --- a/net/ipv6/ip6_gre.c
> +++ b/net/ipv6/ip6_gre.c
> @@ -362,7 +362,7 @@ static void ip6gre_tunnel_uninit(struct
>  	struct ip6gre_net *ign = net_generic(t->net, ip6gre_net_id);
>  
>  	ip6gre_tunnel_unlink(ign, t);
> -	ip6_tnl_dst_reset(t);
> +	dst_cache_reset(&t->dst_cache);
>  	dev_put(dev);
>  }
>  
> @@ -640,7 +640,7 @@ static netdev_tx_t ip6gre_xmit2(struct s
>  	}
>  
>  	if (!fl6->flowi6_mark)
> -		dst = ip6_tnl_dst_get(tunnel);
> +		dst = dst_cache_get(&tunnel->dst_cache);
>  
>  	if (!dst) {
>  		dst = ip6_route_output(net, NULL, fl6);
> @@ -709,7 +709,7 @@ static netdev_tx_t ip6gre_xmit2(struct s
>  	}
>  
>  	if (!fl6->flowi6_mark && ndst)
> -		ip6_tnl_dst_set(tunnel, ndst);
> +		dst_cache_set_ip6(&tunnel->dst_cache, ndst, &fl6->saddr);
>  	skb_dst_set(skb, dst);
>  
>  	proto = NEXTHDR_GRE;
> @@ -1017,7 +1017,7 @@ static int ip6gre_tnl_change(struct ip6_
>  	t->parms.o_key = p->o_key;
>  	t->parms.i_flags = p->i_flags;
>  	t->parms.o_flags = p->o_flags;
> -	ip6_tnl_dst_reset(t);
> +	dst_cache_reset(&t->dst_cache);
>  	ip6gre_tnl_link_config(t, set_mtu);
>  	return 0;
>  }
> @@ -1228,7 +1228,7 @@ static void ip6gre_dev_free(struct net_d
>  {
>  	struct ip6_tnl *t = netdev_priv(dev);
>  
> -	ip6_tnl_dst_destroy(t);
> +	dst_cache_destroy(&t->dst_cache);
>  	free_percpu(dev->tstats);
>  	free_netdev(dev);
>  }
> @@ -1266,7 +1266,7 @@ static int ip6gre_tunnel_init_common(str
>  	if (!dev->tstats)
>  		return -ENOMEM;
>  
> -	ret = ip6_tnl_dst_init(tunnel);
> +	ret = dst_cache_init(&tunnel->dst_cache, GFP_KERNEL);
>  	if (ret) {
>  		free_percpu(dev->tstats);
>  		dev->tstats = NULL;
> --- a/net/ipv6/ip6_tunnel.c
> +++ b/net/ipv6/ip6_tunnel.c
> @@ -122,97 +122,6 @@ static struct net_device_stats *ip6_get_
>  	return &dev->stats;
>  }
>  
> -/*
> - * Locking : hash tables are protected by RCU and RTNL
> - */
> -
> -static void ip6_tnl_per_cpu_dst_set(struct ip6_tnl_dst *idst,
> -				    struct dst_entry *dst)
> -{
> -	write_seqlock_bh(&idst->lock);
> -	dst_release(rcu_dereference_protected(
> -			    idst->dst,
> -			    lockdep_is_held(&idst->lock.lock)));
> -	if (dst) {
> -		dst_hold(dst);
> -		idst->cookie = rt6_get_cookie((struct rt6_info *)dst);
> -	} else {
> -		idst->cookie = 0;
> -	}
> -	rcu_assign_pointer(idst->dst, dst);
> -	write_sequnlock_bh(&idst->lock);
> -}
> -
> -struct dst_entry *ip6_tnl_dst_get(struct ip6_tnl *t)
> -{
> -	struct ip6_tnl_dst *idst;
> -	struct dst_entry *dst;
> -	unsigned int seq;
> -	u32 cookie;
> -
> -	idst = raw_cpu_ptr(t->dst_cache);
> -
> -	rcu_read_lock();
> -	do {
> -		seq = read_seqbegin(&idst->lock);
> -		dst = rcu_dereference(idst->dst);
> -		cookie = idst->cookie;
> -	} while (read_seqretry(&idst->lock, seq));
> -
> -	if (dst && !atomic_inc_not_zero(&dst->__refcnt))
> -		dst = NULL;
> -	rcu_read_unlock();
> -
> -	if (dst && dst->obsolete && !dst->ops->check(dst, cookie)) {
> -		ip6_tnl_per_cpu_dst_set(idst, NULL);
> -		dst_release(dst);
> -		dst = NULL;
> -	}
> -	return dst;
> -}
> -EXPORT_SYMBOL_GPL(ip6_tnl_dst_get);
> -
> -void ip6_tnl_dst_reset(struct ip6_tnl *t)
> -{
> -	int i;
> -
> -	for_each_possible_cpu(i)
> -		ip6_tnl_per_cpu_dst_set(per_cpu_ptr(t->dst_cache, i), NULL);
> -}
> -EXPORT_SYMBOL_GPL(ip6_tnl_dst_reset);
> -
> -void ip6_tnl_dst_set(struct ip6_tnl *t, struct dst_entry *dst)
> -{
> -	ip6_tnl_per_cpu_dst_set(raw_cpu_ptr(t->dst_cache), dst);
> -
> -}
> -EXPORT_SYMBOL_GPL(ip6_tnl_dst_set);
> -
> -void ip6_tnl_dst_destroy(struct ip6_tnl *t)
> -{
> -	if (!t->dst_cache)
> -		return;
> -
> -	ip6_tnl_dst_reset(t);
> -	free_percpu(t->dst_cache);
> -}
> -EXPORT_SYMBOL_GPL(ip6_tnl_dst_destroy);
> -
> -int ip6_tnl_dst_init(struct ip6_tnl *t)
> -{
> -	int i;
> -
> -	t->dst_cache = alloc_percpu(struct ip6_tnl_dst);
> -	if (!t->dst_cache)
> -		return -ENOMEM;
> -
> -	for_each_possible_cpu(i)
> -		seqlock_init(&per_cpu_ptr(t->dst_cache, i)->lock);
> -
> -	return 0;
> -}
> -EXPORT_SYMBOL_GPL(ip6_tnl_dst_init);
> -
>  /**
>   * ip6_tnl_lookup - fetch tunnel matching the end-point addresses
>   *   @remote: the address of the tunnel exit-point
> @@ -331,7 +240,7 @@ static void ip6_dev_free(struct net_devi
>  {
>  	struct ip6_tnl *t = netdev_priv(dev);
>  
> -	ip6_tnl_dst_destroy(t);
> +	dst_cache_destroy(&t->dst_cache);
>  	free_percpu(dev->tstats);
>  	free_netdev(dev);
>  }
> @@ -464,7 +373,7 @@ ip6_tnl_dev_uninit(struct net_device *de
>  		RCU_INIT_POINTER(ip6n->tnls_wc[0], NULL);
>  	else
>  		ip6_tnl_unlink(ip6n, t);
> -	ip6_tnl_dst_reset(t);
> +	dst_cache_reset(&t->dst_cache);
>  	dev_put(dev);
>  }
>  
> @@ -1053,7 +962,6 @@ static int ip6_tnl_xmit2(struct sk_buff
>  	struct ipv6_tel_txoption opt;
>  	struct dst_entry *dst = NULL, *ndst = NULL;
>  	struct net_device *tdev;
> -	bool use_cache = false;
>  	int mtu;
>  	unsigned int max_headroom = sizeof(struct ipv6hdr);
>  	u8 proto;
> @@ -1061,39 +969,28 @@ static int ip6_tnl_xmit2(struct sk_buff
>  
>  	/* NBMA tunnel */
>  	if (ipv6_addr_any(&t->parms.raddr)) {
> -		if (skb->protocol == htons(ETH_P_IPV6)) {
> -			struct in6_addr *addr6;
> -			struct neighbour *neigh;
> -			int addr_type;
> -
> -			if (!skb_dst(skb))
> -				goto tx_err_link_failure;
> -
> -			neigh = dst_neigh_lookup(skb_dst(skb),
> -						 &ipv6_hdr(skb)->daddr);
> -			if (!neigh)
> -				goto tx_err_link_failure;
> +		struct in6_addr *addr6;
> +		struct neighbour *neigh;
> +		int addr_type;
> +
> +		if (!skb_dst(skb))
> +			goto tx_err_link_failure;
>  
> -			addr6 = (struct in6_addr *)&neigh->primary_key;
> -			addr_type = ipv6_addr_type(addr6);
> +		neigh = dst_neigh_lookup(skb_dst(skb),
> +					 &ipv6_hdr(skb)->daddr);
> +		if (!neigh)
> +			goto tx_err_link_failure;
>  
> -			if (addr_type == IPV6_ADDR_ANY)
> -				addr6 = &ipv6_hdr(skb)->daddr;
> +		addr6 = (struct in6_addr *)&neigh->primary_key;
> +		addr_type = ipv6_addr_type(addr6);
>  
> -			memcpy(&fl6->daddr, addr6, sizeof(fl6->daddr));
> -			neigh_release(neigh);
> -		}
> -	} else if (t->parms.proto != 0 && !(t->parms.flags &
> -					    (IP6_TNL_F_USE_ORIG_TCLASS |
> -					     IP6_TNL_F_USE_ORIG_FWMARK))) {
> -		/* enable the cache only if neither the outer protocol nor the
> -		 * routing decision depends on the current inner header value
> -		 */
> -		use_cache = true;
> -	}
> +		if (addr_type == IPV6_ADDR_ANY)
> +			addr6 = &ipv6_hdr(skb)->daddr;
>  
> -	if (use_cache)
> -		dst = ip6_tnl_dst_get(t);
> +		memcpy(&fl6->daddr, addr6, sizeof(fl6->daddr));
> +		neigh_release(neigh);
> +	} else if (!fl6->flowi6_mark)
> +		dst = dst_cache_get(&t->dst_cache);
>  
>  	if (!ip6_tnl_xmit_ctl(t, &fl6->saddr, &fl6->daddr))
>  		goto tx_err_link_failure;
> @@ -1156,8 +1053,8 @@ static int ip6_tnl_xmit2(struct sk_buff
>  		skb = new_skb;
>  	}
>  
> -	if (use_cache && ndst)
> -		ip6_tnl_dst_set(t, ndst);
> +	if (!fl6->flowi6_mark && ndst)
> +		dst_cache_set_ip6(&t->dst_cache, ndst, &fl6->saddr);
>  	skb_dst_set(skb, dst);
>  
>  	skb->transport_header = skb->network_header;
> @@ -1392,7 +1289,7 @@ ip6_tnl_change(struct ip6_tnl *t, const
>  	t->parms.flowinfo = p->flowinfo;
>  	t->parms.link = p->link;
>  	t->parms.proto = p->proto;
> -	ip6_tnl_dst_reset(t);
> +	dst_cache_reset(&t->dst_cache);
>  	ip6_tnl_link_config(t);
>  	return 0;
>  }
> @@ -1663,7 +1560,7 @@ ip6_tnl_dev_init_gen(struct net_device *
>  	if (!dev->tstats)
>  		return -ENOMEM;
>  
> -	ret = ip6_tnl_dst_init(t);
> +	ret = dst_cache_init(&t->dst_cache, GFP_KERNEL);
>  	if (ret) {
>  		free_percpu(dev->tstats);
>  		dev->tstats = NULL;
> --- a/net/ipv6/ip6_vti.c
> +++ b/net/ipv6/ip6_vti.c
> @@ -645,7 +645,7 @@ vti6_tnl_change(struct ip6_tnl *t, const
>  	t->parms.i_key = p->i_key;
>  	t->parms.o_key = p->o_key;
>  	t->parms.proto = p->proto;
> -	ip6_tnl_dst_reset(t);
> +	dst_cache_reset(&t->dst_cache);
>  	vti6_link_config(t);
>  	return 0;
>  }
> 
>

It may also be wise to take these two commits from mainline, as they
are along the same lines as this one:

09acddf873b ("ip_tunnel: replace dst_cache with generic implementation")
27337e16f2d ("ip_tunnel: fix preempt warning in ip tunnel creation/updating")

There is a minor conflict with the first one due to stable commit
6f99825e7632 ("sit: fix a double free on error path").

I'll most likely carry them anyways, it fixes a build error with some
out of tree code but less out of tree code I have, the better!

Thanks!
Nathan

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 000/193] 4.4.118-stable review
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (193 preceding siblings ...)
  2018-02-23 22:37 ` [PATCH 4.4 000/193] 4.4.118-stable review kernelci.org bot
@ 2018-02-23 23:13 ` Nathan Chancellor
  2018-02-24  8:34   ` Greg Kroah-Hartman
  2018-02-23 23:42 ` Dan Rue
                   ` (4 subsequent siblings)
  199 siblings, 1 reply; 226+ messages in thread
From: Nathan Chancellor @ 2018-02-23 23:13 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-kernel, torvalds, akpm, linux, shuahkh, patches,
	ben.hutchings, lkft-triage, stable

On Fri, Feb 23, 2018 at 07:23:53PM +0100, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 4.4.118 release.
> There are 193 patches in this series, all will be posted as a response
> to this one.  If anyone has any issues with these being applied, please
> let me know.
> 
> Responses should be made by Sun Feb 25 17:02:20 UTC 2018.
> Anything received after that time might be too late.
> 
> The whole patch series can be found in one patch at:
> 	https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.4.118-rc1.gz
> or in the git tree and branch at:
> 	git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.4.y
> and the diffstat can be found below.
> 
> thanks,
> 
> greg k-h
>

Merged, compiled, and flashed onto my Pixel 2 XL and OnePlus 5.

No immediate issues in either dmesg or general usage.

Thanks!
Nathan

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 000/193] 4.4.118-stable review
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (194 preceding siblings ...)
  2018-02-23 23:13 ` Nathan Chancellor
@ 2018-02-23 23:42 ` Dan Rue
  2018-02-24  0:40 ` Shuah Khan
                   ` (3 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Dan Rue @ 2018-02-23 23:42 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-kernel, torvalds, akpm, linux, shuahkh, patches,
	ben.hutchings, lkft-triage, stable

On Fri, Feb 23, 2018 at 07:23:53PM +0100, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 4.4.118 release.
> There are 193 patches in this series, all will be posted as a response
> to this one.  If anyone has any issues with these being applied, please
> let me know.
> 
> Responses should be made by Sun Feb 25 17:02:20 UTC 2018.
> Anything received after that time might be too late.
> 
> The whole patch series can be found in one patch at:
> 	https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.4.118-rc1.gz
> or in the git tree and branch at:
> 	git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.4.y
> and the diffstat can be found below.

Results from Linaro’s test farm.
No regressions on arm64, arm and x86_64.

Summary
------------------------------------------------------------------------

kernel: 4.4.118-rc1
git repo:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-4.4.y
git commit: 5468668278fb027d3101294c021c57bb000f7962
git describe: v4.4.117-194-g5468668278fb
Test details:
https://qa-reports.linaro.org/lkft/linux-stable-rc-4.4-oe/build/v4.4.117-194-g5468668278fb


No regressions (compared to build v4.4.117-62-g0cf542b26c74)

Boards, architectures and test suites:
-------------------------------------

juno-r2 - arm64
* boot - pass: 20,
* kselftest - pass: 34, skip: 29
* libhugetlbfs - pass: 90, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 28, skip: 53
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 61, skip: 2
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 22,
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-sched-tests - pass: 10, skip: 4
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 998, skip: 152
* ltp-timers-tests - pass: 12, skip: 1

x15 - arm
* boot - pass: 20,
* kselftest - pass: 33, skip: 29
* libhugetlbfs - pass: 87, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 64, skip: 17
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 61, skip: 2
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 20, skip: 2
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-sched-tests - pass: 13, skip: 1
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 1052, skip: 98
* ltp-timers-tests - pass: 12, skip: 1

x86_64
* boot - pass: 20,
* kselftest - pass: 48, skip: 32
* libhugetlbfs - pass: 90, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 64, skip: 17
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 62, skip: 1
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 22,
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-sched-tests - pass: 9, skip: 5
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 1030, skip: 120
* ltp-timers-tests - pass: 12, skip: 1

Summary
------------------------------------------------------------------------

kernel: 4.4.118-rc1
git repo: https://git.linaro.org/lkft/arm64-stable-rc.git
git tag: 4.4.118-rc1-hikey-20180223-139
git commit: 8cfc89f9b1c6bd4f522109f2a4f4baf7991070f8
git describe: 4.4.118-rc1-hikey-20180223-139
Test details:
https://qa-reports.linaro.org/lkft/linaro-hikey-stable-rc-4.4-oe/build/4.4.118-rc1-hikey-20180223-139


No regressions (compared to build 4.4.118-rc1-hikey-20180223-138)

Boards, architectures and test suites:
-------------------------------------

hi6220-hikey - arm64
* boot - pass: 20,
* kselftest - pass: 31, skip: 32
* libhugetlbfs - pass: 90, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 28, skip: 53
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 61, skip: 2
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 21, skip: 1
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-sched-tests - pass: 10, skip: 4
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 996, skip: 154
* ltp-timers-tests - pass: 12, skip: 1


--
Linaro QA (beta)
https://qa-reports.linaro.org

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 000/193] 4.4.118-stable review
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (195 preceding siblings ...)
  2018-02-23 23:42 ` Dan Rue
@ 2018-02-24  0:40 ` Shuah Khan
  2018-02-24 11:11 ` Guenter Roeck
                   ` (2 subsequent siblings)
  199 siblings, 0 replies; 226+ messages in thread
From: Shuah Khan @ 2018-02-24  0:40 UTC (permalink / raw)
  To: Greg Kroah-Hartman, linux-kernel
  Cc: torvalds, akpm, linux, patches, ben.hutchings, lkft-triage,
	stable, Shuah Khan

On 02/23/2018 11:23 AM, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 4.4.118 release.
> There are 193 patches in this series, all will be posted as a response
> to this one.  If anyone has any issues with these being applied, please
> let me know.
> 
> Responses should be made by Sun Feb 25 17:02:20 UTC 2018.
> Anything received after that time might be too late.
> 
> The whole patch series can be found in one patch at:
> 	https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.4.118-rc1.gz
> or in the git tree and branch at:
> 	git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.4.y
> and the diffstat can be found below.
> 
> thanks,
> 
> greg k-h
> 

Compiled and booted on my test system. No dmesg regressions.

thanks,
-- Shuah

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 013/193] staging: android: ion: Add __GFP_NOWARN for system contig heap
  2018-02-23 20:46   ` Nathan Chancellor
@ 2018-02-24  8:26     ` Greg Kroah-Hartman
  0 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-24  8:26 UTC (permalink / raw)
  To: Nathan Chancellor
  Cc: linux-kernel, stable, syzbot+76e7efc4748495855a4d, syzbot, Laura Abbott

On Fri, Feb 23, 2018 at 01:46:08PM -0700, Nathan Chancellor wrote:
> On Fri, Feb 23, 2018 at 07:24:06PM +0100, Greg Kroah-Hartman wrote:
> > 4.4-stable review patch.  If anyone has any objections, please let me know.
> > 
> > ------------------
> > 
> > From: Laura Abbott <labbott@redhat.com>
> > 
> > commit 0c75f10312a35b149b2cebb1832316b35c2337ca upstream.
> > 
> > syzbot reported a warning from Ion:
> > 
> >   WARNING: CPU: 1 PID: 3485 at mm/page_alloc.c:3926
> > 
> >   ...
> >    __alloc_pages_nodemask+0x9fb/0xd80 mm/page_alloc.c:4252
> >   alloc_pages_current+0xb6/0x1e0 mm/mempolicy.c:2036
> >   alloc_pages include/linux/gfp.h:492 [inline]
> >   ion_system_contig_heap_allocate+0x40/0x2c0
> >   drivers/staging/android/ion/ion_system_heap.c:374
> >   ion_buffer_create drivers/staging/android/ion/ion.c:93 [inline]
> >   ion_alloc+0x2c1/0x9e0 drivers/staging/android/ion/ion.c:420
> >   ion_ioctl+0x26d/0x380 drivers/staging/android/ion/ion-ioctl.c:84
> >   vfs_ioctl fs/ioctl.c:46 [inline]
> >   do_vfs_ioctl+0x1b1/0x1520 fs/ioctl.c:686
> >   SYSC_ioctl fs/ioctl.c:701 [inline]
> >   SyS_ioctl+0x8f/0xc0 fs/ioctl.c:692
> > 
> > This is a warning about attempting to allocate order > MAX_ORDER. This
> > is coming from a userspace Ion allocation request. Since userspace is
> > free to request however much memory it wants (and the kernel is free to
> > deny its allocation), silence the allocation attempt with __GFP_NOWARN
> > in case it fails.
> > 
> > Reported-by: syzbot+76e7efc4748495855a4d@syzkaller.appspotmail.com
> > Reported-by: syzbot <syzkaller@googlegroups.com>
> > Signed-off-by: Laura Abbott <labbott@redhat.com>
> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > 
> > ---
> >  drivers/staging/android/ion/ion_system_heap.c |    2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > --- a/drivers/staging/android/ion/ion_system_heap.c
> > +++ b/drivers/staging/android/ion/ion_system_heap.c
> > @@ -336,7 +336,7 @@ static int ion_system_contig_heap_alloca
> >  	if (align > (PAGE_SIZE << order))
> >  		return -EINVAL;
> >  
> > -	page = alloc_pages(low_order_gfp_flags, order);
> > +	page = alloc_pages(low_order_gfp_flags | __GFP_NOWARN, order);
> >  	if (!page)
> >  		return -ENOMEM;
> >  
> > 
> >
> 
> This commit is not necessary as __GFP_NOWARN is still in the global
> low_order_gfp_flags since commit d2805d7fff5b ("staging: ion: remove
> __GFP_NOWARN when use low order gfp flags") did not show up until 4.9.
> This also applies to 3.18.

Ah, good catch, now fixed by dropping this patch from 4.4.y and 3.18.y,
thanks.

greg k-h

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 000/193] 4.4.118-stable review
  2018-02-23 23:13 ` Nathan Chancellor
@ 2018-02-24  8:34   ` Greg Kroah-Hartman
  0 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-24  8:34 UTC (permalink / raw)
  To: Nathan Chancellor
  Cc: linux-kernel, torvalds, akpm, linux, shuahkh, patches,
	ben.hutchings, lkft-triage, stable

On Fri, Feb 23, 2018 at 04:13:26PM -0700, Nathan Chancellor wrote:
> On Fri, Feb 23, 2018 at 07:23:53PM +0100, Greg Kroah-Hartman wrote:
> > This is the start of the stable review cycle for the 4.4.118 release.
> > There are 193 patches in this series, all will be posted as a response
> > to this one.  If anyone has any issues with these being applied, please
> > let me know.
> > 
> > Responses should be made by Sun Feb 25 17:02:20 UTC 2018.
> > Anything received after that time might be too late.
> > 
> > The whole patch series can be found in one patch at:
> > 	https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.4.118-rc1.gz
> > or in the git tree and branch at:
> > 	git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.4.y
> > and the diffstat can be found below.
> > 
> > thanks,
> > 
> > greg k-h
> >
> 
> Merged, compiled, and flashed onto my Pixel 2 XL and OnePlus 5.
> 
> No immediate issues in either dmesg or general usage.

Wonderful, thanks for testing and letting me know.

greg k-h

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 002/193] net: replace dst_cache ip6_tunnel implementation with the generic one
  2018-02-23 23:00   ` Nathan Chancellor
@ 2018-02-24  8:35     ` Greg Kroah-Hartman
  2018-02-24 15:37       ` Nathan Chancellor
  2018-02-26 12:59     ` Greg Kroah-Hartman
  1 sibling, 1 reply; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-24  8:35 UTC (permalink / raw)
  To: Nathan Chancellor
  Cc: linux-kernel, stable, Paolo Abeni, David S. Miller, Manoj Boopathi Raj

On Fri, Feb 23, 2018 at 04:00:08PM -0700, Nathan Chancellor wrote:
> On Fri, Feb 23, 2018 at 07:23:55PM +0100, Greg Kroah-Hartman wrote:
> > 4.4-stable review patch.  If anyone has any objections, please let me know.
> > 
> > ------------------
> > 
> > From: Paolo Abeni <pabeni@redhat.com>
> > 
> > commit 607f725f6f7d5ec3759fbc16224afb60e2152a5b upstream.
> > 
> > This also fix a potential race into the existing tunnel code, which
> > could lead to the wrong dst to be permanenty cached:
> > 
> > CPU1:					CPU2:
> >   <xmit on ip6_tunnel>
> >   <cache lookup fails>
> >   dst = ip6_route_output(...)
> > 					<tunnel params are changed via nl>
> > 					dst_cache_reset() // no effect,
> > 							// the cache is empty
> >   dst_cache_set() // the wrong dst
> > 	// is permanenty stored
> > 	// into the cache
> > 
> > With the new dst implementation the above race is not possible
> > since the first cache lookup after dst_cache_reset will fail due
> > to the timestamp check
> > 
> > Signed-off-by: Paolo Abeni <pabeni@redhat.com>
> > Suggested-and-acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
> > Signed-off-by: David S. Miller <davem@davemloft.net>
> > Signed-off-by: Manoj Boopathi Raj <manojboopathi@google.com>
> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > 
> > ---
> >  include/net/ip6_tunnel.h |   15 ----
> >  net/ipv6/Kconfig         |    1 
> >  net/ipv6/ip6_gre.c       |   12 +--
> >  net/ipv6/ip6_tunnel.c    |  151 +++++++----------------------------------------
> >  net/ipv6/ip6_vti.c       |    2 
> >  5 files changed, 35 insertions(+), 146 deletions(-)
> > 
> > --- a/include/net/ip6_tunnel.h
> > +++ b/include/net/ip6_tunnel.h
> > @@ -5,6 +5,8 @@
> >  #include <linux/netdevice.h>
> >  #include <linux/if_tunnel.h>
> >  #include <linux/ip6_tunnel.h>
> > +#include <net/ip_tunnels.h>
> > +#include <net/dst_cache.h>
> >  
> >  #define IP6TUNNEL_ERR_TIMEO (30*HZ)
> >  
> > @@ -32,12 +34,6 @@ struct __ip6_tnl_parm {
> >  	__be32			o_key;
> >  };
> >  
> > -struct ip6_tnl_dst {
> > -	seqlock_t lock;
> > -	struct dst_entry __rcu *dst;
> > -	u32 cookie;
> > -};
> > -
> >  /* IPv6 tunnel */
> >  struct ip6_tnl {
> >  	struct ip6_tnl __rcu *next;	/* next tunnel in list */
> > @@ -45,7 +41,7 @@ struct ip6_tnl {
> >  	struct net *net;	/* netns for packet i/o */
> >  	struct __ip6_tnl_parm parms;	/* tunnel configuration parameters */
> >  	struct flowi fl;	/* flowi template for xmit */
> > -	struct ip6_tnl_dst __percpu *dst_cache;	/* cached dst */
> > +	struct dst_cache dst_cache;	/* cached dst */
> >  
> >  	int err_count;
> >  	unsigned long err_time;
> > @@ -65,11 +61,6 @@ struct ipv6_tlv_tnl_enc_lim {
> >  	__u8 encap_limit;	/* tunnel encapsulation limit   */
> >  } __packed;
> >  
> > -struct dst_entry *ip6_tnl_dst_get(struct ip6_tnl *t);
> > -int ip6_tnl_dst_init(struct ip6_tnl *t);
> > -void ip6_tnl_dst_destroy(struct ip6_tnl *t);
> > -void ip6_tnl_dst_reset(struct ip6_tnl *t);
> > -void ip6_tnl_dst_set(struct ip6_tnl *t, struct dst_entry *dst);
> >  int ip6_tnl_rcv_ctl(struct ip6_tnl *t, const struct in6_addr *laddr,
> >  		const struct in6_addr *raddr);
> >  int ip6_tnl_xmit_ctl(struct ip6_tnl *t, const struct in6_addr *laddr,
> > --- a/net/ipv6/Kconfig
> > +++ b/net/ipv6/Kconfig
> > @@ -205,6 +205,7 @@ config IPV6_NDISC_NODETYPE
> >  config IPV6_TUNNEL
> >  	tristate "IPv6: IP-in-IPv6 tunnel (RFC2473)"
> >  	select INET6_TUNNEL
> > +	select DST_CACHE
> >  	---help---
> >  	  Support for IPv6-in-IPv6 and IPv4-in-IPv6 tunnels described in
> >  	  RFC 2473.
> > --- a/net/ipv6/ip6_gre.c
> > +++ b/net/ipv6/ip6_gre.c
> > @@ -362,7 +362,7 @@ static void ip6gre_tunnel_uninit(struct
> >  	struct ip6gre_net *ign = net_generic(t->net, ip6gre_net_id);
> >  
> >  	ip6gre_tunnel_unlink(ign, t);
> > -	ip6_tnl_dst_reset(t);
> > +	dst_cache_reset(&t->dst_cache);
> >  	dev_put(dev);
> >  }
> >  
> > @@ -640,7 +640,7 @@ static netdev_tx_t ip6gre_xmit2(struct s
> >  	}
> >  
> >  	if (!fl6->flowi6_mark)
> > -		dst = ip6_tnl_dst_get(tunnel);
> > +		dst = dst_cache_get(&tunnel->dst_cache);
> >  
> >  	if (!dst) {
> >  		dst = ip6_route_output(net, NULL, fl6);
> > @@ -709,7 +709,7 @@ static netdev_tx_t ip6gre_xmit2(struct s
> >  	}
> >  
> >  	if (!fl6->flowi6_mark && ndst)
> > -		ip6_tnl_dst_set(tunnel, ndst);
> > +		dst_cache_set_ip6(&tunnel->dst_cache, ndst, &fl6->saddr);
> >  	skb_dst_set(skb, dst);
> >  
> >  	proto = NEXTHDR_GRE;
> > @@ -1017,7 +1017,7 @@ static int ip6gre_tnl_change(struct ip6_
> >  	t->parms.o_key = p->o_key;
> >  	t->parms.i_flags = p->i_flags;
> >  	t->parms.o_flags = p->o_flags;
> > -	ip6_tnl_dst_reset(t);
> > +	dst_cache_reset(&t->dst_cache);
> >  	ip6gre_tnl_link_config(t, set_mtu);
> >  	return 0;
> >  }
> > @@ -1228,7 +1228,7 @@ static void ip6gre_dev_free(struct net_d
> >  {
> >  	struct ip6_tnl *t = netdev_priv(dev);
> >  
> > -	ip6_tnl_dst_destroy(t);
> > +	dst_cache_destroy(&t->dst_cache);
> >  	free_percpu(dev->tstats);
> >  	free_netdev(dev);
> >  }
> > @@ -1266,7 +1266,7 @@ static int ip6gre_tunnel_init_common(str
> >  	if (!dev->tstats)
> >  		return -ENOMEM;
> >  
> > -	ret = ip6_tnl_dst_init(tunnel);
> > +	ret = dst_cache_init(&tunnel->dst_cache, GFP_KERNEL);
> >  	if (ret) {
> >  		free_percpu(dev->tstats);
> >  		dev->tstats = NULL;
> > --- a/net/ipv6/ip6_tunnel.c
> > +++ b/net/ipv6/ip6_tunnel.c
> > @@ -122,97 +122,6 @@ static struct net_device_stats *ip6_get_
> >  	return &dev->stats;
> >  }
> >  
> > -/*
> > - * Locking : hash tables are protected by RCU and RTNL
> > - */
> > -
> > -static void ip6_tnl_per_cpu_dst_set(struct ip6_tnl_dst *idst,
> > -				    struct dst_entry *dst)
> > -{
> > -	write_seqlock_bh(&idst->lock);
> > -	dst_release(rcu_dereference_protected(
> > -			    idst->dst,
> > -			    lockdep_is_held(&idst->lock.lock)));
> > -	if (dst) {
> > -		dst_hold(dst);
> > -		idst->cookie = rt6_get_cookie((struct rt6_info *)dst);
> > -	} else {
> > -		idst->cookie = 0;
> > -	}
> > -	rcu_assign_pointer(idst->dst, dst);
> > -	write_sequnlock_bh(&idst->lock);
> > -}
> > -
> > -struct dst_entry *ip6_tnl_dst_get(struct ip6_tnl *t)
> > -{
> > -	struct ip6_tnl_dst *idst;
> > -	struct dst_entry *dst;
> > -	unsigned int seq;
> > -	u32 cookie;
> > -
> > -	idst = raw_cpu_ptr(t->dst_cache);
> > -
> > -	rcu_read_lock();
> > -	do {
> > -		seq = read_seqbegin(&idst->lock);
> > -		dst = rcu_dereference(idst->dst);
> > -		cookie = idst->cookie;
> > -	} while (read_seqretry(&idst->lock, seq));
> > -
> > -	if (dst && !atomic_inc_not_zero(&dst->__refcnt))
> > -		dst = NULL;
> > -	rcu_read_unlock();
> > -
> > -	if (dst && dst->obsolete && !dst->ops->check(dst, cookie)) {
> > -		ip6_tnl_per_cpu_dst_set(idst, NULL);
> > -		dst_release(dst);
> > -		dst = NULL;
> > -	}
> > -	return dst;
> > -}
> > -EXPORT_SYMBOL_GPL(ip6_tnl_dst_get);
> > -
> > -void ip6_tnl_dst_reset(struct ip6_tnl *t)
> > -{
> > -	int i;
> > -
> > -	for_each_possible_cpu(i)
> > -		ip6_tnl_per_cpu_dst_set(per_cpu_ptr(t->dst_cache, i), NULL);
> > -}
> > -EXPORT_SYMBOL_GPL(ip6_tnl_dst_reset);
> > -
> > -void ip6_tnl_dst_set(struct ip6_tnl *t, struct dst_entry *dst)
> > -{
> > -	ip6_tnl_per_cpu_dst_set(raw_cpu_ptr(t->dst_cache), dst);
> > -
> > -}
> > -EXPORT_SYMBOL_GPL(ip6_tnl_dst_set);
> > -
> > -void ip6_tnl_dst_destroy(struct ip6_tnl *t)
> > -{
> > -	if (!t->dst_cache)
> > -		return;
> > -
> > -	ip6_tnl_dst_reset(t);
> > -	free_percpu(t->dst_cache);
> > -}
> > -EXPORT_SYMBOL_GPL(ip6_tnl_dst_destroy);
> > -
> > -int ip6_tnl_dst_init(struct ip6_tnl *t)
> > -{
> > -	int i;
> > -
> > -	t->dst_cache = alloc_percpu(struct ip6_tnl_dst);
> > -	if (!t->dst_cache)
> > -		return -ENOMEM;
> > -
> > -	for_each_possible_cpu(i)
> > -		seqlock_init(&per_cpu_ptr(t->dst_cache, i)->lock);
> > -
> > -	return 0;
> > -}
> > -EXPORT_SYMBOL_GPL(ip6_tnl_dst_init);
> > -
> >  /**
> >   * ip6_tnl_lookup - fetch tunnel matching the end-point addresses
> >   *   @remote: the address of the tunnel exit-point
> > @@ -331,7 +240,7 @@ static void ip6_dev_free(struct net_devi
> >  {
> >  	struct ip6_tnl *t = netdev_priv(dev);
> >  
> > -	ip6_tnl_dst_destroy(t);
> > +	dst_cache_destroy(&t->dst_cache);
> >  	free_percpu(dev->tstats);
> >  	free_netdev(dev);
> >  }
> > @@ -464,7 +373,7 @@ ip6_tnl_dev_uninit(struct net_device *de
> >  		RCU_INIT_POINTER(ip6n->tnls_wc[0], NULL);
> >  	else
> >  		ip6_tnl_unlink(ip6n, t);
> > -	ip6_tnl_dst_reset(t);
> > +	dst_cache_reset(&t->dst_cache);
> >  	dev_put(dev);
> >  }
> >  
> > @@ -1053,7 +962,6 @@ static int ip6_tnl_xmit2(struct sk_buff
> >  	struct ipv6_tel_txoption opt;
> >  	struct dst_entry *dst = NULL, *ndst = NULL;
> >  	struct net_device *tdev;
> > -	bool use_cache = false;
> >  	int mtu;
> >  	unsigned int max_headroom = sizeof(struct ipv6hdr);
> >  	u8 proto;
> > @@ -1061,39 +969,28 @@ static int ip6_tnl_xmit2(struct sk_buff
> >  
> >  	/* NBMA tunnel */
> >  	if (ipv6_addr_any(&t->parms.raddr)) {
> > -		if (skb->protocol == htons(ETH_P_IPV6)) {
> > -			struct in6_addr *addr6;
> > -			struct neighbour *neigh;
> > -			int addr_type;
> > -
> > -			if (!skb_dst(skb))
> > -				goto tx_err_link_failure;
> > -
> > -			neigh = dst_neigh_lookup(skb_dst(skb),
> > -						 &ipv6_hdr(skb)->daddr);
> > -			if (!neigh)
> > -				goto tx_err_link_failure;
> > +		struct in6_addr *addr6;
> > +		struct neighbour *neigh;
> > +		int addr_type;
> > +
> > +		if (!skb_dst(skb))
> > +			goto tx_err_link_failure;
> >  
> > -			addr6 = (struct in6_addr *)&neigh->primary_key;
> > -			addr_type = ipv6_addr_type(addr6);
> > +		neigh = dst_neigh_lookup(skb_dst(skb),
> > +					 &ipv6_hdr(skb)->daddr);
> > +		if (!neigh)
> > +			goto tx_err_link_failure;
> >  
> > -			if (addr_type == IPV6_ADDR_ANY)
> > -				addr6 = &ipv6_hdr(skb)->daddr;
> > +		addr6 = (struct in6_addr *)&neigh->primary_key;
> > +		addr_type = ipv6_addr_type(addr6);
> >  
> > -			memcpy(&fl6->daddr, addr6, sizeof(fl6->daddr));
> > -			neigh_release(neigh);
> > -		}
> > -	} else if (t->parms.proto != 0 && !(t->parms.flags &
> > -					    (IP6_TNL_F_USE_ORIG_TCLASS |
> > -					     IP6_TNL_F_USE_ORIG_FWMARK))) {
> > -		/* enable the cache only if neither the outer protocol nor the
> > -		 * routing decision depends on the current inner header value
> > -		 */
> > -		use_cache = true;
> > -	}
> > +		if (addr_type == IPV6_ADDR_ANY)
> > +			addr6 = &ipv6_hdr(skb)->daddr;
> >  
> > -	if (use_cache)
> > -		dst = ip6_tnl_dst_get(t);
> > +		memcpy(&fl6->daddr, addr6, sizeof(fl6->daddr));
> > +		neigh_release(neigh);
> > +	} else if (!fl6->flowi6_mark)
> > +		dst = dst_cache_get(&t->dst_cache);
> >  
> >  	if (!ip6_tnl_xmit_ctl(t, &fl6->saddr, &fl6->daddr))
> >  		goto tx_err_link_failure;
> > @@ -1156,8 +1053,8 @@ static int ip6_tnl_xmit2(struct sk_buff
> >  		skb = new_skb;
> >  	}
> >  
> > -	if (use_cache && ndst)
> > -		ip6_tnl_dst_set(t, ndst);
> > +	if (!fl6->flowi6_mark && ndst)
> > +		dst_cache_set_ip6(&t->dst_cache, ndst, &fl6->saddr);
> >  	skb_dst_set(skb, dst);
> >  
> >  	skb->transport_header = skb->network_header;
> > @@ -1392,7 +1289,7 @@ ip6_tnl_change(struct ip6_tnl *t, const
> >  	t->parms.flowinfo = p->flowinfo;
> >  	t->parms.link = p->link;
> >  	t->parms.proto = p->proto;
> > -	ip6_tnl_dst_reset(t);
> > +	dst_cache_reset(&t->dst_cache);
> >  	ip6_tnl_link_config(t);
> >  	return 0;
> >  }
> > @@ -1663,7 +1560,7 @@ ip6_tnl_dev_init_gen(struct net_device *
> >  	if (!dev->tstats)
> >  		return -ENOMEM;
> >  
> > -	ret = ip6_tnl_dst_init(t);
> > +	ret = dst_cache_init(&t->dst_cache, GFP_KERNEL);
> >  	if (ret) {
> >  		free_percpu(dev->tstats);
> >  		dev->tstats = NULL;
> > --- a/net/ipv6/ip6_vti.c
> > +++ b/net/ipv6/ip6_vti.c
> > @@ -645,7 +645,7 @@ vti6_tnl_change(struct ip6_tnl *t, const
> >  	t->parms.i_key = p->i_key;
> >  	t->parms.o_key = p->o_key;
> >  	t->parms.proto = p->proto;
> > -	ip6_tnl_dst_reset(t);
> > +	dst_cache_reset(&t->dst_cache);
> >  	vti6_link_config(t);
> >  	return 0;
> >  }
> > 
> >
> 
> It may also be wise to take these two commits from mainline, as they
> are along the same lines as this one:
> 
> 09acddf873b ("ip_tunnel: replace dst_cache with generic implementation")
> 27337e16f2d ("ip_tunnel: fix preempt warning in ip tunnel creation/updating")

Ah, good idea.

> There is a minor conflict with the first one due to stable commit
> 6f99825e7632 ("sit: fix a double free on error path").
> 
> I'll most likely carry them anyways, it fixes a build error with some
> out of tree code but less out of tree code I have, the better!

I'll do that for the next release.  What "out of tree" code relies on
this?  Something from the CAF tree that is not merged upstream?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 000/193] 4.4.118-stable review
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (196 preceding siblings ...)
  2018-02-24  0:40 ` Shuah Khan
@ 2018-02-24 11:11 ` Guenter Roeck
  2018-02-24 11:18   ` Greg Kroah-Hartman
  2018-02-24 17:55 ` Guenter Roeck
  2018-03-06  3:23 ` Ben Hutchings
  199 siblings, 1 reply; 226+ messages in thread
From: Guenter Roeck @ 2018-02-24 11:11 UTC (permalink / raw)
  To: Greg Kroah-Hartman, linux-kernel
  Cc: torvalds, akpm, shuahkh, patches, ben.hutchings, lkft-triage, stable

On 02/23/2018 10:23 AM, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 4.4.118 release.
> There are 193 patches in this series, all will be posted as a response
> to this one.  If anyone has any issues with these being applied, please
> let me know.
> 
> Responses should be made by Sun Feb 25 17:02:20 UTC 2018.
> Anything received after that time might be too late.
> 

m68k images in 3.18.96-rc and 4.4.118-rc fail to build with

m68k-linux-ld: cannot find SOFTIRQENTRY_TEXT

This is due to 'm68k: add missing SOFTIRQENTRY_TEXT linker section'.
There is no definition for SOFTIRQENTRY_TEXT in v4.4.y or v3.18.y.

Guenter

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 000/193] 4.4.118-stable review
  2018-02-24 11:11 ` Guenter Roeck
@ 2018-02-24 11:18   ` Greg Kroah-Hartman
  0 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-24 11:18 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: linux-kernel, torvalds, akpm, shuahkh, patches, ben.hutchings,
	lkft-triage, stable

On Sat, Feb 24, 2018 at 03:11:45AM -0800, Guenter Roeck wrote:
> On 02/23/2018 10:23 AM, Greg Kroah-Hartman wrote:
> > This is the start of the stable review cycle for the 4.4.118 release.
> > There are 193 patches in this series, all will be posted as a response
> > to this one.  If anyone has any issues with these being applied, please
> > let me know.
> > 
> > Responses should be made by Sun Feb 25 17:02:20 UTC 2018.
> > Anything received after that time might be too late.
> > 
> 
> m68k images in 3.18.96-rc and 4.4.118-rc fail to build with
> 
> m68k-linux-ld: cannot find SOFTIRQENTRY_TEXT
> 
> This is due to 'm68k: add missing SOFTIRQENTRY_TEXT linker section'.
> There is no definition for SOFTIRQENTRY_TEXT in v4.4.y or v3.18.y.

Ugh, I've now dropped this patch from both the 4.4.y and 3.18.y trees,
and pushed out a new git tree.

thanks for catching this,

greg k-h

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 002/193] net: replace dst_cache ip6_tunnel implementation with the generic one
  2018-02-24  8:35     ` Greg Kroah-Hartman
@ 2018-02-24 15:37       ` Nathan Chancellor
  0 siblings, 0 replies; 226+ messages in thread
From: Nathan Chancellor @ 2018-02-24 15:37 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-kernel, stable, Paolo Abeni, David S. Miller, Manoj Boopathi Raj

On Sat, Feb 24, 2018 at 09:35:39AM +0100, Greg Kroah-Hartman wrote:
> On Fri, Feb 23, 2018 at 04:00:08PM -0700, Nathan Chancellor wrote:
> > On Fri, Feb 23, 2018 at 07:23:55PM +0100, Greg Kroah-Hartman wrote:
> > > 4.4-stable review patch.  If anyone has any objections, please let me know.
> > > 
> > > ------------------
> > > 
> > > From: Paolo Abeni <pabeni@redhat.com>
> > > 
> > > commit 607f725f6f7d5ec3759fbc16224afb60e2152a5b upstream.
> > > 
> > > This also fix a potential race into the existing tunnel code, which
> > > could lead to the wrong dst to be permanenty cached:
> > > 
> > > CPU1:					CPU2:
> > >   <xmit on ip6_tunnel>
> > >   <cache lookup fails>
> > >   dst = ip6_route_output(...)
> > > 					<tunnel params are changed via nl>
> > > 					dst_cache_reset() // no effect,
> > > 							// the cache is empty
> > >   dst_cache_set() // the wrong dst
> > > 	// is permanenty stored
> > > 	// into the cache
> > > 
> > > With the new dst implementation the above race is not possible
> > > since the first cache lookup after dst_cache_reset will fail due
> > > to the timestamp check
> > > 
> > > Signed-off-by: Paolo Abeni <pabeni@redhat.com>
> > > Suggested-and-acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
> > > Signed-off-by: David S. Miller <davem@davemloft.net>
> > > Signed-off-by: Manoj Boopathi Raj <manojboopathi@google.com>
> > > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > > 
> > > ---
> > >  include/net/ip6_tunnel.h |   15 ----
> > >  net/ipv6/Kconfig         |    1 
> > >  net/ipv6/ip6_gre.c       |   12 +--
> > >  net/ipv6/ip6_tunnel.c    |  151 +++++++----------------------------------------
> > >  net/ipv6/ip6_vti.c       |    2 
> > >  5 files changed, 35 insertions(+), 146 deletions(-)
> > > 
> > > --- a/include/net/ip6_tunnel.h
> > > +++ b/include/net/ip6_tunnel.h
> > > @@ -5,6 +5,8 @@
> > >  #include <linux/netdevice.h>
> > >  #include <linux/if_tunnel.h>
> > >  #include <linux/ip6_tunnel.h>
> > > +#include <net/ip_tunnels.h>
> > > +#include <net/dst_cache.h>
> > >  
> > >  #define IP6TUNNEL_ERR_TIMEO (30*HZ)
> > >  
> > > @@ -32,12 +34,6 @@ struct __ip6_tnl_parm {
> > >  	__be32			o_key;
> > >  };
> > >  
> > > -struct ip6_tnl_dst {
> > > -	seqlock_t lock;
> > > -	struct dst_entry __rcu *dst;
> > > -	u32 cookie;
> > > -};
> > > -
> > >  /* IPv6 tunnel */
> > >  struct ip6_tnl {
> > >  	struct ip6_tnl __rcu *next;	/* next tunnel in list */
> > > @@ -45,7 +41,7 @@ struct ip6_tnl {
> > >  	struct net *net;	/* netns for packet i/o */
> > >  	struct __ip6_tnl_parm parms;	/* tunnel configuration parameters */
> > >  	struct flowi fl;	/* flowi template for xmit */
> > > -	struct ip6_tnl_dst __percpu *dst_cache;	/* cached dst */
> > > +	struct dst_cache dst_cache;	/* cached dst */
> > >  
> > >  	int err_count;
> > >  	unsigned long err_time;
> > > @@ -65,11 +61,6 @@ struct ipv6_tlv_tnl_enc_lim {
> > >  	__u8 encap_limit;	/* tunnel encapsulation limit   */
> > >  } __packed;
> > >  
> > > -struct dst_entry *ip6_tnl_dst_get(struct ip6_tnl *t);
> > > -int ip6_tnl_dst_init(struct ip6_tnl *t);
> > > -void ip6_tnl_dst_destroy(struct ip6_tnl *t);
> > > -void ip6_tnl_dst_reset(struct ip6_tnl *t);
> > > -void ip6_tnl_dst_set(struct ip6_tnl *t, struct dst_entry *dst);
> > >  int ip6_tnl_rcv_ctl(struct ip6_tnl *t, const struct in6_addr *laddr,
> > >  		const struct in6_addr *raddr);
> > >  int ip6_tnl_xmit_ctl(struct ip6_tnl *t, const struct in6_addr *laddr,
> > > --- a/net/ipv6/Kconfig
> > > +++ b/net/ipv6/Kconfig
> > > @@ -205,6 +205,7 @@ config IPV6_NDISC_NODETYPE
> > >  config IPV6_TUNNEL
> > >  	tristate "IPv6: IP-in-IPv6 tunnel (RFC2473)"
> > >  	select INET6_TUNNEL
> > > +	select DST_CACHE
> > >  	---help---
> > >  	  Support for IPv6-in-IPv6 and IPv4-in-IPv6 tunnels described in
> > >  	  RFC 2473.
> > > --- a/net/ipv6/ip6_gre.c
> > > +++ b/net/ipv6/ip6_gre.c
> > > @@ -362,7 +362,7 @@ static void ip6gre_tunnel_uninit(struct
> > >  	struct ip6gre_net *ign = net_generic(t->net, ip6gre_net_id);
> > >  
> > >  	ip6gre_tunnel_unlink(ign, t);
> > > -	ip6_tnl_dst_reset(t);
> > > +	dst_cache_reset(&t->dst_cache);
> > >  	dev_put(dev);
> > >  }
> > >  
> > > @@ -640,7 +640,7 @@ static netdev_tx_t ip6gre_xmit2(struct s
> > >  	}
> > >  
> > >  	if (!fl6->flowi6_mark)
> > > -		dst = ip6_tnl_dst_get(tunnel);
> > > +		dst = dst_cache_get(&tunnel->dst_cache);
> > >  
> > >  	if (!dst) {
> > >  		dst = ip6_route_output(net, NULL, fl6);
> > > @@ -709,7 +709,7 @@ static netdev_tx_t ip6gre_xmit2(struct s
> > >  	}
> > >  
> > >  	if (!fl6->flowi6_mark && ndst)
> > > -		ip6_tnl_dst_set(tunnel, ndst);
> > > +		dst_cache_set_ip6(&tunnel->dst_cache, ndst, &fl6->saddr);
> > >  	skb_dst_set(skb, dst);
> > >  
> > >  	proto = NEXTHDR_GRE;
> > > @@ -1017,7 +1017,7 @@ static int ip6gre_tnl_change(struct ip6_
> > >  	t->parms.o_key = p->o_key;
> > >  	t->parms.i_flags = p->i_flags;
> > >  	t->parms.o_flags = p->o_flags;
> > > -	ip6_tnl_dst_reset(t);
> > > +	dst_cache_reset(&t->dst_cache);
> > >  	ip6gre_tnl_link_config(t, set_mtu);
> > >  	return 0;
> > >  }
> > > @@ -1228,7 +1228,7 @@ static void ip6gre_dev_free(struct net_d
> > >  {
> > >  	struct ip6_tnl *t = netdev_priv(dev);
> > >  
> > > -	ip6_tnl_dst_destroy(t);
> > > +	dst_cache_destroy(&t->dst_cache);
> > >  	free_percpu(dev->tstats);
> > >  	free_netdev(dev);
> > >  }
> > > @@ -1266,7 +1266,7 @@ static int ip6gre_tunnel_init_common(str
> > >  	if (!dev->tstats)
> > >  		return -ENOMEM;
> > >  
> > > -	ret = ip6_tnl_dst_init(tunnel);
> > > +	ret = dst_cache_init(&tunnel->dst_cache, GFP_KERNEL);
> > >  	if (ret) {
> > >  		free_percpu(dev->tstats);
> > >  		dev->tstats = NULL;
> > > --- a/net/ipv6/ip6_tunnel.c
> > > +++ b/net/ipv6/ip6_tunnel.c
> > > @@ -122,97 +122,6 @@ static struct net_device_stats *ip6_get_
> > >  	return &dev->stats;
> > >  }
> > >  
> > > -/*
> > > - * Locking : hash tables are protected by RCU and RTNL
> > > - */
> > > -
> > > -static void ip6_tnl_per_cpu_dst_set(struct ip6_tnl_dst *idst,
> > > -				    struct dst_entry *dst)
> > > -{
> > > -	write_seqlock_bh(&idst->lock);
> > > -	dst_release(rcu_dereference_protected(
> > > -			    idst->dst,
> > > -			    lockdep_is_held(&idst->lock.lock)));
> > > -	if (dst) {
> > > -		dst_hold(dst);
> > > -		idst->cookie = rt6_get_cookie((struct rt6_info *)dst);
> > > -	} else {
> > > -		idst->cookie = 0;
> > > -	}
> > > -	rcu_assign_pointer(idst->dst, dst);
> > > -	write_sequnlock_bh(&idst->lock);
> > > -}
> > > -
> > > -struct dst_entry *ip6_tnl_dst_get(struct ip6_tnl *t)
> > > -{
> > > -	struct ip6_tnl_dst *idst;
> > > -	struct dst_entry *dst;
> > > -	unsigned int seq;
> > > -	u32 cookie;
> > > -
> > > -	idst = raw_cpu_ptr(t->dst_cache);
> > > -
> > > -	rcu_read_lock();
> > > -	do {
> > > -		seq = read_seqbegin(&idst->lock);
> > > -		dst = rcu_dereference(idst->dst);
> > > -		cookie = idst->cookie;
> > > -	} while (read_seqretry(&idst->lock, seq));
> > > -
> > > -	if (dst && !atomic_inc_not_zero(&dst->__refcnt))
> > > -		dst = NULL;
> > > -	rcu_read_unlock();
> > > -
> > > -	if (dst && dst->obsolete && !dst->ops->check(dst, cookie)) {
> > > -		ip6_tnl_per_cpu_dst_set(idst, NULL);
> > > -		dst_release(dst);
> > > -		dst = NULL;
> > > -	}
> > > -	return dst;
> > > -}
> > > -EXPORT_SYMBOL_GPL(ip6_tnl_dst_get);
> > > -
> > > -void ip6_tnl_dst_reset(struct ip6_tnl *t)
> > > -{
> > > -	int i;
> > > -
> > > -	for_each_possible_cpu(i)
> > > -		ip6_tnl_per_cpu_dst_set(per_cpu_ptr(t->dst_cache, i), NULL);
> > > -}
> > > -EXPORT_SYMBOL_GPL(ip6_tnl_dst_reset);
> > > -
> > > -void ip6_tnl_dst_set(struct ip6_tnl *t, struct dst_entry *dst)
> > > -{
> > > -	ip6_tnl_per_cpu_dst_set(raw_cpu_ptr(t->dst_cache), dst);
> > > -
> > > -}
> > > -EXPORT_SYMBOL_GPL(ip6_tnl_dst_set);
> > > -
> > > -void ip6_tnl_dst_destroy(struct ip6_tnl *t)
> > > -{
> > > -	if (!t->dst_cache)
> > > -		return;
> > > -
> > > -	ip6_tnl_dst_reset(t);
> > > -	free_percpu(t->dst_cache);
> > > -}
> > > -EXPORT_SYMBOL_GPL(ip6_tnl_dst_destroy);
> > > -
> > > -int ip6_tnl_dst_init(struct ip6_tnl *t)
> > > -{
> > > -	int i;
> > > -
> > > -	t->dst_cache = alloc_percpu(struct ip6_tnl_dst);
> > > -	if (!t->dst_cache)
> > > -		return -ENOMEM;
> > > -
> > > -	for_each_possible_cpu(i)
> > > -		seqlock_init(&per_cpu_ptr(t->dst_cache, i)->lock);
> > > -
> > > -	return 0;
> > > -}
> > > -EXPORT_SYMBOL_GPL(ip6_tnl_dst_init);
> > > -
> > >  /**
> > >   * ip6_tnl_lookup - fetch tunnel matching the end-point addresses
> > >   *   @remote: the address of the tunnel exit-point
> > > @@ -331,7 +240,7 @@ static void ip6_dev_free(struct net_devi
> > >  {
> > >  	struct ip6_tnl *t = netdev_priv(dev);
> > >  
> > > -	ip6_tnl_dst_destroy(t);
> > > +	dst_cache_destroy(&t->dst_cache);
> > >  	free_percpu(dev->tstats);
> > >  	free_netdev(dev);
> > >  }
> > > @@ -464,7 +373,7 @@ ip6_tnl_dev_uninit(struct net_device *de
> > >  		RCU_INIT_POINTER(ip6n->tnls_wc[0], NULL);
> > >  	else
> > >  		ip6_tnl_unlink(ip6n, t);
> > > -	ip6_tnl_dst_reset(t);
> > > +	dst_cache_reset(&t->dst_cache);
> > >  	dev_put(dev);
> > >  }
> > >  
> > > @@ -1053,7 +962,6 @@ static int ip6_tnl_xmit2(struct sk_buff
> > >  	struct ipv6_tel_txoption opt;
> > >  	struct dst_entry *dst = NULL, *ndst = NULL;
> > >  	struct net_device *tdev;
> > > -	bool use_cache = false;
> > >  	int mtu;
> > >  	unsigned int max_headroom = sizeof(struct ipv6hdr);
> > >  	u8 proto;
> > > @@ -1061,39 +969,28 @@ static int ip6_tnl_xmit2(struct sk_buff
> > >  
> > >  	/* NBMA tunnel */
> > >  	if (ipv6_addr_any(&t->parms.raddr)) {
> > > -		if (skb->protocol == htons(ETH_P_IPV6)) {
> > > -			struct in6_addr *addr6;
> > > -			struct neighbour *neigh;
> > > -			int addr_type;
> > > -
> > > -			if (!skb_dst(skb))
> > > -				goto tx_err_link_failure;
> > > -
> > > -			neigh = dst_neigh_lookup(skb_dst(skb),
> > > -						 &ipv6_hdr(skb)->daddr);
> > > -			if (!neigh)
> > > -				goto tx_err_link_failure;
> > > +		struct in6_addr *addr6;
> > > +		struct neighbour *neigh;
> > > +		int addr_type;
> > > +
> > > +		if (!skb_dst(skb))
> > > +			goto tx_err_link_failure;
> > >  
> > > -			addr6 = (struct in6_addr *)&neigh->primary_key;
> > > -			addr_type = ipv6_addr_type(addr6);
> > > +		neigh = dst_neigh_lookup(skb_dst(skb),
> > > +					 &ipv6_hdr(skb)->daddr);
> > > +		if (!neigh)
> > > +			goto tx_err_link_failure;
> > >  
> > > -			if (addr_type == IPV6_ADDR_ANY)
> > > -				addr6 = &ipv6_hdr(skb)->daddr;
> > > +		addr6 = (struct in6_addr *)&neigh->primary_key;
> > > +		addr_type = ipv6_addr_type(addr6);
> > >  
> > > -			memcpy(&fl6->daddr, addr6, sizeof(fl6->daddr));
> > > -			neigh_release(neigh);
> > > -		}
> > > -	} else if (t->parms.proto != 0 && !(t->parms.flags &
> > > -					    (IP6_TNL_F_USE_ORIG_TCLASS |
> > > -					     IP6_TNL_F_USE_ORIG_FWMARK))) {
> > > -		/* enable the cache only if neither the outer protocol nor the
> > > -		 * routing decision depends on the current inner header value
> > > -		 */
> > > -		use_cache = true;
> > > -	}
> > > +		if (addr_type == IPV6_ADDR_ANY)
> > > +			addr6 = &ipv6_hdr(skb)->daddr;
> > >  
> > > -	if (use_cache)
> > > -		dst = ip6_tnl_dst_get(t);
> > > +		memcpy(&fl6->daddr, addr6, sizeof(fl6->daddr));
> > > +		neigh_release(neigh);
> > > +	} else if (!fl6->flowi6_mark)
> > > +		dst = dst_cache_get(&t->dst_cache);
> > >  
> > >  	if (!ip6_tnl_xmit_ctl(t, &fl6->saddr, &fl6->daddr))
> > >  		goto tx_err_link_failure;
> > > @@ -1156,8 +1053,8 @@ static int ip6_tnl_xmit2(struct sk_buff
> > >  		skb = new_skb;
> > >  	}
> > >  
> > > -	if (use_cache && ndst)
> > > -		ip6_tnl_dst_set(t, ndst);
> > > +	if (!fl6->flowi6_mark && ndst)
> > > +		dst_cache_set_ip6(&t->dst_cache, ndst, &fl6->saddr);
> > >  	skb_dst_set(skb, dst);
> > >  
> > >  	skb->transport_header = skb->network_header;
> > > @@ -1392,7 +1289,7 @@ ip6_tnl_change(struct ip6_tnl *t, const
> > >  	t->parms.flowinfo = p->flowinfo;
> > >  	t->parms.link = p->link;
> > >  	t->parms.proto = p->proto;
> > > -	ip6_tnl_dst_reset(t);
> > > +	dst_cache_reset(&t->dst_cache);
> > >  	ip6_tnl_link_config(t);
> > >  	return 0;
> > >  }
> > > @@ -1663,7 +1560,7 @@ ip6_tnl_dev_init_gen(struct net_device *
> > >  	if (!dev->tstats)
> > >  		return -ENOMEM;
> > >  
> > > -	ret = ip6_tnl_dst_init(t);
> > > +	ret = dst_cache_init(&t->dst_cache, GFP_KERNEL);
> > >  	if (ret) {
> > >  		free_percpu(dev->tstats);
> > >  		dev->tstats = NULL;
> > > --- a/net/ipv6/ip6_vti.c
> > > +++ b/net/ipv6/ip6_vti.c
> > > @@ -645,7 +645,7 @@ vti6_tnl_change(struct ip6_tnl *t, const
> > >  	t->parms.i_key = p->i_key;
> > >  	t->parms.o_key = p->o_key;
> > >  	t->parms.proto = p->proto;
> > > -	ip6_tnl_dst_reset(t);
> > > +	dst_cache_reset(&t->dst_cache);
> > >  	vti6_link_config(t);
> > >  	return 0;
> > >  }
> > > 
> > >
> > 
> > It may also be wise to take these two commits from mainline, as they
> > are along the same lines as this one:
> > 
> > 09acddf873b ("ip_tunnel: replace dst_cache with generic implementation")
> > 27337e16f2d ("ip_tunnel: fix preempt warning in ip tunnel creation/updating")
> 
> Ah, good idea.
> 
> > There is a minor conflict with the first one due to stable commit
> > 6f99825e7632 ("sit: fix a double free on error path").
> > 
> > I'll most likely carry them anyways, it fixes a build error with some
> > out of tree code but less out of tree code I have, the better!
> 
> I'll do that for the next release.  What "out of tree" code relies on
> this?  Something from the CAF tree that is not merged upstream?
> 
> thanks,
> 
> greg k-h

WireGuard. For any tree that didn't have dst_cache, it was backported
and used automatically but if dst_cache is present, it was implicitly
relying on DST_CACHE being selected through NET_UDP_TUNNEL (which is
how I found those commits). Jason has since fixed it:

https://git.zx2c4.com/WireGuard/commit/?id=b3722a8b0578630794776ece5710e6a47155aa92

I'd still say those commits are worth adding since they are part of that
series.

Thanks!
Nathan

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 000/193] 4.4.118-stable review
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (197 preceding siblings ...)
  2018-02-24 11:11 ` Guenter Roeck
@ 2018-02-24 17:55 ` Guenter Roeck
  2018-03-06  3:23 ` Ben Hutchings
  199 siblings, 0 replies; 226+ messages in thread
From: Guenter Roeck @ 2018-02-24 17:55 UTC (permalink / raw)
  To: Greg Kroah-Hartman, linux-kernel
  Cc: torvalds, akpm, shuahkh, patches, ben.hutchings, lkft-triage, stable

On 02/23/2018 10:23 AM, Greg Kroah-Hartman wrote:
> This is the start of the stable review cycle for the 4.4.118 release.
> There are 193 patches in this series, all will be posted as a response
> to this one.  If anyone has any issues with these being applied, please
> let me know.
> 
> Responses should be made by Sun Feb 25 17:02:20 UTC 2018.
> Anything received after that time might be too late.
> 

For v4.4.117-193-g68ab56f:

Build results:
	total: 145 pass: 145 fail: 0
Qemu test results:
	total: 118 pass: 118 fail: 0

Details are available at http://kerneltests.org/builders.

Guenter

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 002/193] net: replace dst_cache ip6_tunnel implementation with the generic one
  2018-02-23 23:00   ` Nathan Chancellor
  2018-02-24  8:35     ` Greg Kroah-Hartman
@ 2018-02-26 12:59     ` Greg Kroah-Hartman
  2018-02-26 16:03       ` Nathan Chancellor
  1 sibling, 1 reply; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-26 12:59 UTC (permalink / raw)
  To: Nathan Chancellor
  Cc: linux-kernel, stable, Paolo Abeni, David S. Miller, Manoj Boopathi Raj

On Fri, Feb 23, 2018 at 04:00:08PM -0700, Nathan Chancellor wrote:
> On Fri, Feb 23, 2018 at 07:23:55PM +0100, Greg Kroah-Hartman wrote:
> > 4.4-stable review patch.  If anyone has any objections, please let me know.
> > 
> > ------------------
> > 
> > From: Paolo Abeni <pabeni@redhat.com>
> > 
> > commit 607f725f6f7d5ec3759fbc16224afb60e2152a5b upstream.
> > 
> > This also fix a potential race into the existing tunnel code, which
> > could lead to the wrong dst to be permanenty cached:
> > 
> > CPU1:					CPU2:
> >   <xmit on ip6_tunnel>
> >   <cache lookup fails>
> >   dst = ip6_route_output(...)
> > 					<tunnel params are changed via nl>
> > 					dst_cache_reset() // no effect,
> > 							// the cache is empty
> >   dst_cache_set() // the wrong dst
> > 	// is permanenty stored
> > 	// into the cache
> > 
> > With the new dst implementation the above race is not possible
> > since the first cache lookup after dst_cache_reset will fail due
> > to the timestamp check
> > 
> > Signed-off-by: Paolo Abeni <pabeni@redhat.com>
> > Suggested-and-acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
> > Signed-off-by: David S. Miller <davem@davemloft.net>
> > Signed-off-by: Manoj Boopathi Raj <manojboopathi@google.com>
> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > 
> > ---
> >  include/net/ip6_tunnel.h |   15 ----
> >  net/ipv6/Kconfig         |    1 
> >  net/ipv6/ip6_gre.c       |   12 +--
> >  net/ipv6/ip6_tunnel.c    |  151 +++++++----------------------------------------
> >  net/ipv6/ip6_vti.c       |    2 
> >  5 files changed, 35 insertions(+), 146 deletions(-)
> > 
> > --- a/include/net/ip6_tunnel.h
> > +++ b/include/net/ip6_tunnel.h
> > @@ -5,6 +5,8 @@
> >  #include <linux/netdevice.h>
> >  #include <linux/if_tunnel.h>
> >  #include <linux/ip6_tunnel.h>
> > +#include <net/ip_tunnels.h>
> > +#include <net/dst_cache.h>
> >  
> >  #define IP6TUNNEL_ERR_TIMEO (30*HZ)
> >  
> > @@ -32,12 +34,6 @@ struct __ip6_tnl_parm {
> >  	__be32			o_key;
> >  };
> >  
> > -struct ip6_tnl_dst {
> > -	seqlock_t lock;
> > -	struct dst_entry __rcu *dst;
> > -	u32 cookie;
> > -};
> > -
> >  /* IPv6 tunnel */
> >  struct ip6_tnl {
> >  	struct ip6_tnl __rcu *next;	/* next tunnel in list */
> > @@ -45,7 +41,7 @@ struct ip6_tnl {
> >  	struct net *net;	/* netns for packet i/o */
> >  	struct __ip6_tnl_parm parms;	/* tunnel configuration parameters */
> >  	struct flowi fl;	/* flowi template for xmit */
> > -	struct ip6_tnl_dst __percpu *dst_cache;	/* cached dst */
> > +	struct dst_cache dst_cache;	/* cached dst */
> >  
> >  	int err_count;
> >  	unsigned long err_time;
> > @@ -65,11 +61,6 @@ struct ipv6_tlv_tnl_enc_lim {
> >  	__u8 encap_limit;	/* tunnel encapsulation limit   */
> >  } __packed;
> >  
> > -struct dst_entry *ip6_tnl_dst_get(struct ip6_tnl *t);
> > -int ip6_tnl_dst_init(struct ip6_tnl *t);
> > -void ip6_tnl_dst_destroy(struct ip6_tnl *t);
> > -void ip6_tnl_dst_reset(struct ip6_tnl *t);
> > -void ip6_tnl_dst_set(struct ip6_tnl *t, struct dst_entry *dst);
> >  int ip6_tnl_rcv_ctl(struct ip6_tnl *t, const struct in6_addr *laddr,
> >  		const struct in6_addr *raddr);
> >  int ip6_tnl_xmit_ctl(struct ip6_tnl *t, const struct in6_addr *laddr,
> > --- a/net/ipv6/Kconfig
> > +++ b/net/ipv6/Kconfig
> > @@ -205,6 +205,7 @@ config IPV6_NDISC_NODETYPE
> >  config IPV6_TUNNEL
> >  	tristate "IPv6: IP-in-IPv6 tunnel (RFC2473)"
> >  	select INET6_TUNNEL
> > +	select DST_CACHE
> >  	---help---
> >  	  Support for IPv6-in-IPv6 and IPv4-in-IPv6 tunnels described in
> >  	  RFC 2473.
> > --- a/net/ipv6/ip6_gre.c
> > +++ b/net/ipv6/ip6_gre.c
> > @@ -362,7 +362,7 @@ static void ip6gre_tunnel_uninit(struct
> >  	struct ip6gre_net *ign = net_generic(t->net, ip6gre_net_id);
> >  
> >  	ip6gre_tunnel_unlink(ign, t);
> > -	ip6_tnl_dst_reset(t);
> > +	dst_cache_reset(&t->dst_cache);
> >  	dev_put(dev);
> >  }
> >  
> > @@ -640,7 +640,7 @@ static netdev_tx_t ip6gre_xmit2(struct s
> >  	}
> >  
> >  	if (!fl6->flowi6_mark)
> > -		dst = ip6_tnl_dst_get(tunnel);
> > +		dst = dst_cache_get(&tunnel->dst_cache);
> >  
> >  	if (!dst) {
> >  		dst = ip6_route_output(net, NULL, fl6);
> > @@ -709,7 +709,7 @@ static netdev_tx_t ip6gre_xmit2(struct s
> >  	}
> >  
> >  	if (!fl6->flowi6_mark && ndst)
> > -		ip6_tnl_dst_set(tunnel, ndst);
> > +		dst_cache_set_ip6(&tunnel->dst_cache, ndst, &fl6->saddr);
> >  	skb_dst_set(skb, dst);
> >  
> >  	proto = NEXTHDR_GRE;
> > @@ -1017,7 +1017,7 @@ static int ip6gre_tnl_change(struct ip6_
> >  	t->parms.o_key = p->o_key;
> >  	t->parms.i_flags = p->i_flags;
> >  	t->parms.o_flags = p->o_flags;
> > -	ip6_tnl_dst_reset(t);
> > +	dst_cache_reset(&t->dst_cache);
> >  	ip6gre_tnl_link_config(t, set_mtu);
> >  	return 0;
> >  }
> > @@ -1228,7 +1228,7 @@ static void ip6gre_dev_free(struct net_d
> >  {
> >  	struct ip6_tnl *t = netdev_priv(dev);
> >  
> > -	ip6_tnl_dst_destroy(t);
> > +	dst_cache_destroy(&t->dst_cache);
> >  	free_percpu(dev->tstats);
> >  	free_netdev(dev);
> >  }
> > @@ -1266,7 +1266,7 @@ static int ip6gre_tunnel_init_common(str
> >  	if (!dev->tstats)
> >  		return -ENOMEM;
> >  
> > -	ret = ip6_tnl_dst_init(tunnel);
> > +	ret = dst_cache_init(&tunnel->dst_cache, GFP_KERNEL);
> >  	if (ret) {
> >  		free_percpu(dev->tstats);
> >  		dev->tstats = NULL;
> > --- a/net/ipv6/ip6_tunnel.c
> > +++ b/net/ipv6/ip6_tunnel.c
> > @@ -122,97 +122,6 @@ static struct net_device_stats *ip6_get_
> >  	return &dev->stats;
> >  }
> >  
> > -/*
> > - * Locking : hash tables are protected by RCU and RTNL
> > - */
> > -
> > -static void ip6_tnl_per_cpu_dst_set(struct ip6_tnl_dst *idst,
> > -				    struct dst_entry *dst)
> > -{
> > -	write_seqlock_bh(&idst->lock);
> > -	dst_release(rcu_dereference_protected(
> > -			    idst->dst,
> > -			    lockdep_is_held(&idst->lock.lock)));
> > -	if (dst) {
> > -		dst_hold(dst);
> > -		idst->cookie = rt6_get_cookie((struct rt6_info *)dst);
> > -	} else {
> > -		idst->cookie = 0;
> > -	}
> > -	rcu_assign_pointer(idst->dst, dst);
> > -	write_sequnlock_bh(&idst->lock);
> > -}
> > -
> > -struct dst_entry *ip6_tnl_dst_get(struct ip6_tnl *t)
> > -{
> > -	struct ip6_tnl_dst *idst;
> > -	struct dst_entry *dst;
> > -	unsigned int seq;
> > -	u32 cookie;
> > -
> > -	idst = raw_cpu_ptr(t->dst_cache);
> > -
> > -	rcu_read_lock();
> > -	do {
> > -		seq = read_seqbegin(&idst->lock);
> > -		dst = rcu_dereference(idst->dst);
> > -		cookie = idst->cookie;
> > -	} while (read_seqretry(&idst->lock, seq));
> > -
> > -	if (dst && !atomic_inc_not_zero(&dst->__refcnt))
> > -		dst = NULL;
> > -	rcu_read_unlock();
> > -
> > -	if (dst && dst->obsolete && !dst->ops->check(dst, cookie)) {
> > -		ip6_tnl_per_cpu_dst_set(idst, NULL);
> > -		dst_release(dst);
> > -		dst = NULL;
> > -	}
> > -	return dst;
> > -}
> > -EXPORT_SYMBOL_GPL(ip6_tnl_dst_get);
> > -
> > -void ip6_tnl_dst_reset(struct ip6_tnl *t)
> > -{
> > -	int i;
> > -
> > -	for_each_possible_cpu(i)
> > -		ip6_tnl_per_cpu_dst_set(per_cpu_ptr(t->dst_cache, i), NULL);
> > -}
> > -EXPORT_SYMBOL_GPL(ip6_tnl_dst_reset);
> > -
> > -void ip6_tnl_dst_set(struct ip6_tnl *t, struct dst_entry *dst)
> > -{
> > -	ip6_tnl_per_cpu_dst_set(raw_cpu_ptr(t->dst_cache), dst);
> > -
> > -}
> > -EXPORT_SYMBOL_GPL(ip6_tnl_dst_set);
> > -
> > -void ip6_tnl_dst_destroy(struct ip6_tnl *t)
> > -{
> > -	if (!t->dst_cache)
> > -		return;
> > -
> > -	ip6_tnl_dst_reset(t);
> > -	free_percpu(t->dst_cache);
> > -}
> > -EXPORT_SYMBOL_GPL(ip6_tnl_dst_destroy);
> > -
> > -int ip6_tnl_dst_init(struct ip6_tnl *t)
> > -{
> > -	int i;
> > -
> > -	t->dst_cache = alloc_percpu(struct ip6_tnl_dst);
> > -	if (!t->dst_cache)
> > -		return -ENOMEM;
> > -
> > -	for_each_possible_cpu(i)
> > -		seqlock_init(&per_cpu_ptr(t->dst_cache, i)->lock);
> > -
> > -	return 0;
> > -}
> > -EXPORT_SYMBOL_GPL(ip6_tnl_dst_init);
> > -
> >  /**
> >   * ip6_tnl_lookup - fetch tunnel matching the end-point addresses
> >   *   @remote: the address of the tunnel exit-point
> > @@ -331,7 +240,7 @@ static void ip6_dev_free(struct net_devi
> >  {
> >  	struct ip6_tnl *t = netdev_priv(dev);
> >  
> > -	ip6_tnl_dst_destroy(t);
> > +	dst_cache_destroy(&t->dst_cache);
> >  	free_percpu(dev->tstats);
> >  	free_netdev(dev);
> >  }
> > @@ -464,7 +373,7 @@ ip6_tnl_dev_uninit(struct net_device *de
> >  		RCU_INIT_POINTER(ip6n->tnls_wc[0], NULL);
> >  	else
> >  		ip6_tnl_unlink(ip6n, t);
> > -	ip6_tnl_dst_reset(t);
> > +	dst_cache_reset(&t->dst_cache);
> >  	dev_put(dev);
> >  }
> >  
> > @@ -1053,7 +962,6 @@ static int ip6_tnl_xmit2(struct sk_buff
> >  	struct ipv6_tel_txoption opt;
> >  	struct dst_entry *dst = NULL, *ndst = NULL;
> >  	struct net_device *tdev;
> > -	bool use_cache = false;
> >  	int mtu;
> >  	unsigned int max_headroom = sizeof(struct ipv6hdr);
> >  	u8 proto;
> > @@ -1061,39 +969,28 @@ static int ip6_tnl_xmit2(struct sk_buff
> >  
> >  	/* NBMA tunnel */
> >  	if (ipv6_addr_any(&t->parms.raddr)) {
> > -		if (skb->protocol == htons(ETH_P_IPV6)) {
> > -			struct in6_addr *addr6;
> > -			struct neighbour *neigh;
> > -			int addr_type;
> > -
> > -			if (!skb_dst(skb))
> > -				goto tx_err_link_failure;
> > -
> > -			neigh = dst_neigh_lookup(skb_dst(skb),
> > -						 &ipv6_hdr(skb)->daddr);
> > -			if (!neigh)
> > -				goto tx_err_link_failure;
> > +		struct in6_addr *addr6;
> > +		struct neighbour *neigh;
> > +		int addr_type;
> > +
> > +		if (!skb_dst(skb))
> > +			goto tx_err_link_failure;
> >  
> > -			addr6 = (struct in6_addr *)&neigh->primary_key;
> > -			addr_type = ipv6_addr_type(addr6);
> > +		neigh = dst_neigh_lookup(skb_dst(skb),
> > +					 &ipv6_hdr(skb)->daddr);
> > +		if (!neigh)
> > +			goto tx_err_link_failure;
> >  
> > -			if (addr_type == IPV6_ADDR_ANY)
> > -				addr6 = &ipv6_hdr(skb)->daddr;
> > +		addr6 = (struct in6_addr *)&neigh->primary_key;
> > +		addr_type = ipv6_addr_type(addr6);
> >  
> > -			memcpy(&fl6->daddr, addr6, sizeof(fl6->daddr));
> > -			neigh_release(neigh);
> > -		}
> > -	} else if (t->parms.proto != 0 && !(t->parms.flags &
> > -					    (IP6_TNL_F_USE_ORIG_TCLASS |
> > -					     IP6_TNL_F_USE_ORIG_FWMARK))) {
> > -		/* enable the cache only if neither the outer protocol nor the
> > -		 * routing decision depends on the current inner header value
> > -		 */
> > -		use_cache = true;
> > -	}
> > +		if (addr_type == IPV6_ADDR_ANY)
> > +			addr6 = &ipv6_hdr(skb)->daddr;
> >  
> > -	if (use_cache)
> > -		dst = ip6_tnl_dst_get(t);
> > +		memcpy(&fl6->daddr, addr6, sizeof(fl6->daddr));
> > +		neigh_release(neigh);
> > +	} else if (!fl6->flowi6_mark)
> > +		dst = dst_cache_get(&t->dst_cache);
> >  
> >  	if (!ip6_tnl_xmit_ctl(t, &fl6->saddr, &fl6->daddr))
> >  		goto tx_err_link_failure;
> > @@ -1156,8 +1053,8 @@ static int ip6_tnl_xmit2(struct sk_buff
> >  		skb = new_skb;
> >  	}
> >  
> > -	if (use_cache && ndst)
> > -		ip6_tnl_dst_set(t, ndst);
> > +	if (!fl6->flowi6_mark && ndst)
> > +		dst_cache_set_ip6(&t->dst_cache, ndst, &fl6->saddr);
> >  	skb_dst_set(skb, dst);
> >  
> >  	skb->transport_header = skb->network_header;
> > @@ -1392,7 +1289,7 @@ ip6_tnl_change(struct ip6_tnl *t, const
> >  	t->parms.flowinfo = p->flowinfo;
> >  	t->parms.link = p->link;
> >  	t->parms.proto = p->proto;
> > -	ip6_tnl_dst_reset(t);
> > +	dst_cache_reset(&t->dst_cache);
> >  	ip6_tnl_link_config(t);
> >  	return 0;
> >  }
> > @@ -1663,7 +1560,7 @@ ip6_tnl_dev_init_gen(struct net_device *
> >  	if (!dev->tstats)
> >  		return -ENOMEM;
> >  
> > -	ret = ip6_tnl_dst_init(t);
> > +	ret = dst_cache_init(&t->dst_cache, GFP_KERNEL);
> >  	if (ret) {
> >  		free_percpu(dev->tstats);
> >  		dev->tstats = NULL;
> > --- a/net/ipv6/ip6_vti.c
> > +++ b/net/ipv6/ip6_vti.c
> > @@ -645,7 +645,7 @@ vti6_tnl_change(struct ip6_tnl *t, const
> >  	t->parms.i_key = p->i_key;
> >  	t->parms.o_key = p->o_key;
> >  	t->parms.proto = p->proto;
> > -	ip6_tnl_dst_reset(t);
> > +	dst_cache_reset(&t->dst_cache);
> >  	vti6_link_config(t);
> >  	return 0;
> >  }
> > 
> >
> 
> It may also be wise to take these two commits from mainline, as they
> are along the same lines as this one:
> 
> 09acddf873b ("ip_tunnel: replace dst_cache with generic implementation")

Your SHA1s are odd, this should be e09acddf873b

> 27337e16f2d ("ip_tunnel: fix preempt warning in ip tunnel creation/updating")

And this is f27337e16f2d0e52a8d05ea599ed13cd266ac291, you lost the first
digit for both :(

> There is a minor conflict with the first one due to stable commit
> 6f99825e7632 ("sit: fix a double free on error path").

Thanks, now fixed that up and queued both of these.

greg k-h

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 002/193] net: replace dst_cache ip6_tunnel implementation with the generic one
  2018-02-26 12:59     ` Greg Kroah-Hartman
@ 2018-02-26 16:03       ` Nathan Chancellor
  0 siblings, 0 replies; 226+ messages in thread
From: Nathan Chancellor @ 2018-02-26 16:03 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-kernel, stable, Paolo Abeni, David S. Miller, Manoj Boopathi Raj

On Mon, Feb 26, 2018 at 01:59:01PM +0100, Greg Kroah-Hartman wrote:
> On Fri, Feb 23, 2018 at 04:00:08PM -0700, Nathan Chancellor wrote:
> > It may also be wise to take these two commits from mainline, as they
> > are along the same lines as this one:
> > 
> > 09acddf873b ("ip_tunnel: replace dst_cache with generic implementation")
> 
> Your SHA1s are odd, this should be e09acddf873b
> 
> > 27337e16f2d ("ip_tunnel: fix preempt warning in ip tunnel creation/updating")
> 
> And this is f27337e16f2d0e52a8d05ea599ed13cd266ac291, you lost the first
> digit for both :(
> 
> > There is a minor conflict with the first one due to stable commit
> > 6f99825e7632 ("sit: fix a double free on error path").
> 
> Thanks, now fixed that up and queued both of these.
> 
> greg k-h

Gah, sorry :( I'll double check next time!

Thanks!
Nathan

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [4.4, 027/193] binder: check for binder_thread allocation failure in binder_poll()
  2018-02-23 18:24 ` [PATCH 4.4 027/193] binder: check for binder_thread allocation failure in binder_poll() Greg Kroah-Hartman
@ 2018-02-26 17:21   ` Guenter Roeck
  2018-02-26 18:57     ` Eric Biggers
  0 siblings, 1 reply; 226+ messages in thread
From: Guenter Roeck @ 2018-02-26 17:21 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel, stable, syzbot, Eric Biggers

On Fri, Feb 23, 2018 at 07:24:20PM +0100, gregkh@linuxfoundation.org wrote:
> 4.4-stable review patch.  If anyone has any objections, please let me know.
> 
> ------------------
> 
> From: Eric Biggers <ebiggers@google.com>
> 
> commit f88982679f54f75daa5b8eff3da72508f1e7422f upstream.
> 
> If the kzalloc() in binder_get_thread() fails, binder_poll()
> dereferences the resulting NULL pointer.
> 
> Fix it by returning POLLERR if the memory allocation failed.
> 
> This bug was found by syzkaller using fault injection.
> 
> Reported-by: syzbot <syzkaller@googlegroups.com>
> Fixes: 457b9a6f09f0 ("Staging: android: add binder driver")
> Cc: stable@vger.kernel.org
> Signed-off-by: Eric Biggers <ebiggers@google.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> ---
>  drivers/android/binder.c |    2 ++
>  1 file changed, 2 insertions(+)
> 
> --- a/drivers/android/binder.c
> +++ b/drivers/android/binder.c
> @@ -2622,6 +2622,8 @@ static unsigned int binder_poll(struct f
>  	binder_lock(__func__);
>  
>  	thread = binder_get_thread(proc);
> +	if (!thread)
> +		return POLLERR;
>  
Noticed while merging into chromeos-4.4:

This will cause trouble in v4.4.y. Notice the call to "binder_lock(__func__)"
above. This call has been removed upstream, but not in v4.4.y. As a result,
the lock won't be released, which will result in subsequent hangups
if/when the function is called again.

v4.9.y has the same problem. v4.14.y+ are fine.

Greg - can you fix this up yourself or do you want me to send fixup
patches ? It might take a few days for me to get to it.

Guenter

>  	wait_for_proc_work = thread->transaction_stack == NULL &&
>  		list_empty(&thread->todo) && thread->return_error == BR_OK;

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [4.4, 027/193] binder: check for binder_thread allocation failure in binder_poll()
  2018-02-26 17:21   ` [4.4, " Guenter Roeck
@ 2018-02-26 18:57     ` Eric Biggers
  2018-02-26 19:05       ` Guenter Roeck
  0 siblings, 1 reply; 226+ messages in thread
From: Eric Biggers @ 2018-02-26 18:57 UTC (permalink / raw)
  To: Guenter Roeck; +Cc: gregkh, linux-kernel, stable, syzbot, Eric Biggers

Hi Guenter,

On Mon, Feb 26, 2018 at 09:21:19AM -0800, Guenter Roeck wrote:
> On Fri, Feb 23, 2018 at 07:24:20PM +0100, gregkh@linuxfoundation.org wrote:
> > 4.4-stable review patch.  If anyone has any objections, please let me know.
> > 
> > ------------------
> > 
> > From: Eric Biggers <ebiggers@google.com>
> > 
> > commit f88982679f54f75daa5b8eff3da72508f1e7422f upstream.
> > 
> > If the kzalloc() in binder_get_thread() fails, binder_poll()
> > dereferences the resulting NULL pointer.
> > 
> > Fix it by returning POLLERR if the memory allocation failed.
> > 
> > This bug was found by syzkaller using fault injection.
> > 
> > Reported-by: syzbot <syzkaller@googlegroups.com>
> > Fixes: 457b9a6f09f0 ("Staging: android: add binder driver")
> > Cc: stable@vger.kernel.org
> > Signed-off-by: Eric Biggers <ebiggers@google.com>
> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > ---
> >  drivers/android/binder.c |    2 ++
> >  1 file changed, 2 insertions(+)
> > 
> > --- a/drivers/android/binder.c
> > +++ b/drivers/android/binder.c
> > @@ -2622,6 +2622,8 @@ static unsigned int binder_poll(struct f
> >  	binder_lock(__func__);
> >  
> >  	thread = binder_get_thread(proc);
> > +	if (!thread)
> > +		return POLLERR;
> >  
> Noticed while merging into chromeos-4.4:
> 
> This will cause trouble in v4.4.y. Notice the call to "binder_lock(__func__)"
> above. This call has been removed upstream, but not in v4.4.y. As a result,
> the lock won't be released, which will result in subsequent hangups
> if/when the function is called again.
> 
> v4.9.y has the same problem. v4.14.y+ are fine.
> 
> Greg - can you fix this up yourself or do you want me to send fixup
> patches ? It might take a few days for me to get to it.
> 
> Guenter

Thanks for spotting this!  I'll send a patch to fix it.

Eric

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [4.4, 027/193] binder: check for binder_thread allocation failure in binder_poll()
  2018-02-26 18:57     ` Eric Biggers
@ 2018-02-26 19:05       ` Guenter Roeck
  0 siblings, 0 replies; 226+ messages in thread
From: Guenter Roeck @ 2018-02-26 19:05 UTC (permalink / raw)
  To: Eric Biggers; +Cc: gregkh, linux-kernel, stable, syzbot, Eric Biggers

On Mon, Feb 26, 2018 at 10:57:54AM -0800, Eric Biggers wrote:
> Hi Guenter,
> 
> On Mon, Feb 26, 2018 at 09:21:19AM -0800, Guenter Roeck wrote:
> > On Fri, Feb 23, 2018 at 07:24:20PM +0100, gregkh@linuxfoundation.org wrote:
> > > 4.4-stable review patch.  If anyone has any objections, please let me know.
> > > 
> > > ------------------
> > > 
> > > From: Eric Biggers <ebiggers@google.com>
> > > 
> > > commit f88982679f54f75daa5b8eff3da72508f1e7422f upstream.
> > > 
> > > If the kzalloc() in binder_get_thread() fails, binder_poll()
> > > dereferences the resulting NULL pointer.
> > > 
> > > Fix it by returning POLLERR if the memory allocation failed.
> > > 
> > > This bug was found by syzkaller using fault injection.
> > > 
> > > Reported-by: syzbot <syzkaller@googlegroups.com>
> > > Fixes: 457b9a6f09f0 ("Staging: android: add binder driver")
> > > Cc: stable@vger.kernel.org
> > > Signed-off-by: Eric Biggers <ebiggers@google.com>
> > > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > > ---
> > >  drivers/android/binder.c |    2 ++
> > >  1 file changed, 2 insertions(+)
> > > 
> > > --- a/drivers/android/binder.c
> > > +++ b/drivers/android/binder.c
> > > @@ -2622,6 +2622,8 @@ static unsigned int binder_poll(struct f
> > >  	binder_lock(__func__);
> > >  
> > >  	thread = binder_get_thread(proc);
> > > +	if (!thread)
> > > +		return POLLERR;
> > >  
> > Noticed while merging into chromeos-4.4:
> > 
> > This will cause trouble in v4.4.y. Notice the call to "binder_lock(__func__)"
> > above. This call has been removed upstream, but not in v4.4.y. As a result,
> > the lock won't be released, which will result in subsequent hangups
> > if/when the function is called again.
> > 
> > v4.9.y has the same problem. v4.14.y+ are fine.
> > 
> > Greg - can you fix this up yourself or do you want me to send fixup
> > patches ? It might take a few days for me to get to it.
> > 
> > Guenter
> 
> Thanks for spotting this!  I'll send a patch to fix it.
> 
Thanks!

Guenter

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 002/193] net: replace dst_cache ip6_tunnel implementation with the generic one
  2018-02-23 18:23 ` [PATCH 4.4 002/193] net: replace dst_cache ip6_tunnel implementation with the generic one Greg Kroah-Hartman
  2018-02-23 23:00   ` Nathan Chancellor
@ 2018-02-27  8:05   ` Michal Kubecek
  2018-02-27 13:11     ` Greg Kroah-Hartman
  1 sibling, 1 reply; 226+ messages in thread
From: Michal Kubecek @ 2018-02-27  8:05 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-kernel, stable, Paolo Abeni, David S. Miller, Manoj Boopathi Raj

On Fri, Feb 23, 2018 at 07:23:55PM +0100, Greg Kroah-Hartman wrote:
> 4.4-stable review patch.  If anyone has any objections, please let me know.
> 
> ------------------
> 
> From: Paolo Abeni <pabeni@redhat.com>
> 
> commit 607f725f6f7d5ec3759fbc16224afb60e2152a5b upstream.
> 
> This also fix a potential race into the existing tunnel code, which
> could lead to the wrong dst to be permanenty cached:
> 
> CPU1:					CPU2:
>   <xmit on ip6_tunnel>
>   <cache lookup fails>
>   dst = ip6_route_output(...)
> 					<tunnel params are changed via nl>
> 					dst_cache_reset() // no effect,
> 							// the cache is empty
>   dst_cache_set() // the wrong dst
> 	// is permanenty stored
> 	// into the cache
> 
> With the new dst implementation the above race is not possible
> since the first cache lookup after dst_cache_reset will fail due
> to the timestamp check
> 
> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
> Suggested-and-acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
> Signed-off-by: David S. Miller <davem@davemloft.net>
> Signed-off-by: Manoj Boopathi Raj <manojboopathi@google.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> 
> ---
...
> --- a/net/ipv6/ip6_gre.c
> +++ b/net/ipv6/ip6_gre.c
...
> @@ -1053,7 +962,6 @@ static int ip6_tnl_xmit2(struct sk_buff
>  	struct ipv6_tel_txoption opt;
>  	struct dst_entry *dst = NULL, *ndst = NULL;
>  	struct net_device *tdev;
> -	bool use_cache = false;
>  	int mtu;
>  	unsigned int max_headroom = sizeof(struct ipv6hdr);
>  	u8 proto;
> @@ -1061,39 +969,28 @@ static int ip6_tnl_xmit2(struct sk_buff
>  
>  	/* NBMA tunnel */
>  	if (ipv6_addr_any(&t->parms.raddr)) {
> -		if (skb->protocol == htons(ETH_P_IPV6)) {
> -			struct in6_addr *addr6;
> -			struct neighbour *neigh;
> -			int addr_type;
> -
> -			if (!skb_dst(skb))
> -				goto tx_err_link_failure;
> -
> -			neigh = dst_neigh_lookup(skb_dst(skb),
> -						 &ipv6_hdr(skb)->daddr);
> -			if (!neigh)
> -				goto tx_err_link_failure;
> +		struct in6_addr *addr6;
> +		struct neighbour *neigh;
> +		int addr_type;
> +
> +		if (!skb_dst(skb))
> +			goto tx_err_link_failure;
>  
> -			addr6 = (struct in6_addr *)&neigh->primary_key;
> -			addr_type = ipv6_addr_type(addr6);
> +		neigh = dst_neigh_lookup(skb_dst(skb),
> +					 &ipv6_hdr(skb)->daddr);
> +		if (!neigh)
> +			goto tx_err_link_failure;
>  
> -			if (addr_type == IPV6_ADDR_ANY)
> -				addr6 = &ipv6_hdr(skb)->daddr;
> +		addr6 = (struct in6_addr *)&neigh->primary_key;
> +		addr_type = ipv6_addr_type(addr6);
>  
> -			memcpy(&fl6->daddr, addr6, sizeof(fl6->daddr));
> -			neigh_release(neigh);
> -		}
> -	} else if (t->parms.proto != 0 && !(t->parms.flags &
> -					    (IP6_TNL_F_USE_ORIG_TCLASS |
> -					     IP6_TNL_F_USE_ORIG_FWMARK))) {
> -		/* enable the cache only if neither the outer protocol nor the
> -		 * routing decision depends on the current inner header value
> -		 */
> -		use_cache = true;
> -	}
> +		if (addr_type == IPV6_ADDR_ANY)
> +			addr6 = &ipv6_hdr(skb)->daddr;
>  
> -	if (use_cache)
> -		dst = ip6_tnl_dst_get(t);
> +		memcpy(&fl6->daddr, addr6, sizeof(fl6->daddr));
> +		neigh_release(neigh);
> +	} else if (!fl6->flowi6_mark)
> +		dst = dst_cache_get(&t->dst_cache);
>  
>  	if (!ip6_tnl_xmit_ctl(t, &fl6->saddr, &fl6->daddr))
>  		goto tx_err_link_failure;
> @@ -1156,8 +1053,8 @@ static int ip6_tnl_xmit2(struct sk_buff
>  		skb = new_skb;
>  	}
>  
> -	if (use_cache && ndst)
> -		ip6_tnl_dst_set(t, ndst);
> +	if (!fl6->flowi6_mark && ndst)
> +		dst_cache_set_ip6(&t->dst_cache, ndst, &fl6->saddr);
>  	skb_dst_set(skb, dst);
>  
>  	skb->transport_header = skb->network_header;

This part looks essentially like a revert of earlier commit befb92542439
("ipv6: check skb->protocol before lookup for nexthop", mainline
199ab00f3cdb). Is it possible that it comes from an incorrect resolution
of the conflict caused by these two being backported in opposite order
(befb92542439 < b8c7f80cbdcd) than the original mainline commits
(607f725f6f7d < 199ab00f3cdb)?

Michal Kubecek

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 002/193] net: replace dst_cache ip6_tunnel implementation with the generic one
  2018-02-27  8:05   ` Michal Kubecek
@ 2018-02-27 13:11     ` Greg Kroah-Hartman
  0 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-02-27 13:11 UTC (permalink / raw)
  To: Michal Kubecek
  Cc: linux-kernel, stable, Paolo Abeni, David S. Miller, Manoj Boopathi Raj

On Tue, Feb 27, 2018 at 09:05:01AM +0100, Michal Kubecek wrote:
> On Fri, Feb 23, 2018 at 07:23:55PM +0100, Greg Kroah-Hartman wrote:
> > 4.4-stable review patch.  If anyone has any objections, please let me know.
> > 
> > ------------------
> > 
> > From: Paolo Abeni <pabeni@redhat.com>
> > 
> > commit 607f725f6f7d5ec3759fbc16224afb60e2152a5b upstream.
> > 
> > This also fix a potential race into the existing tunnel code, which
> > could lead to the wrong dst to be permanenty cached:
> > 
> > CPU1:					CPU2:
> >   <xmit on ip6_tunnel>
> >   <cache lookup fails>
> >   dst = ip6_route_output(...)
> > 					<tunnel params are changed via nl>
> > 					dst_cache_reset() // no effect,
> > 							// the cache is empty
> >   dst_cache_set() // the wrong dst
> > 	// is permanenty stored
> > 	// into the cache
> > 
> > With the new dst implementation the above race is not possible
> > since the first cache lookup after dst_cache_reset will fail due
> > to the timestamp check
> > 
> > Signed-off-by: Paolo Abeni <pabeni@redhat.com>
> > Suggested-and-acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
> > Signed-off-by: David S. Miller <davem@davemloft.net>
> > Signed-off-by: Manoj Boopathi Raj <manojboopathi@google.com>
> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > 
> > ---
> ...
> > --- a/net/ipv6/ip6_gre.c
> > +++ b/net/ipv6/ip6_gre.c
> ...
> > @@ -1053,7 +962,6 @@ static int ip6_tnl_xmit2(struct sk_buff
> >  	struct ipv6_tel_txoption opt;
> >  	struct dst_entry *dst = NULL, *ndst = NULL;
> >  	struct net_device *tdev;
> > -	bool use_cache = false;
> >  	int mtu;
> >  	unsigned int max_headroom = sizeof(struct ipv6hdr);
> >  	u8 proto;
> > @@ -1061,39 +969,28 @@ static int ip6_tnl_xmit2(struct sk_buff
> >  
> >  	/* NBMA tunnel */
> >  	if (ipv6_addr_any(&t->parms.raddr)) {
> > -		if (skb->protocol == htons(ETH_P_IPV6)) {
> > -			struct in6_addr *addr6;
> > -			struct neighbour *neigh;
> > -			int addr_type;
> > -
> > -			if (!skb_dst(skb))
> > -				goto tx_err_link_failure;
> > -
> > -			neigh = dst_neigh_lookup(skb_dst(skb),
> > -						 &ipv6_hdr(skb)->daddr);
> > -			if (!neigh)
> > -				goto tx_err_link_failure;
> > +		struct in6_addr *addr6;
> > +		struct neighbour *neigh;
> > +		int addr_type;
> > +
> > +		if (!skb_dst(skb))
> > +			goto tx_err_link_failure;
> >  
> > -			addr6 = (struct in6_addr *)&neigh->primary_key;
> > -			addr_type = ipv6_addr_type(addr6);
> > +		neigh = dst_neigh_lookup(skb_dst(skb),
> > +					 &ipv6_hdr(skb)->daddr);
> > +		if (!neigh)
> > +			goto tx_err_link_failure;
> >  
> > -			if (addr_type == IPV6_ADDR_ANY)
> > -				addr6 = &ipv6_hdr(skb)->daddr;
> > +		addr6 = (struct in6_addr *)&neigh->primary_key;
> > +		addr_type = ipv6_addr_type(addr6);
> >  
> > -			memcpy(&fl6->daddr, addr6, sizeof(fl6->daddr));
> > -			neigh_release(neigh);
> > -		}
> > -	} else if (t->parms.proto != 0 && !(t->parms.flags &
> > -					    (IP6_TNL_F_USE_ORIG_TCLASS |
> > -					     IP6_TNL_F_USE_ORIG_FWMARK))) {
> > -		/* enable the cache only if neither the outer protocol nor the
> > -		 * routing decision depends on the current inner header value
> > -		 */
> > -		use_cache = true;
> > -	}
> > +		if (addr_type == IPV6_ADDR_ANY)
> > +			addr6 = &ipv6_hdr(skb)->daddr;
> >  
> > -	if (use_cache)
> > -		dst = ip6_tnl_dst_get(t);
> > +		memcpy(&fl6->daddr, addr6, sizeof(fl6->daddr));
> > +		neigh_release(neigh);
> > +	} else if (!fl6->flowi6_mark)
> > +		dst = dst_cache_get(&t->dst_cache);
> >  
> >  	if (!ip6_tnl_xmit_ctl(t, &fl6->saddr, &fl6->daddr))
> >  		goto tx_err_link_failure;
> > @@ -1156,8 +1053,8 @@ static int ip6_tnl_xmit2(struct sk_buff
> >  		skb = new_skb;
> >  	}
> >  
> > -	if (use_cache && ndst)
> > -		ip6_tnl_dst_set(t, ndst);
> > +	if (!fl6->flowi6_mark && ndst)
> > +		dst_cache_set_ip6(&t->dst_cache, ndst, &fl6->saddr);
> >  	skb_dst_set(skb, dst);
> >  
> >  	skb->transport_header = skb->network_header;
> 
> This part looks essentially like a revert of earlier commit befb92542439
> ("ipv6: check skb->protocol before lookup for nexthop", mainline
> 199ab00f3cdb). Is it possible that it comes from an incorrect resolution
> of the conflict caused by these two being backported in opposite order
> (befb92542439 < b8c7f80cbdcd) than the original mainline commits
> (607f725f6f7d < 199ab00f3cdb)?

Hm, I don't really know, it seems to be correct to me...

Manoj, any ideas?  You did this backport.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 031/193] ARM: OMAP2+: Fix SRAM virt to phys translation for save_secure_ram_context
  2018-02-23 18:24 ` [PATCH 4.4 031/193] ARM: OMAP2+: Fix SRAM virt to phys translation for save_secure_ram_context Greg Kroah-Hartman
@ 2018-03-05 23:45   ` Ben Hutchings
  2018-03-13 10:51     ` Greg Kroah-Hartman
  0 siblings, 1 reply; 226+ messages in thread
From: Ben Hutchings @ 2018-03-05 23:45 UTC (permalink / raw)
  To: Greg Kroah-Hartman, linux-kernel; +Cc: stable, Tony Lindgren, Sasha Levin

On Fri, 2018-02-23 at 19:24 +0100, Greg Kroah-Hartman wrote:
> 4.4-stable review patch.  If anyone has any objections, please let me know.
> 
> ------------------
> 
> From: Tony Lindgren <tony@atomide.com>
> 
> 
> [ Upstream commit d09220a887f70368afa79e850c95e74890c0a32d ]
[...]

This apparently breaks the build for some configurations.  Fixed by:

commit 863204cfdae98626a92535ac928ad79f4d6b74ff
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed Dec 6 14:17:17 2017 +0100

    ARM: omap2: hide omap3_save_secure_ram on non-OMAP3 builds

Ben.

-- 
Ben Hutchings
Software Developer, Codethink Ltd.

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 130/193] [media] tc358743: fix register i2c_rd/wr functions
  2018-02-23 18:26 ` [PATCH 4.4 130/193] [media] tc358743: fix register i2c_rd/wr functions Greg Kroah-Hartman
@ 2018-03-06  3:17   ` Ben Hutchings
  2018-03-13 10:50     ` Greg Kroah-Hartman
  0 siblings, 1 reply; 226+ messages in thread
From: Ben Hutchings @ 2018-03-06  3:17 UTC (permalink / raw)
  To: Greg Kroah-Hartman, linux-kernel
  Cc: stable, Arnd Bergmann, Hans Verkuil, Mauro Carvalho Chehab

On Fri, 2018-02-23 at 19:26 +0100, Greg Kroah-Hartman wrote:
> 4.4-stable review patch.  If anyone has any objections, please let me know.
> 
> ------------------
> 
> From: Arnd Bergmann <arnd@arndb.de>
> 
> commit 3538aa6ecfb2dd727a40f9ebbbf25a0c2afe6226 upstream.
[...]

This introduces a regression in i2c_wr8_and_or(), fixed upstream by:

commit f2c61f98e0b5f8b53b8fb860e5dcdd661bde7d0b
Author: Philipp Zabel <p.zabel@pengutronix.de>
Date:   Thu May 4 12:20:17 2017 -0300

    [media] tc358743: fix register i2c_rd/wr function fix

Ben.

-- 
Ben Hutchings
Software Developer, Codethink Ltd.

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 000/193] 4.4.118-stable review
  2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
                   ` (198 preceding siblings ...)
  2018-02-24 17:55 ` Guenter Roeck
@ 2018-03-06  3:23 ` Ben Hutchings
  2018-03-13 10:49   ` Greg Kroah-Hartman
  199 siblings, 1 reply; 226+ messages in thread
From: Ben Hutchings @ 2018-03-06  3:23 UTC (permalink / raw)
  To: Greg Kroah-Hartman, linux-kernel
  Cc: torvalds, akpm, linux, shuahkh, patches, lkft-triage, stable

Patch #132 (which didn't reach the mailing list) was:

> From: Arnd Bergmann <arnd@arndb.de>
> Date: Wed, 26 Oct 2016 15:55:02 -0700
> Subject: Input: tca8418_keypad - hide gcc-4.9 -Wmaybe-uninitialized warning
>
> commit ea4348c8462a20e8b1b6455a7145d2b86f8a49b6 upstream.

This appears to introduce a regression, fixed upstream by:

commit 9dd46c02532a6bed6240101ecf4bbc407f8c6adf
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Mon Feb 13 15:45:59 2017 -0800

    Input: tca8418_keypad - remove double read of key event register

Ben.

-- 
Ben Hutchings
Software Developer, Codethink Ltd.

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 178/193] x86/syscall: Sanitize syscall table de-references under speculation
  2018-02-23 18:26 ` [PATCH 4.4 178/193] x86/syscall: Sanitize syscall table de-references under speculation Greg Kroah-Hartman
@ 2018-03-06 14:21   ` Jiri Slaby
  2018-03-06 16:02     ` Jiri Slaby
  2018-03-06 16:11     ` Jinpu Wang
  0 siblings, 2 replies; 226+ messages in thread
From: Jiri Slaby @ 2018-03-06 14:21 UTC (permalink / raw)
  To: Greg Kroah-Hartman, linux-kernel
  Cc: stable, Linus Torvalds, Dan Williams, Thomas Gleixner,
	linux-arch, kernel-hardening, Andy Lutomirski, alan,
	David Woodhouse, Jack Wang, Jan Beulich

On 02/23/2018, 07:26 PM, Greg Kroah-Hartman wrote:
> 4.4-stable review patch.  If anyone has any objections, please let me know.
> 
> ------------------
> 
> From: Dan Williams <dan.j.williams@intel.com>
> 
> (cherry picked from commit 2fbd7af5af8665d18bcefae3e9700be07e22b681)
> 
> The syscall table base is a user controlled function pointer in kernel
> space. Use array_index_nospec() to prevent any out of bounds speculation.
> 
> While retpoline prevents speculating into a userspace directed target it
> does not stop the pointer de-reference, the concern is leaking memory
> relative to the syscall table base, by observing instruction cache
> behavior.
> 
> Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> Cc: linux-arch@vger.kernel.org
> Cc: kernel-hardening@lists.openwall.com
> Cc: gregkh@linuxfoundation.org
> Cc: Andy Lutomirski <luto@kernel.org>
> Cc: alan@linux.intel.com
> Link: https://lkml.kernel.org/r/151727417984.33451.1216731042505722161.stgit@dwillia2-desk3.amr.corp.intel.com
> Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
> [jwang: port to 4.4, no syscall_64]

This is not complete IMO, the syscall is indeed there, only written in
assembly in 4.4 yet.

So this patch looks like it is missing these two hunks (from my
SLE12-SP2 backport):

> --- a/arch/x86/entry/entry_64.S
> +++ b/arch/x86/entry/entry_64.S
> @@ -184,6 +184,8 @@ entry_SYSCALL_64_fastpath:
>        cmpl    $__NR_syscall_max, %eax
>  #endif
>        ja      1f                              /* return -ENOSYS (already in pt_regs->ax) */
> +      sbb     %rcx, %rcx                      /* array_index_mask_nospec() */
> +      and     %rcx, %rax
>        movq    %r10, %rcx
>  #ifdef CONFIG_RETPOLINE
>        movq    sys_call_table(, %rax, 8), %rax
> @@ -282,6 +284,8 @@ tracesys_phase2:
>        cmpl    $__NR_syscall_max, %eax
>  #endif
>        ja      1f                              /* return -ENOSYS (already in pt_regs->ax) */
> +      sbb     %rcx, %rcx                      /* array_index_mask_nospec() */
> +      and     %rcx, %rax
>        movq    %r10, %rcx                      /* fixup for C */
>  #ifdef CONFIG_RETPOLINE
>        movq    sys_call_table(, %rax, 8), %rax

Discovered by Jan Beulich.

thanks,
-- 
js
suse labs

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 163/193] kasan: rework Kconfig settings
  2018-02-23 18:26 ` [PATCH 4.4 163/193] kasan: rework Kconfig settings Greg Kroah-Hartman
@ 2018-03-06 14:29   ` Ben Hutchings
  2018-03-06 14:33     ` Andrey Ryabinin
  0 siblings, 1 reply; 226+ messages in thread
From: Ben Hutchings @ 2018-03-06 14:29 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Arnd Bergmann
  Cc: Andrey Ryabinin, Mauro Carvalho Chehab, Alexander Potapenko,
	Dmitry Vyukov, Andrey Konovalov, Andrew Morton, Linus Torvalds,
	linux-kernel, stable

On Fri, 2018-02-23 at 19:26 +0100, Greg Kroah-Hartman wrote:
> 4.4-stable review patch.  If anyone has any objections, please let me know.
> 
> ------------------
> 
> From: Arnd Bergmann <arnd@arndb.de>
> 
> commit e7c52b84fb18f08ce49b6067ae6285aca79084a8 upstream.
[...]
> --- a/lib/Kconfig.debug
> +++ b/lib/Kconfig.debug
> @@ -197,7 +197,7 @@ config ENABLE_MUST_CHECK
>  config FRAME_WARN
>  	int "Warn for stack frames larger than (needs gcc 4.4)"
>  	range 0 8192
> -	default 0 if KASAN
> +	default 2048 if GCC_PLUGIN_LATENT_ENTROPY
>  	default 1024 if !64BIT
>  	default 2048 if 64BIT
>  	help

This doesn't make sense for 4.4.  There is no GCC_PLUGIN_LATENT_ENTROPY
in 4.4, and this line wasn't added by the upstream commit.

I think all that was really needed in the backport was to delete the
'default 0', right?

Ben.

-- 
Ben Hutchings
Software Developer, Codethink Ltd.

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 163/193] kasan: rework Kconfig settings
  2018-03-06 14:29   ` Ben Hutchings
@ 2018-03-06 14:33     ` Andrey Ryabinin
  2018-03-06 14:55       ` Arnd Bergmann
  0 siblings, 1 reply; 226+ messages in thread
From: Andrey Ryabinin @ 2018-03-06 14:33 UTC (permalink / raw)
  To: Ben Hutchings, Greg Kroah-Hartman, Arnd Bergmann
  Cc: Mauro Carvalho Chehab, Alexander Potapenko, Dmitry Vyukov,
	Andrey Konovalov, Andrew Morton, Linus Torvalds, linux-kernel,
	stable



On 03/06/2018 05:29 PM, Ben Hutchings wrote:
> On Fri, 2018-02-23 at 19:26 +0100, Greg Kroah-Hartman wrote:
>> 4.4-stable review patch.  If anyone has any objections, please let me know.
>>
>> ------------------
>>
>> From: Arnd Bergmann <arnd@arndb.de>
>>
>> commit e7c52b84fb18f08ce49b6067ae6285aca79084a8 upstream.
> [...]
>> --- a/lib/Kconfig.debug
>> +++ b/lib/Kconfig.debug
>> @@ -197,7 +197,7 @@ config ENABLE_MUST_CHECK
>>  config FRAME_WARN
>>  	int "Warn for stack frames larger than (needs gcc 4.4)"
>>  	range 0 8192
>> -	default 0 if KASAN
>> +	default 2048 if GCC_PLUGIN_LATENT_ENTROPY
>>  	default 1024 if !64BIT
>>   	default 2048 if 64BIT
>>  	help
> 
> This doesn't make sense for 4.4.  There is no GCC_PLUGIN_LATENT_ENTROPY
> in 4.4, and this line wasn't added by the upstream commit.
> 
> I think all that was really needed in the backport was to delete the
> 'default 0', right?
> 

Yep, 'default 0 if KASAN' to be precise. 

> Ben.
> 

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 163/193] kasan: rework Kconfig settings
  2018-03-06 14:33     ` Andrey Ryabinin
@ 2018-03-06 14:55       ` Arnd Bergmann
  0 siblings, 0 replies; 226+ messages in thread
From: Arnd Bergmann @ 2018-03-06 14:55 UTC (permalink / raw)
  To: Andrey Ryabinin
  Cc: Ben Hutchings, Greg Kroah-Hartman, Mauro Carvalho Chehab,
	Alexander Potapenko, Dmitry Vyukov, Andrey Konovalov,
	Andrew Morton, Linus Torvalds, Linux Kernel Mailing List, stable

On Tue, Mar 6, 2018 at 3:33 PM, Andrey Ryabinin <aryabinin@virtuozzo.com> wrote:
>
>
> On 03/06/2018 05:29 PM, Ben Hutchings wrote:
>> On Fri, 2018-02-23 at 19:26 +0100, Greg Kroah-Hartman wrote:
>>> 4.4-stable review patch.  If anyone has any objections, please let me know.
>>>
>>> ------------------
>>>
>>> From: Arnd Bergmann <arnd@arndb.de>
>>>
>>> commit e7c52b84fb18f08ce49b6067ae6285aca79084a8 upstream.
>> [...]
>>> --- a/lib/Kconfig.debug
>>> +++ b/lib/Kconfig.debug
>>> @@ -197,7 +197,7 @@ config ENABLE_MUST_CHECK
>>>  config FRAME_WARN
>>>      int "Warn for stack frames larger than (needs gcc 4.4)"
>>>      range 0 8192
>>> -    default 0 if KASAN
>>> +    default 2048 if GCC_PLUGIN_LATENT_ENTROPY
>>>      default 1024 if !64BIT
>>>      default 2048 if 64BIT
>>>      help
>>
>> This doesn't make sense for 4.4.  There is no GCC_PLUGIN_LATENT_ENTROPY
>> in 4.4, and this line wasn't added by the upstream commit.
>>
>> I think all that was really needed in the backport was to delete the
>> 'default 0', right?
>>
>
> Yep, 'default 0 if KASAN' to be precise.

Right. I sent the correct fix for v4.9, but it must have gotten mangled
during my backport to v4.4. There difference is harmless, as the
extraneous line has no effect on v4.4, but if one of you thinks I
should send a patch to remove that line for consistency, I'll gladly
do that.

        Arnd

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 178/193] x86/syscall: Sanitize syscall table de-references under speculation
  2018-03-06 14:21   ` Jiri Slaby
@ 2018-03-06 16:02     ` Jiri Slaby
  2018-03-06 16:11     ` Jinpu Wang
  1 sibling, 0 replies; 226+ messages in thread
From: Jiri Slaby @ 2018-03-06 16:02 UTC (permalink / raw)
  To: Greg Kroah-Hartman, linux-kernel
  Cc: stable, Linus Torvalds, Dan Williams, Thomas Gleixner,
	linux-arch, kernel-hardening, Andy Lutomirski, alan,
	David Woodhouse, Jack Wang, Jan Beulich

On 03/06/2018, 03:21 PM, Jiri Slaby wrote:
> On 02/23/2018, 07:26 PM, Greg Kroah-Hartman wrote:
>> 4.4-stable review patch.  If anyone has any objections, please let me know.
>>
>> ------------------
>>
>> From: Dan Williams <dan.j.williams@intel.com>
>>
>> (cherry picked from commit 2fbd7af5af8665d18bcefae3e9700be07e22b681)
>>
>> The syscall table base is a user controlled function pointer in kernel
>> space. Use array_index_nospec() to prevent any out of bounds speculation.
>>
>> While retpoline prevents speculating into a userspace directed target it
>> does not stop the pointer de-reference, the concern is leaking memory
>> relative to the syscall table base, by observing instruction cache
>> behavior.
>>
>> Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
>> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
>> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
>> Cc: linux-arch@vger.kernel.org
>> Cc: kernel-hardening@lists.openwall.com
>> Cc: gregkh@linuxfoundation.org
>> Cc: Andy Lutomirski <luto@kernel.org>
>> Cc: alan@linux.intel.com
>> Link: https://lkml.kernel.org/r/151727417984.33451.1216731042505722161.stgit@dwillia2-desk3.amr.corp.intel.com
>> Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
>> [jwang: port to 4.4, no syscall_64]
> 
> This is not complete IMO, the syscall is indeed there, only written in
> assembly in 4.4 yet.
> 
> So this patch looks like it is missing these two hunks (from my
> SLE12-SP2 backport):
> 
>> --- a/arch/x86/entry/entry_64.S
>> +++ b/arch/x86/entry/entry_64.S
>> @@ -184,6 +184,8 @@ entry_SYSCALL_64_fastpath:
>>        cmpl    $__NR_syscall_max, %eax
>>  #endif
>>        ja      1f                              /* return -ENOSYS (already in pt_regs->ax) */
>> +      sbb     %rcx, %rcx                      /* array_index_mask_nospec() */
>> +      and     %rcx, %rax

Which is not completely correct either. The preceding comparison should
write:
    cmpl    $NR_syscalls, %eax
    jae     1f
to have sbb correctly working even on the last syscall number.

thanks,
-- 
js
suse labs

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 178/193] x86/syscall: Sanitize syscall table de-references under speculation
  2018-03-06 14:21   ` Jiri Slaby
  2018-03-06 16:02     ` Jiri Slaby
@ 2018-03-06 16:11     ` Jinpu Wang
  1 sibling, 0 replies; 226+ messages in thread
From: Jinpu Wang @ 2018-03-06 16:11 UTC (permalink / raw)
  To: Jiri Slaby
  Cc: Greg Kroah-Hartman, linux-kernel, stable, Linus Torvalds,
	Dan Williams, Thomas Gleixner, linux-arch, kernel-hardening,
	Andy Lutomirski, alan, David Woodhouse, Jan Beulich

On Tue, Mar 6, 2018 at 3:21 PM, Jiri Slaby <jslaby@suse.cz> wrote:
> On 02/23/2018, 07:26 PM, Greg Kroah-Hartman wrote:
>> 4.4-stable review patch.  If anyone has any objections, please let me know.
>>
>> ------------------
>>
>> From: Dan Williams <dan.j.williams@intel.com>
>>
>> (cherry picked from commit 2fbd7af5af8665d18bcefae3e9700be07e22b681)
>>
>> The syscall table base is a user controlled function pointer in kernel
>> space. Use array_index_nospec() to prevent any out of bounds speculation.
>>
>> While retpoline prevents speculating into a userspace directed target it
>> does not stop the pointer de-reference, the concern is leaking memory
>> relative to the syscall table base, by observing instruction cache
>> behavior.
>>
>> Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
>> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
>> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
>> Cc: linux-arch@vger.kernel.org
>> Cc: kernel-hardening@lists.openwall.com
>> Cc: gregkh@linuxfoundation.org
>> Cc: Andy Lutomirski <luto@kernel.org>
>> Cc: alan@linux.intel.com
>> Link: https://lkml.kernel.org/r/151727417984.33451.1216731042505722161.stgit@dwillia2-desk3.amr.corp.intel.com
>> Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
>> [jwang: port to 4.4, no syscall_64]
>
> This is not complete IMO, the syscall is indeed there, only written in
> assembly in 4.4 yet.
>
> So this patch looks like it is missing these two hunks (from my
> SLE12-SP2 backport):
>
>> --- a/arch/x86/entry/entry_64.S
>> +++ b/arch/x86/entry/entry_64.S
>> @@ -184,6 +184,8 @@ entry_SYSCALL_64_fastpath:
>>        cmpl    $__NR_syscall_max, %eax
>>  #endif
>>        ja      1f                              /* return -ENOSYS (already in pt_regs->ax) */
>> +      sbb     %rcx, %rcx                      /* array_index_mask_nospec() */
>> +      and     %rcx, %rax
>>        movq    %r10, %rcx
>>  #ifdef CONFIG_RETPOLINE
>>        movq    sys_call_table(, %rax, 8), %rax
>> @@ -282,6 +284,8 @@ tracesys_phase2:
>>        cmpl    $__NR_syscall_max, %eax
>>  #endif
>>        ja      1f                              /* return -ENOSYS (already in pt_regs->ax) */
>> +      sbb     %rcx, %rcx                      /* array_index_mask_nospec() */
>> +      and     %rcx, %rax
>>        movq    %r10, %rcx                      /* fixup for C */
>>  #ifdef CONFIG_RETPOLINE
>>        movq    sys_call_table(, %rax, 8), %rax
>
> Discovered by Jan Beulich.
>
> thanks,
> --
> js
> suse labs

Thanks Jiri, yes, indeed, could you send a formal patch of the fix?

Thanks!
Jack Wang

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 000/193] 4.4.118-stable review
  2018-03-06  3:23 ` Ben Hutchings
@ 2018-03-13 10:49   ` Greg Kroah-Hartman
  0 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-03-13 10:49 UTC (permalink / raw)
  To: Ben Hutchings
  Cc: linux-kernel, torvalds, akpm, linux, shuahkh, patches,
	lkft-triage, stable

On Tue, Mar 06, 2018 at 03:23:25AM +0000, Ben Hutchings wrote:
> Patch #132 (which didn't reach the mailing list) was:
> 
> > From: Arnd Bergmann <arnd@arndb.de>
> > Date: Wed, 26 Oct 2016 15:55:02 -0700
> > Subject: Input: tca8418_keypad - hide gcc-4.9 -Wmaybe-uninitialized warning
> >
> > commit ea4348c8462a20e8b1b6455a7145d2b86f8a49b6 upstream.
> 
> This appears to introduce a regression, fixed upstream by:
> 
> commit 9dd46c02532a6bed6240101ecf4bbc407f8c6adf
> Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Date:   Mon Feb 13 15:45:59 2017 -0800
> 
>     Input: tca8418_keypad - remove double read of key event register

Good catch, thanks!

greg k-h

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 130/193] [media] tc358743: fix register i2c_rd/wr functions
  2018-03-06  3:17   ` Ben Hutchings
@ 2018-03-13 10:50     ` Greg Kroah-Hartman
  0 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-03-13 10:50 UTC (permalink / raw)
  To: Ben Hutchings
  Cc: linux-kernel, stable, Arnd Bergmann, Hans Verkuil, Mauro Carvalho Chehab

On Tue, Mar 06, 2018 at 03:17:33AM +0000, Ben Hutchings wrote:
> On Fri, 2018-02-23 at 19:26 +0100, Greg Kroah-Hartman wrote:
> > 4.4-stable review patch.  If anyone has any objections, please let me know.
> > 
> > ------------------
> > 
> > From: Arnd Bergmann <arnd@arndb.de>
> > 
> > commit 3538aa6ecfb2dd727a40f9ebbbf25a0c2afe6226 upstream.
> [...]
> 
> This introduces a regression in i2c_wr8_and_or(), fixed upstream by:
> 
> commit f2c61f98e0b5f8b53b8fb860e5dcdd661bde7d0b
> Author: Philipp Zabel <p.zabel@pengutronix.de>
> Date:   Thu May 4 12:20:17 2017 -0300
> 
>     [media] tc358743: fix register i2c_rd/wr function fix

Now queued up, thanks.

greg k-h

^ permalink raw reply	[flat|nested] 226+ messages in thread

* Re: [PATCH 4.4 031/193] ARM: OMAP2+: Fix SRAM virt to phys translation for save_secure_ram_context
  2018-03-05 23:45   ` Ben Hutchings
@ 2018-03-13 10:51     ` Greg Kroah-Hartman
  0 siblings, 0 replies; 226+ messages in thread
From: Greg Kroah-Hartman @ 2018-03-13 10:51 UTC (permalink / raw)
  To: Ben Hutchings; +Cc: linux-kernel, stable, Tony Lindgren, Sasha Levin

On Mon, Mar 05, 2018 at 11:45:51PM +0000, Ben Hutchings wrote:
> On Fri, 2018-02-23 at 19:24 +0100, Greg Kroah-Hartman wrote:
> > 4.4-stable review patch.  If anyone has any objections, please let me know.
> > 
> > ------------------
> > 
> > From: Tony Lindgren <tony@atomide.com>
> > 
> > 
> > [ Upstream commit d09220a887f70368afa79e850c95e74890c0a32d ]
> [...]
> 
> This apparently breaks the build for some configurations.  Fixed by:
> 
> commit 863204cfdae98626a92535ac928ad79f4d6b74ff
> Author: Arnd Bergmann <arnd@arndb.de>
> Date:   Wed Dec 6 14:17:17 2017 +0100
> 
>     ARM: omap2: hide omap3_save_secure_ram on non-OMAP3 builds

Just queued it up, thanks.

greg k-h

^ permalink raw reply	[flat|nested] 226+ messages in thread

end of thread, other threads:[~2018-03-13 10:51 UTC | newest]

Thread overview: 226+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-23 18:23 [PATCH 4.4 000/193] 4.4.118-stable review Greg Kroah-Hartman
2018-02-23 18:23 ` [PATCH 4.4 001/193] net: add dst_cache support Greg Kroah-Hartman
2018-02-23 18:23 ` [PATCH 4.4 002/193] net: replace dst_cache ip6_tunnel implementation with the generic one Greg Kroah-Hartman
2018-02-23 23:00   ` Nathan Chancellor
2018-02-24  8:35     ` Greg Kroah-Hartman
2018-02-24 15:37       ` Nathan Chancellor
2018-02-26 12:59     ` Greg Kroah-Hartman
2018-02-26 16:03       ` Nathan Chancellor
2018-02-27  8:05   ` Michal Kubecek
2018-02-27 13:11     ` Greg Kroah-Hartman
2018-02-23 18:23 ` [PATCH 4.4 003/193] cfg80211: check dev_set_name() return value Greg Kroah-Hartman
2018-02-23 18:23 ` [PATCH 4.4 004/193] mm,vmscan: Make unregister_shrinker() no-op if register_shrinker() failed Greg Kroah-Hartman
2018-02-23 18:23 ` [PATCH 4.4 005/193] xfrm: Fix stack-out-of-bounds read on socket policy lookup Greg Kroah-Hartman
2018-02-23 18:23 ` [PATCH 4.4 006/193] xfrm: check id proto in validate_tmpl() Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 007/193] blktrace: fix unlocked registration of tracepoints Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 008/193] drm: Require __GFP_NOFAIL for the legacy drm_modeset_lock_all Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 009/193] Provide a function to create a NUL-terminated string from unterminated data Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 010/193] selinux: ensure the context is NUL terminated in security_context_to_sid_core() Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 011/193] selinux: skip bounded transition processing if the policy isnt loaded Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 012/193] crypto: x86/twofish-3way - Fix %rbp usage Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 013/193] staging: android: ion: Add __GFP_NOWARN for system contig heap Greg Kroah-Hartman
2018-02-23 20:46   ` Nathan Chancellor
2018-02-24  8:26     ` Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 014/193] KVM: x86: fix escape of guest dr6 to the host Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 015/193] netfilter: x_tables: fix int overflow in xt_alloc_table_info() Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 016/193] netfilter: x_tables: avoid out-of-bounds reads in xt_request_find_{match|target} Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 017/193] netfilter: ipt_CLUSTERIP: fix out-of-bounds accesses in clusterip_tg_check() Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 018/193] netfilter: on sockopt() acquire sock lock only in the required scope Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 019/193] netfilter: xt_RATEEST: acquire xt_rateest_mutex for hash insert Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 020/193] net: avoid skb_warn_bad_offload on IS_ERR Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 021/193] ASoC: ux500: add MODULE_LICENSE tag Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 022/193] video: fbdev/mmp: add MODULE_LICENSE Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 023/193] arm64: dts: add #cooling-cells to CPU nodes Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 024/193] Make DST_CACHE a silent config option Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 025/193] dn_getsockoptdecnet: move nf_{get/set}sockopt outside sock lock Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 026/193] staging: android: ashmem: Fix a race condition in pin ioctls Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 027/193] binder: check for binder_thread allocation failure in binder_poll() Greg Kroah-Hartman
2018-02-26 17:21   ` [4.4, " Guenter Roeck
2018-02-26 18:57     ` Eric Biggers
2018-02-26 19:05       ` Guenter Roeck
2018-02-23 18:24 ` [PATCH 4.4 028/193] staging: iio: adc: ad7192: fix external frequency setting Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 029/193] usbip: keep usbip_device sockfd state in sync with tcp_socket Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 030/193] usb: build drivers/usb/common/ when USB_SUPPORT is set Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 031/193] ARM: OMAP2+: Fix SRAM virt to phys translation for save_secure_ram_context Greg Kroah-Hartman
2018-03-05 23:45   ` Ben Hutchings
2018-03-13 10:51     ` Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 032/193] ARM: AM33xx: PRM: Remove am33xx_pwrdm_read_prev_pwrst function Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 033/193] ARM: dts: Fix omap4 hang with GPS connected to USB by using wakeupgen Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 034/193] ARM: dts: am4372: Correct the interrupts_properties of McASP Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 035/193] perf top: Fix window dimensions change handling Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 036/193] perf bench numa: Fixup discontiguous/sparse numa nodes Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 037/193] media: s5k6aa: describe some function parameters Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 038/193] pinctrl: sunxi: Fix A80 interrupt pin bank Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 039/193] RDMA/cma: Make sure that PSN is not over max allowed Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 040/193] scripts/kernel-doc: Dont fail with status != 0 if error encountered with -none Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 041/193] ipvlan: Add the skb->mark as flow4s member to lookup route Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 042/193] m68k: add missing SOFTIRQENTRY_TEXT linker section Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 043/193] powerpc/perf: Fix oops when grouping different pmu events Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 044/193] s390/dasd: prevent prefix I/O error Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 045/193] gianfar: fix a flooded alignment reports because of padding issue Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 046/193] net_sched: red: Avoid devision by zero Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 047/193] net_sched: red: Avoid illegal values Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 048/193] btrfs: Fix possible off-by-one in btrfs_search_path_in_tree Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 049/193] 509: fix printing uninitialized stack memory when OID is empty Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 050/193] dmaengine: ioat: Fix error handling path Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 051/193] dmaengine: at_hdmac: fix potential NULL pointer dereference in atc_prep_dma_interleaved Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 052/193] clk: fix a panic error caused by accessing NULL pointer Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 053/193] ASoC: rockchip: disable clock on error Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 054/193] spi: sun4i: disable clocks in the remove function Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 055/193] xfrm: Fix stack-out-of-bounds with misconfigured transport mode policies Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 056/193] drm/armada: fix leak of crtc structure Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 057/193] dmaengine: jz4740: disable/unprepare clk if probe fails Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 058/193] mm/early_ioremap: Fix boot hang with earlyprintk=efi,keep Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 059/193] x86/mm/kmmio: Fix mmiotrace for page unaligned addresses Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 060/193] xen: XEN_ACPI_PROCESSOR is Dom0-only Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 061/193] hippi: Fix a Fix a possible sleep-in-atomic bug in rr_close Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 062/193] virtio_balloon: prevent uninitialized variable use Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 063/193] isdn: icn: remove a #warning Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 064/193] vmxnet3: prevent building with 64K pages Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 065/193] gpio: intel-mid: Fix build warning when !CONFIG_PM Greg Kroah-Hartman
2018-02-23 18:24 ` [PATCH 4.4 066/193] platform/x86: intel_mid_thermal: Fix suspend handlers unused warning Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 067/193] video: fbdev: via: remove possibly unused variables Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 068/193] scsi: advansys: fix build warning for PCI=n Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 069/193] x86/ras/inject: Make it depend on X86_LOCAL_APIC=y Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 070/193] arm64: define BUG() instruction without CONFIG_BUG Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 071/193] x86/fpu/math-emu: Fix possible uninitialized variable use Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 072/193] tools build: Add tools tree support for make -s Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 073/193] x86/build: Silence the build with "make -s" Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 074/193] thermal: fix INTEL_SOC_DTS_IOSF_CORE dependencies Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 075/193] x86: add MULTIUSER dependency for KVM Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 076/193] x86/platform: Add PCI dependency for PUNIT_ATOM_DEBUG Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 077/193] scsi: advansys: fix uninitialized data access Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 078/193] arm64: Kconfig: select COMPAT_BINFMT_ELF only when BINFMT_ELF is set Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 079/193] ALSA: hda/ca0132 - fix possible NULL pointer use Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 080/193] reiserfs: avoid a -Wmaybe-uninitialized warning Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 081/193] ssb: mark ssb_bus_register as __maybe_unused Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 082/193] thermal: spear: use __maybe_unused for PM functions Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 083/193] x86/boot: Avoid warning for zero-filling .bss Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 084/193] scsi: sim710: fix build warning Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 085/193] drivers/net: fix eisa_driver probe section mismatch Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 086/193] dpt_i2o: fix build warning Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 087/193] profile: hide unused functions when !CONFIG_PROC_FS Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 088/193] md: avoid warning for 32-bit sector_t Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 089/193] mtd: ichxrom: maybe-uninitialized with gcc-4.9 Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 090/193] mtd: maps: add __init attribute Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 091/193] mptfusion: hide unused seq_mpt_print_ioc_summary function Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 092/193] scsi: fdomain: drop fdomain_pci_tbl when built-in Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 093/193] video: fbdev: sis: remove unused variable Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 094/193] staging: ste_rmi4: avoid unused function warnings Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 095/193] fbdev: sis: enforce selection of at least one backend Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 096/193] video: Use bool instead int pointer for get_opt_bool() argument Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 097/193] scsi: mvumi: use __maybe_unused to hide pm functions Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 098/193] SCSI: initio: remove duplicate module device table Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 099/193] [media] pwc: hide unused label Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 100/193] usb: musb/ux500: remove duplicate check for dma_is_compatible Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 101/193] tty: hvc_xen: hide xen_console_remove when unused Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 102/193] target/user: Fix cast from pointer to phys_addr_t Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 103/193] driver-core: use dev argument in dev_dbg_ratelimited stub Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 104/193] fbdev: auo_k190x: avoid unused function warnings Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 105/193] amd-xgbe: Fix unused suspend handlers build warning Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 106/193] mtd: sh_flctl: pass FIFO as physical address Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 107/193] mtd: cfi: enforce valid geometry configuration Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 108/193] fbdev: s6e8ax0: avoid unused function warnings Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 109/193] modsign: hide openssl output in silent builds Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 110/193] Drivers: hv: vmbus: fix build warning Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 111/193] fbdev: sm712fb: avoid unused function warnings Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 112/193] hwrng: exynos - use __maybe_unused to hide pm functions Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 113/193] USB: cdc_subset: only build when one driver is enabled Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 114/193] rtlwifi: fix gcc-6 indentation warning Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 115/193] staging: wilc1000: fix kbuild test robot error Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 116/193] x86/platform/olpc: Fix resume handler build warning Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 117/193] netfilter: ipvs: avoid unused variable warnings Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 118/193] ipv4: ipconfig: avoid unused ic_proto_used symbol Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 119/193] tc1100-wmi: fix build warning when CONFIG_PM not enabled Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 120/193] tlan: avoid unused label with PCI=n Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 121/193] drm/vmwgfx: use *_32_bits() macros Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 122/193] tty: cyclades: cyz_interrupt is only used for PCI Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 123/193] genirq/msi: Add stubs for get_cached_msi_msg/pci_write_msi_msg Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 124/193] ASoC: mediatek: add i2c dependency Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 125/193] iio: adc: axp288: remove redundant duplicate const on axp288_adc_channels Greg Kroah-Hartman
2018-02-23 18:25 ` [PATCH 4.4 126/193] infiniband: cxgb4: use %pR format string for printing resources Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 127/193] [media] b2c2: flexcop: avoid unused function warnings Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 128/193] i2c: remove __init from i2c_register_board_info() Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 129/193] staging: unisys: visorinput depends on INPUT Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 130/193] [media] tc358743: fix register i2c_rd/wr functions Greg Kroah-Hartman
2018-03-06  3:17   ` Ben Hutchings
2018-03-13 10:50     ` Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 131/193] drm/nouveau: hide gcc-4.9 -Wmaybe-uninitialized Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 132/193] Input: tca8418_keypad - hide gcc-4.9 -Wmaybe-uninitialized warning Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 133/193] KVM: add X86_LOCAL_APIC dependency Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 134/193] [media] go7007: add MEDIA_CAMERA_SUPPORT dependency Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 135/193] [media] em28xx: only use mt9v011 if camera support is enabled Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 136/193] ISDN: eicon: reduce stack size of sig_ind function Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 137/193] ASoC: rockchip: use __maybe_unused to hide st_irq_syscfg_resume Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 138/193] serial: 8250_mid: fix broken DMA dependency Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 139/193] drm/gma500: Sanity-check pipe index Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 140/193] [media] hdpvr: hide unused variable Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 141/193] [media] v4l: remove MEDIA_TUNER dependency for VIDEO_TUNER Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 142/193] cw1200: fix bogus maybe-uninitialized warning Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 143/193] wireless: cw1200: use __maybe_unused to hide pm functions_ Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 144/193] perf/x86: Shut up false-positive -Wmaybe-uninitialized warning Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 145/193] dmaengine: zx: fix build warning Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 146/193] net: hp100: remove unnecessary #ifdefs Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 147/193] gpio: xgene: mark PM functions as __maybe_unused Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 148/193] ncpfs: fix unused variable warning Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 149/193] Revert "power: bq27xxx_battery: Remove unneeded dependency in Kconfig" Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 150/193] power: bq27xxx_battery: mark some symbols __maybe_unused Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 151/193] isdn: sc: work around type mismatch warning Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 152/193] binfmt_elf: compat: avoid unused function warning Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 153/193] idle: i7300: add PCI dependency Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 154/193] usb: phy: msm add regulator dependency Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 155/193] ncr5380: shut up gcc indentation warning Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 156/193] ARM: tegra: select USB_ULPI from EHCI rather than platform Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 157/193] ASoC: Intel: Kconfig: fix build when ACPI is not enabled Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 158/193] netlink: fix nla_put_{u8,u16,u32} for KASAN Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 159/193] dell-wmi, dell-laptop: depends DMI Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 160/193] genksyms: Fix segfault with invalid declarations Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 161/193] x86/microcode/AMD: Change load_microcode_amd()s param to bool to fix preemptibility bug Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 162/193] drm/gma500: remove helper function Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 163/193] kasan: rework Kconfig settings Greg Kroah-Hartman
2018-03-06 14:29   ` Ben Hutchings
2018-03-06 14:33     ` Andrey Ryabinin
2018-03-06 14:55       ` Arnd Bergmann
2018-02-23 18:26 ` [PATCH 4.4 164/193] KVM: async_pf: Fix #DF due to inject "Page not Present" and "Page Ready" exceptions simultaneously Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 165/193] x86/retpoline: Remove the esp/rsp thunk Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 166/193] KVM: x86: Make indirect calls in emulator speculation safe Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 167/193] KVM: VMX: Make indirect call " Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 168/193] module/retpoline: Warn about missing retpoline in module Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 169/193] x86/nospec: Fix header guards names Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 170/193] x86/bugs: Drop one "mitigation" from dmesg Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 171/193] x86/cpu/bugs: Make retpoline module warning conditional Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 172/193] x86/spectre: Check CONFIG_RETPOLINE in command line parser Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 173/193] Documentation: Document array_index_nospec Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 174/193] array_index_nospec: Sanitize speculative array de-references Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 175/193] x86: Implement array_index_mask_nospec Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 176/193] x86: Introduce barrier_nospec Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 177/193] x86/get_user: Use pointer masking to limit speculation Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 178/193] x86/syscall: Sanitize syscall table de-references under speculation Greg Kroah-Hartman
2018-03-06 14:21   ` Jiri Slaby
2018-03-06 16:02     ` Jiri Slaby
2018-03-06 16:11     ` Jinpu Wang
2018-02-23 18:26 ` [PATCH 4.4 179/193] vfs, fdtable: Prevent bounds-check bypass via speculative execution Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 180/193] nl80211: Sanitize array index in parse_txq_params Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 181/193] x86/spectre: Report get_user mitigation for spectre_v1 Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 182/193] x86/spectre: Fix spelling mistake: "vunerable"-> "vulnerable" Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 183/193] x86/paravirt: Remove noreplace-paravirt cmdline option Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 184/193] x86/kvm: Update spectre-v1 mitigation Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 185/193] x86/retpoline: Avoid retpolines for built-in __init functions Greg Kroah-Hartman
2018-02-23 18:26 ` [PATCH 4.4 186/193] x86/spectre: Simplify spectre_v2 command line parsing Greg Kroah-Hartman
2018-02-23 18:27 ` [PATCH 4.4 187/193] x86/speculation: Fix typo IBRS_ATT, which should be IBRS_ALL Greg Kroah-Hartman
2018-02-23 18:27 ` [PATCH 4.4 188/193] KVM: nVMX: kmap() cant fail Greg Kroah-Hartman
2018-02-23 18:27 ` [PATCH 4.4 189/193] KVM: nVMX: vmx_complete_nested_posted_interrupt() " Greg Kroah-Hartman
2018-02-23 18:27 ` [PATCH 4.4 190/193] kvm: nVMX: Fix kernel panics induced by illegal INVEPT/INVVPID types Greg Kroah-Hartman
2018-02-23 18:27 ` [PATCH 4.4 191/193] KVM: VMX: clean up declaration of VPID/EPT invalidation types Greg Kroah-Hartman
2018-02-23 18:27 ` [PATCH 4.4 192/193] KVM: nVMX: invvpid handling improvements Greg Kroah-Hartman
2018-02-23 18:27 ` [PATCH 4.4 193/193] crypto: s5p-sss - Fix kernel Oops in AES-ECB mode Greg Kroah-Hartman
2018-02-23 22:37 ` [PATCH 4.4 000/193] 4.4.118-stable review kernelci.org bot
2018-02-23 23:13 ` Nathan Chancellor
2018-02-24  8:34   ` Greg Kroah-Hartman
2018-02-23 23:42 ` Dan Rue
2018-02-24  0:40 ` Shuah Khan
2018-02-24 11:11 ` Guenter Roeck
2018-02-24 11:18   ` Greg Kroah-Hartman
2018-02-24 17:55 ` Guenter Roeck
2018-03-06  3:23 ` Ben Hutchings
2018-03-13 10:49   ` Greg Kroah-Hartman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).