16 May, 2018

1 commit

  • Starting from the commit 0d0443288f22 the new function has been
    introduced which takes struct task_struct as a parameter. Though,
    compiler doesn't know where to get information about it at this stage.

    Add missed declaration of struct task_struct to satisfy compiler.

    Fixes: 0d0443288f22 ("string_helpers: add kstrdup_quotable_cmdline")
    Cc: Kees Cook
    Cc: James Morris
    Signed-off-by: Andy Shevchenko
    Acked-by: Kees Cook

    Andy Shevchenko
     

13 May, 2018

3 commits


07 May, 2018

3 commits


25 Apr, 2018

1 commit


23 Apr, 2018

5 commits

  • As reported by Randy Dunlap:
    >> WARNING: unmet direct dependencies detected for DELL_SMBIOS
    >> Depends on [m]: X86 [=y] && X86_PLATFORM_DEVICES [=y]
    >> && (DCDBAS [=m] ||
    >> DCDBAS [=m]=n) && (ACPI_WMI [=n] || ACPI_WMI [=n]=n)
    >> Selected by [y]:
    >> - DELL_LAPTOP [=y] && X86 [=y] && X86_PLATFORM_DEVICES [=y]
    >> && DMI [=y]
    >> && BACKLIGHT_CLASS_DEVICE [=y] && (ACPI_VIDEO [=n] ||
    >> ACPI_VIDEO [=n]=n)
    >> && (RFKILL [=n] || RFKILL [=n]=n) && SERIO_I8042 [=y]
    >>

    Right now it's possible to set dell laptop to compile in but this
    causes dell-smbios to compile in which breaks if dcdbas is a module.

    Dell laptop shouldn't select dell-smbios anymore, but depend on it.

    Fixes: 32d7b19bad96 (platform/x86: dell-smbios: Resolve dependency error on DCDBAS)
    Reported-by: Randy Dunlap
    Signed-off-by: Mario Limonciello
    Cc: stable@vger.kernel.org
    Signed-off-by: Darren Hart (VMware)

    Mario Limonciello
     
  • We should get drvdata from struct device directly. Going via
    platform_device is an unneeded step back and forth.

    Signed-off-by: Wolfram Sang
    Signed-off-by: Darren Hart (VMware)

    Wolfram Sang
     
  • When the module is removed the led workqueue is destroyed in the remove
    callback, before the led device is unregistered from the led subsystem.

    This leads to a NULL pointer derefence when the led device is
    unregistered automatically later as part of the module removal cleanup.
    Bellow is the backtrace showing the problem.

    BUG: unable to handle kernel NULL pointer dereference at (null)
    IP: __queue_work+0x8c/0x410
    PGD 0 P4D 0
    Oops: 0000 [#1] SMP NOPTI
    Modules linked in: ccm edac_mce_amd kvm_amd kvm irqbypass crct10dif_pclmul crc32_pclmul ghash_clmulni_intel pcbc aesni_intel aes_x86_64 joydev crypto_simd asus_nb_wmi glue_helper uvcvideo snd_hda_codec_conexant snd_hda_codec_generic snd_hda_codec_hdmi snd_hda_intel asus_wmi snd_hda_codec cryptd snd_hda_core sparse_keymap videobuf2_vmalloc arc4 videobuf2_memops snd_hwdep input_leds videobuf2_v4l2 ath9k psmouse videobuf2_core videodev ath9k_common snd_pcm ath9k_hw media fam15h_power ath k10temp snd_timer mac80211 i2c_piix4 r8169 mii mac_hid cfg80211 asus_wireless(-) snd soundcore wmi shpchp 8250_dw ip_tables x_tables amdkfd amd_iommu_v2 amdgpu radeon chash i2c_algo_bit drm_kms_helper syscopyarea serio_raw sysfillrect sysimgblt fb_sys_fops ahci ttm libahci drm video
    CPU: 3 PID: 2177 Comm: rmmod Not tainted 4.15.0-5-generic #6+dev94.b4287e5bem1-Endless
    Hardware name: ASUSTeK COMPUTER INC. X555DG/X555DG, BIOS 5.011 05/05/2015
    RIP: 0010:__queue_work+0x8c/0x410
    RSP: 0018:ffffbe8cc249fcd8 EFLAGS: 00010086
    RAX: ffff992ac6810800 RBX: 0000000000000000 RCX: 0000000000000008
    RDX: 0000000000000000 RSI: 0000000000000008 RDI: ffff992ac6400e18
    RBP: ffffbe8cc249fd18 R08: ffff992ac6400db0 R09: 0000000000000000
    R10: 0000000000000040 R11: ffff992ac6400dd8 R12: 0000000000002000
    R13: ffff992abd762e00 R14: ffff992abd763e38 R15: 000000000001ebe0
    FS: 00007f318203e700(0000) GS:ffff992aced80000(0000) knlGS:0000000000000000
    CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000000 CR3: 00000001c720e000 CR4: 00000000001406e0
    Call Trace:
    queue_work_on+0x38/0x40
    led_state_set+0x2c/0x40 [asus_wireless]
    led_set_brightness_nopm+0x14/0x40
    led_set_brightness+0x37/0x60
    led_trigger_set+0xfc/0x1d0
    led_classdev_unregister+0x32/0xd0
    devm_led_classdev_release+0x11/0x20
    release_nodes+0x109/0x1f0
    devres_release_all+0x3c/0x50
    device_release_driver_internal+0x16d/0x220
    driver_detach+0x3f/0x80
    bus_remove_driver+0x55/0xd0
    driver_unregister+0x2c/0x40
    acpi_bus_unregister_driver+0x15/0x20
    asus_wireless_driver_exit+0x10/0xb7c [asus_wireless]
    SyS_delete_module+0x1da/0x2b0
    entry_SYSCALL_64_fastpath+0x24/0x87
    RIP: 0033:0x7f3181b65fd7
    RSP: 002b:00007ffe74bcbe18 EFLAGS: 00000206 ORIG_RAX: 00000000000000b0
    RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f3181b65fd7
    RDX: 000000000000000a RSI: 0000000000000800 RDI: 0000555ea2559258
    RBP: 0000555ea25591f0 R08: 00007ffe74bcad91 R09: 000000000000000a
    R10: 0000000000000000 R11: 0000000000000206 R12: 0000000000000003
    R13: 00007ffe74bcae00 R14: 0000000000000000 R15: 0000555ea25591f0
    Code: 01 00 00 02 0f 85 7d 01 00 00 48 63 45 d4 48 c7 c6 00 f4 fa 87 49 8b 9d 08 01 00 00 48 03 1c c6 4c 89 f7 e8 87 fb ff ff 48 85 c0 8b 3b 0f 84 c5 01 00 00 48 39 f8 0f 84 bc 01 00 00 48 89 c7
    RIP: __queue_work+0x8c/0x410 RSP: ffffbe8cc249fcd8
    CR2: 0000000000000000
    ---[ end trace 7aa4f4a232e9c39c ]---

    Unregistering the led device on the remove callback before destroying the
    workqueue avoids this problem.

    https://bugzilla.kernel.org/show_bug.cgi?id=196097

    Reported-by: Dun Hum
    Cc: stable@vger.kernel.org
    Signed-off-by: João Paulo Rechi Vita
    Signed-off-by: Darren Hart (VMware)

    João Paulo Rechi Vita
     
  • Sergey reported that some much older Dell systems don't support
    the OEM string "Dell System" but instead supported www.dell.com
    in OEM strings.

    Match both of these to indicate that this driver is running on
    a Dell system.

    Reported-by: Sergey Kubushyn
    Tested-by: Sergey Kubushyn
    Signed-off-by: Mario Limonciello
    [dvhart: Simplify DMI logic and eliminate unnecessary variables]
    Signed-off-by: Darren Hart (VMware)

    Mario Limonciello
     
  • intel_scu_ipc_i2c_cntrl() calls mutex_lock(), which indicates
    this function is not called in atomic context.

    Despite never getting called from atomic context,
    intel_scu_ipc_i2c_cntrl() calls mdelay to busily wait.
    This is not necessary and can be replaced with usleep_range to
    avoid busy waiting.

    This is found by a static analysis tool named DCNS written by myself.
    And I also manually check it.

    Signed-off-by: Jia-Ju Bai
    Signed-off-by: Andy Shevchenko

    Jia-Ju Bai
     

20 Apr, 2018

1 commit

  • The hardcoded BIT(X) used in the soft key handling can be confusing and
    prone to errors.

    Instead, use the status FLAG_* defines for the sparse keymap index.
    Rather than check for each known bit, use a bitmask to filter for all
    known soft keys, and use the for_each_set_bit iterator.

    Cc: Jan-Marek Glogowski
    Cc: Michał Kępień
    Reviewed-by: Jonathan Woithe
    Signed-off-by: Darren Hart (VMware)

    Darren Hart (VMware)
     

16 Apr, 2018

13 commits

  • Linus Torvalds
     
  • Pull more btrfs updates from David Sterba:
    "We have queued a few more fixes (error handling, log replay,
    softlockup) and the rest is SPDX updates that touche almost all files
    so the diffstat is long"

    * tag 'for-4.17-part2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux:
    btrfs: Only check first key for committed tree blocks
    btrfs: add SPDX header to Kconfig
    btrfs: replace GPL boilerplate by SPDX -- sources
    btrfs: replace GPL boilerplate by SPDX -- headers
    Btrfs: fix loss of prealloc extents past i_size after fsync log replay
    Btrfs: clean up resources during umount after trans is aborted
    btrfs: Fix possible softlock on single core machines
    Btrfs: bail out on error during replay_dir_deletes
    Btrfs: fix NULL pointer dereference in log_dir_items

    Linus Torvalds
     
  • Pull cifs fixes from Steve French:
    "SMB3 fixes, a few for stable, and some important cleanup work from
    Ronnie of the smb3 transport code"

    * tag '4.17-rc1SMB3-Fixes' of git://git.samba.org/sfrench/cifs-2.6:
    cifs: change validate_buf to validate_iov
    cifs: remove rfc1002 hardcoded constants from cifs_discard_remaining_data()
    cifs: Change SMB2_open to return an iov for the error parameter
    cifs: add resp_buf_size to the mid_q_entry structure
    smb3.11: replace a 4 with server->vals->header_preamble_size
    cifs: replace a 4 with server->vals->header_preamble_size
    cifs: add pdu_size to the TCP_Server_Info structure
    SMB311: Improve checking of negotiate security contexts
    SMB3: Fix length checking of SMB3.11 negotiate request
    CIFS: add ONCE flag for cifs_dbg type
    cifs: Use ULL suffix for 64-bit constant
    SMB3: Log at least once if tree connect fails during reconnect
    cifs: smb2pdu: Fix potential NULL pointer dereference

    Linus Torvalds
     
  • Pull SCSI fixes from James Bottomley:
    "This is a set of minor (and safe changes) that didn't make the initial
    pull request plus some bug fixes.

    The status handling code is actually a running regression from the
    previous merge window which had an incomplete fix (now reverted) and
    most of the remaining bug fixes are for problems older than the
    current merge window"

    [ Side note: this merge also takes the base kernel git repository to 6+
    million objects for the first time. Technically we hit it a couple of
    merges ago already if you count all the tag objects, but now it
    reaches 6M+ objects reachable from HEAD.

    I was joking around that that's when I should switch to 5.0, because
    3.0 happened at the 2M mark, and 4.0 happened at 4M objects. But
    probably not, even if numerology is about as good a reason as any.

    - Linus ]

    * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
    scsi: devinfo: Add Microsoft iSCSI target to 1024 sector blacklist
    scsi: cxgb4i: silence overflow warning in t4_uld_rx_handler()
    scsi: dpt_i2o: Use after free in I2ORESETCMD ioctl
    scsi: core: Make scsi_result_to_blk_status() recognize CONDITION MET
    scsi: core: Rename __scsi_error_from_host_byte() into scsi_result_to_blk_status()
    Revert "scsi: core: return BLK_STS_OK for DID_OK in __scsi_error_from_host_byte()"
    scsi: aacraid: Insure command thread is not recursively stopped
    scsi: qla2xxx: Correct setting of SAM_STAT_CHECK_CONDITION
    scsi: qla2xxx: correctly shift host byte
    scsi: qla2xxx: Fix race condition between iocb timeout and initialisation
    scsi: qla2xxx: Avoid double completion of abort command
    scsi: qla2xxx: Fix small memory leak in qla2x00_probe_one on probe failure
    scsi: scsi_dh: Don't look for NULL devices handlers by name
    scsi: core: remove redundant assignment to shost->use_blk_mq

    Linus Torvalds
     
  • Pull more Kbuild updates from Masahiro Yamada:

    - pass HOSTLDFLAGS when compiling single .c host programs

    - build genksyms lexer and parser files instead of using shipped
    versions

    - rename *-asn1.[ch] to *.asn1.[ch] for suffix consistency

    - let the top .gitignore globally ignore artifacts generated by flex,
    bison, and asn1_compiler

    - let the top Makefile globally clean artifacts generated by flex,
    bison, and asn1_compiler

    - use safer .SECONDARY marker instead of .PRECIOUS to prevent
    intermediate files from being removed

    - support -fmacro-prefix-map option to make __FILE__ a relative path

    - fix # escaping to prepare for the future GNU Make release

    - clean up deb-pkg by using debian tools instead of handrolled
    source/changes generation

    - improve rpm-pkg portability by supporting kernel-install as a
    fallback of new-kernel-pkg

    - extend Kconfig listnewconfig target to provide more information

    * tag 'kbuild-v4.17-2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
    kconfig: extend output of 'listnewconfig'
    kbuild: rpm-pkg: use kernel-install as a fallback for new-kernel-pkg
    Kbuild: fix # escaping in .cmd files for future Make
    kbuild: deb-pkg: split generating packaging and build
    kbuild: use -fmacro-prefix-map to make __FILE__ a relative path
    kbuild: mark $(targets) as .SECONDARY and remove .PRECIOUS markers
    kbuild: rename *-asn1.[ch] to *.asn1.[ch]
    kbuild: clean up *-asn1.[ch] patterns from top-level Makefile
    .gitignore: move *-asn1.[ch] patterns to the top-level .gitignore
    kbuild: add %.dtb.S and %.dtb to 'targets' automatically
    kbuild: add %.lex.c and %.tab.[ch] to 'targets' automatically
    genksyms: generate lexer and parser during build instead of shipping
    kbuild: clean up *.lex.c and *.tab.[ch] patterns from top-level Makefile
    .gitignore: move *.lex.c *.tab.[ch] patterns to the top-level .gitignore
    kbuild: use HOSTLDFLAGS for single .c executables

    Linus Torvalds
     
  • Pull x86 fixes from Thomas Gleixner:
    "A set of fixes and updates for x86:

    - Address a swiotlb regression which was caused by the recent DMA
    rework and made driver fail because dma_direct_supported() returned
    false

    - Fix a signedness bug in the APIC ID validation which caused invalid
    APIC IDs to be detected as valid thereby bloating the CPU possible
    space.

    - Fix inconsisten config dependcy/select magic for the MFD_CS5535
    driver.

    - Fix a corruption of the physical address space bits when encryption
    has reduced the address space and late cpuinfo updates overwrite
    the reduced bit information with the original value.

    - Dominiks syscall rework which consolidates the architecture
    specific syscall functions so all syscalls can be wrapped with the
    same macros. This allows to switch x86/64 to struct pt_regs based
    syscalls. Extend the clearing of user space controlled registers in
    the entry patch to the lower registers"

    * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86/apic: Fix signedness bug in APIC ID validity checks
    x86/cpu: Prevent cpuinfo_x86::x86_phys_bits adjustment corruption
    x86/olpc: Fix inconsistent MFD_CS5535 configuration
    swiotlb: Use dma_direct_supported() for swiotlb_ops
    syscalls/x86: Adapt syscall_wrapper.h to the new syscall stub naming convention
    syscalls/core, syscalls/x86: Rename struct pt_regs-based sys_*() to __x64_sys_*()
    syscalls/core, syscalls/x86: Clean up compat syscall stub naming convention
    syscalls/core, syscalls/x86: Clean up syscall stub naming convention
    syscalls/x86: Extend register clearing on syscall entry to lower registers
    syscalls/x86: Unconditionally enable 'struct pt_regs' based syscalls on x86_64
    syscalls/x86: Use 'struct pt_regs' based syscall calling for IA32_EMULATION and x32
    syscalls/core: Prepare CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y for compat syscalls
    syscalls/x86: Use 'struct pt_regs' based syscall calling convention for 64-bit syscalls
    syscalls/core: Introduce CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y
    x86/syscalls: Don't pointlessly reload the system call number
    x86/mm: Fix documentation of module mapping range with 4-level paging
    x86/cpuid: Switch to 'static const' specifier

    Linus Torvalds
     
  • Pull x86 pti updates from Thomas Gleixner:
    "Another series of PTI related changes:

    - Remove the manual stack switch for user entries from the idtentry
    code. This debloats entry by 5k+ bytes of text.

    - Use the proper types for the asm/bootparam.h defines to prevent
    user space compile errors.

    - Use PAGE_GLOBAL for !PCID systems to gain back performance

    - Prevent setting of huge PUD/PMD entries when the entries are not
    leaf entries otherwise the entries to which the PUD/PMD points to
    and are populated get lost"

    * 'x86-pti-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86/pgtable: Don't set huge PUD/PMD on non-leaf entries
    x86/pti: Leave kernel text global for !PCID
    x86/pti: Never implicitly clear _PAGE_GLOBAL for kernel image
    x86/pti: Enable global pages for shared areas
    x86/mm: Do not forbid _PAGE_RW before init for __ro_after_init
    x86/mm: Comment _PAGE_GLOBAL mystery
    x86/mm: Remove extra filtering in pageattr code
    x86/mm: Do not auto-massage page protections
    x86/espfix: Document use of _PAGE_GLOBAL
    x86/mm: Introduce "default" kernel PTE mask
    x86/mm: Undo double _PAGE_PSE clearing
    x86/mm: Factor out pageattr _PAGE_GLOBAL setting
    x86/entry/64: Drop idtentry's manual stack switch for user entries
    x86/uapi: Fix asm/bootparam.h userspace compilation errors

    Linus Torvalds
     
  • Pull scheduler fixes from Thomas Gleixner:
    "A few scheduler fixes:

    - Prevent a bogus warning vs. runqueue clock update flags in
    do_sched_rt_period_timer()

    - Simplify the helper functions which handle requests for skipping
    the runqueue clock updat.

    - Do not unlock the tunables mutex in the error path of the cpu
    frequency scheduler utils. Its not held.

    - Enforce proper alignement for 'struct util_est' in sched_avg to
    prevent a misalignment fault on IA64"

    * 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    sched/core: Force proper alignment of 'struct util_est'
    sched/core: Simplify helpers for rq clock update skip requests
    sched/rt: Fix rq->clock_update_flags < RQCF_ACT_SKIP warning
    sched/cpufreq/schedutil: Fix error path mutex unlock

    Linus Torvalds
     
  • Pull more perf updates from Thomas Gleixner:
    "A rather large set of perf updates:

    Kernel:

    - Fix various initialization issues

    - Prevent creating [ku]probes for not CAP_SYS_ADMIN users

    Tooling:

    - Show only failing syscalls with 'perf trace --failure' (Arnaldo
    Carvalho de Melo)

    e.g: See what 'openat' syscalls are failing:

    # perf trace --failure -e openat
    762.323 ( 0.007 ms): VideoCapture/4566 openat(dfd: CWD, filename: /dev/video2) = -1 ENOENT No such file or directory

    790.228 ( 0.008 ms): VideoCapture/4566 openat(dfd: CWD, filename: /dev/video63) = -1 ENOENT No such file or directory
    ^C#

    - Show information about the event (freq, nr_samples, total
    period/nr_events) in the annotate --tui and --stdio2 'perf
    annotate' output, similar to the first line in the 'perf report
    --tui', but just for the samples for a the annotated symbol
    (Arnaldo Carvalho de Melo)

    - Introduce 'perf version --build-options' to show what features were
    linked, aliased as well as a shorter 'perf -vv' (Jin Yao)

    - Add a "dso_size" sort order (Kim Phillips)

    - Remove redundant ')' in the tracepoint output in 'perf trace'
    (Changbin Du)

    - Synchronize x86's cpufeatures.h, no effect on toolss (Arnaldo
    Carvalho de Melo)

    - Show group details on the title line in the annotate browser and
    'perf annotate --stdio2' output, so that the per-event columns can
    have headers (Arnaldo Carvalho de Melo)

    - Fixup vertical line separating metrics from instructions and
    cleaning unused lines at the bottom, both in the annotate TUI
    browser (Arnaldo Carvalho de Melo)

    - Remove duplicated 'samples' in lost samples warning in
    'perf report' (Arnaldo Carvalho de Melo)

    - Synchronize i915_drm.h, silencing the perf build process,
    automagically adding support for the new DRM_I915_QUERY ioctl
    (Arnaldo Carvalho de Melo)

    - Make auxtrace_queues__add_buffer() allocate struct buffer, from a
    patchkit already applied (Adrian Hunter)

    - Fix the --stdio2/TUI annotate output to include group details, be
    it for a recorded '{a,b,f}' explicit event group or when forcing
    group display using 'perf report --group' for a set of events not
    recorded as a group (Arnaldo Carvalho de Melo)

    - Fix display artifacts in the ui browser (base class for the
    annotate and main report/top TUI browser) related to the extra
    title lines work (Arnaldo Carvalho de Melo)

    - perf auxtrace refactorings, leftovers from a previously partially
    processed patchset (Adrian Hunter)

    - Fix the builtin clang build (Sandipan Das, Arnaldo Carvalho de
    Melo)

    - Synchronize i915_drm.h, silencing a perf build warning and in the
    process automagically adding support for a new ioctl command
    (Arnaldo Carvalho de Melo)

    - Fix a strncpy issue in uprobe tracing"

    * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (36 commits)
    perf/core: Need CAP_SYS_ADMIN to create k/uprobe with perf_event_open()
    tracing/uprobe_event: Fix strncpy corner case
    perf/core: Fix perf_uprobe_init()
    perf/core: Fix perf_kprobe_init()
    perf/core: Fix use-after-free in uprobe_perf_close()
    perf tests clang: Fix function name for clang IR test
    perf clang: Add support for recent clang versions
    perf tools: Fix perf builds with clang support
    perf tools: No need to include namespaces.h in util.h
    perf hists browser: Remove leftover from row returned from refresh
    perf hists browser: Show extra_title_lines in the 'D' debug hotkey
    perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering
    tools headers uapi: Synchronize i915_drm.h
    perf report: Remove duplicated 'samples' in lost samples warning
    perf ui browser: Fixup cleaning unused lines at the bottom
    perf annotate browser: Fixup vertical line separating metrics from instructions
    perf annotate: Show group details on the title line
    perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
    perf/x86/intel: Move regs->flags EXACT bit init
    perf trace: Remove redundant ')'
    ...

    Linus Torvalds
     
  • Pull x86 EFI bootup fixlet from Thomas Gleixner:
    "A single fix for an early boot warning caused by invoking
    this_cpu_has() before SMP initialization"

    * 'efi-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86/mm: Fix bogus warning during EFI bootup, use boot_cpu_has() instead of this_cpu_has() in build_cr3_noflush()

    Linus Torvalds
     
  • Pull irq affinity fixes from Thomas Gleixner:

    - Fix error path handling in the affinity spreading code

    - Make affinity spreading smarter to avoid issues on systems which
    claim to have hotpluggable CPUs while in fact they can't hotplug
    anything.

    So instead of trying to spread the vectors (and thereby the
    associated device queues) to all possibe CPUs, spread them on all
    present CPUs first. If there are left over vectors after that first
    step they are spread among the possible, but not present CPUs which
    keeps the code backwards compatible for virtual decives and NVME
    which allocate a queue per possible CPU, but makes the spreading
    smarter for devices which have less queues than possible or present
    CPUs.

    * 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    genirq/affinity: Spread irq vectors among present CPUs as far as possible
    genirq/affinity: Allow irq spreading from a given starting point
    genirq/affinity: Move actual irq vector spreading into a helper function
    genirq/affinity: Rename *node_to_possible_cpumask as *node_to_cpumask
    genirq/affinity: Don't return with empty affinity masks on error

    Linus Torvalds
     
  • Pull OpenRISC fixlet from Stafford Horne:
    "Just one small thing here, it came in a while back but I didnt have
    anything in my 4.16 queue, still its the only thing for 4.17 so
    sending it alone.

    Small cleanup: remove unused __ARCH_HAVE_MMU define"

    * tag 'for-linus' of git://github.com/openrisc/linux:
    openrisc: remove unused __ARCH_HAVE_MMU define

    Linus Torvalds
     
  • Pull powerpc fixes from Michael Ellerman:

    - Fix crashes when loading modules built with a different
    CONFIG_RELOCATABLE value by adding CONFIG_RELOCATABLE to vermagic.

    - Fix busy loops in the OPAL NVRAM driver if we get certain error
    conditions from firmware.

    - Remove tlbie trace points from KVM code that's called in real mode,
    because it causes crashes.

    - Fix checkstops caused by invalid tlbiel on Power9 Radix.

    - Ensure the set of CPU features we "know" are always enabled is
    actually the minimal set when we build with support for firmware
    supplied CPU features.

    Thanks to: Aneesh Kumar K.V, Anshuman Khandual, Nicholas Piggin.

    * tag 'powerpc-4.17-2' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
    powerpc/64s: Fix CPU_FTRS_ALWAYS vs DT CPU features
    powerpc/mm/radix: Fix checkstops caused by invalid tlbiel
    KVM: PPC: Book3S HV: trace_tlbie must not be called in realmode
    powerpc/8xx: Fix build with hugetlbfs enabled
    powerpc/powernv: Fix OPAL NVRAM driver OPAL_BUSY loops
    powerpc/powernv: define a standard delay for OPAL_BUSY type retry loops
    powerpc/fscr: Enable interrupts earlier before calling get_user()
    powerpc/64s: Fix section mismatch warnings from setup_rfi_flush()
    powerpc/modules: Fix crashes by adding CONFIG_RELOCATABLE to vermagic

    Linus Torvalds
     

14 Apr, 2018

13 commits

  • Merge yet more updates from Andrew Morton:

    - various hotfixes

    - kexec_file updates and feature work

    * emailed patches from Andrew Morton : (27 commits)
    kernel/kexec_file.c: move purgatories sha256 to common code
    kernel/kexec_file.c: allow archs to set purgatory load address
    kernel/kexec_file.c: remove mis-use of sh_offset field during purgatory load
    kernel/kexec_file.c: remove unneeded variables in kexec_purgatory_setup_sechdrs
    kernel/kexec_file.c: remove unneeded for-loop in kexec_purgatory_setup_sechdrs
    kernel/kexec_file.c: split up __kexec_load_puragory
    kernel/kexec_file.c: use read-only sections in arch_kexec_apply_relocations*
    kernel/kexec_file.c: search symbols in read-only kexec_purgatory
    kernel/kexec_file.c: make purgatory_info->ehdr const
    kernel/kexec_file.c: remove checks in kexec_purgatory_load
    include/linux/kexec.h: silence compile warnings
    kexec_file, x86: move re-factored code to generic side
    x86: kexec_file: clean up prepare_elf64_headers()
    x86: kexec_file: lift CRASH_MAX_RANGES limit on crash_mem buffer
    x86: kexec_file: remove X86_64 dependency from prepare_elf64_headers()
    x86: kexec_file: purge system-ram walking from prepare_elf64_headers()
    kexec_file,x86,powerpc: factor out kexec_file_ops functions
    kexec_file: make use of purgatory optional
    proc: revalidate misc dentries
    mm, slab: reschedule cache_reap() on the same CPU
    ...

    Linus Torvalds
     
  • The code to verify the new kernels sha digest is applicable for all
    architectures. Move it to common code.

    One problem is the string.c implementation on x86. Currently sha256
    includes x86/boot/string.h which defines memcpy and memset to be gcc
    builtins. By moving the sha256 implementation to common code and
    changing the include to linux/string.h both functions are no longer
    defined. Thus definitions have to be provided in x86/purgatory/string.c

    Link: http://lkml.kernel.org/r/20180321112751.22196-12-prudo@linux.vnet.ibm.com
    Signed-off-by: Philipp Rudo
    Acked-by: Dave Young
    Cc: AKASHI Takahiro
    Cc: Eric Biederman
    Cc: Heiko Carstens
    Cc: Ingo Molnar
    Cc: Martin Schwidefsky
    Cc: Michael Ellerman
    Cc: Thiago Jung Bauermann
    Cc: Vivek Goyal
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Philipp Rudo
     
  • For s390 new kernels are loaded to fixed addresses in memory before they
    are booted. With the current code this is a problem as it assumes the
    kernel will be loaded to an 'arbitrary' address. In particular,
    kexec_locate_mem_hole searches for a large enough memory region and sets
    the load address (kexec_bufer->mem) to it.

    Luckily there is a simple workaround for this problem. By returning 1
    in arch_kexec_walk_mem, kexec_locate_mem_hole is turned off. This
    allows the architecture to set kbuf->mem by hand. While the trick works
    fine for the kernel it does not for the purgatory as here the
    architectures don't have access to its kexec_buffer.

    Give architectures access to the purgatories kexec_buffer by changing
    kexec_load_purgatory to take a pointer to it. With this change
    architectures have access to the buffer and can edit it as they need.

    A nice side effect of this change is that we can get rid of the
    purgatory_info->purgatory_load_address field. As now the information
    stored there can directly be accessed from kbuf->mem.

    Link: http://lkml.kernel.org/r/20180321112751.22196-11-prudo@linux.vnet.ibm.com
    Signed-off-by: Philipp Rudo
    Reviewed-by: Martin Schwidefsky
    Acked-by: Dave Young
    Cc: AKASHI Takahiro
    Cc: Eric Biederman
    Cc: Heiko Carstens
    Cc: Ingo Molnar
    Cc: Michael Ellerman
    Cc: Thiago Jung Bauermann
    Cc: Vivek Goyal
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Philipp Rudo
     
  • The current code uses the sh_offset field in purgatory_info->sechdrs to
    store a pointer to the current load address of the section. Depending
    whether the section will be loaded or not this is either a pointer into
    purgatory_info->purgatory_buf or kexec_purgatory. This is not only a
    violation of the ELF standard but also makes the code very hard to
    understand as you cannot tell if the memory you are using is read-only
    or not.

    Remove this misuse and store the offset of the section in
    pugaroty_info->purgatory_buf in sh_offset.

    Link: http://lkml.kernel.org/r/20180321112751.22196-10-prudo@linux.vnet.ibm.com
    Signed-off-by: Philipp Rudo
    Acked-by: Dave Young
    Cc: AKASHI Takahiro
    Cc: Eric Biederman
    Cc: Heiko Carstens
    Cc: Ingo Molnar
    Cc: Martin Schwidefsky
    Cc: Michael Ellerman
    Cc: Thiago Jung Bauermann
    Cc: Vivek Goyal
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Philipp Rudo
     
  • The main loop currently uses quite a lot of variables to update the
    section headers. Some of them are unnecessary. So clean them up a
    little.

    Link: http://lkml.kernel.org/r/20180321112751.22196-9-prudo@linux.vnet.ibm.com
    Signed-off-by: Philipp Rudo
    Acked-by: Dave Young
    Cc: AKASHI Takahiro
    Cc: Eric Biederman
    Cc: Heiko Carstens
    Cc: Ingo Molnar
    Cc: Martin Schwidefsky
    Cc: Michael Ellerman
    Cc: Thiago Jung Bauermann
    Cc: Vivek Goyal
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Philipp Rudo
     
  • To update the entry point there is an extra loop over all section
    headers although this can be done in the main loop. So move it there
    and eliminate the extra loop and variable to store the 'entry section
    index'.

    Also, in the main loop, move the usual case, i.e. non-bss section, out
    of the extra if-block.

    Link: http://lkml.kernel.org/r/20180321112751.22196-8-prudo@linux.vnet.ibm.com
    Signed-off-by: Philipp Rudo
    Reviewed-by: Martin Schwidefsky
    Acked-by: Dave Young
    Cc: AKASHI Takahiro
    Cc: Eric Biederman
    Cc: Heiko Carstens
    Cc: Ingo Molnar
    Cc: Michael Ellerman
    Cc: Thiago Jung Bauermann
    Cc: Vivek Goyal
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Philipp Rudo
     
  • When inspecting __kexec_load_purgatory you find that it has two tasks

    1) setting up the kexec_buffer for the new kernel and,
    2) setting up pi->sechdrs for the final load address.

    The two tasks are independent of each other. To improve readability
    split up __kexec_load_purgatory into two functions, one for each task,
    and call them directly from kexec_load_purgatory.

    Link: http://lkml.kernel.org/r/20180321112751.22196-7-prudo@linux.vnet.ibm.com
    Signed-off-by: Philipp Rudo
    Acked-by: Dave Young
    Cc: AKASHI Takahiro
    Cc: Eric Biederman
    Cc: Heiko Carstens
    Cc: Ingo Molnar
    Cc: Martin Schwidefsky
    Cc: Michael Ellerman
    Cc: Thiago Jung Bauermann
    Cc: Vivek Goyal
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Philipp Rudo
     
  • When the relocations are applied to the purgatory only the section the
    relocations are applied to is writable. The other sections, i.e. the
    symtab and .rel/.rela, are in read-only kexec_purgatory. Highlight this
    by marking the corresponding variables as 'const'.

    While at it also change the signatures of arch_kexec_apply_relocations* to
    take section pointers instead of just the index of the relocation section.
    This removes the second lookup and sanity check of the sections in arch
    code.

    Link: http://lkml.kernel.org/r/20180321112751.22196-6-prudo@linux.vnet.ibm.com
    Signed-off-by: Philipp Rudo
    Acked-by: Dave Young
    Cc: AKASHI Takahiro
    Cc: Eric Biederman
    Cc: Heiko Carstens
    Cc: Ingo Molnar
    Cc: Martin Schwidefsky
    Cc: Michael Ellerman
    Cc: Thiago Jung Bauermann
    Cc: Vivek Goyal
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Philipp Rudo
     
  • The stripped purgatory does not contain a symtab. So when looking for
    symbols this is done in read-only kexec_purgatory. Highlight this by
    marking the corresponding variables as 'const'.

    Link: http://lkml.kernel.org/r/20180321112751.22196-5-prudo@linux.vnet.ibm.com
    Signed-off-by: Philipp Rudo
    Acked-by: Dave Young
    Cc: AKASHI Takahiro
    Cc: Eric Biederman
    Cc: Heiko Carstens
    Cc: Ingo Molnar
    Cc: Martin Schwidefsky
    Cc: Michael Ellerman
    Cc: Thiago Jung Bauermann
    Cc: Vivek Goyal
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Philipp Rudo
     
  • The kexec_purgatory buffer is read-only. Thus all pointers into
    kexec_purgatory are read-only, too. Point this out by explicitly
    marking purgatory_info->ehdr as 'const' and update the comments in
    purgatory_info.

    Link: http://lkml.kernel.org/r/20180321112751.22196-4-prudo@linux.vnet.ibm.com
    Signed-off-by: Philipp Rudo
    Acked-by: Dave Young
    Cc: AKASHI Takahiro
    Cc: Eric Biederman
    Cc: Heiko Carstens
    Cc: Ingo Molnar
    Cc: Martin Schwidefsky
    Cc: Michael Ellerman
    Cc: Thiago Jung Bauermann
    Cc: Vivek Goyal
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Philipp Rudo
     
  • Before the purgatory is loaded several checks are done whether the ELF
    file in kexec_purgatory is valid or not. These checks are incomplete.
    For example they don't check for the total size of the sections defined
    in the section header table or if the entry point actually points into
    the purgatory.

    On the other hand the purgatory, although an ELF file on its own, is
    part of the kernel. Thus not trusting the purgatory means not trusting
    the kernel build itself.

    So remove all validity checks on the purgatory and just trust the kernel
    build.

    Link: http://lkml.kernel.org/r/20180321112751.22196-3-prudo@linux.vnet.ibm.com
    Signed-off-by: Philipp Rudo
    Acked-by: Dave Young
    Cc: AKASHI Takahiro
    Cc: Eric Biederman
    Cc: Heiko Carstens
    Cc: Ingo Molnar
    Cc: Martin Schwidefsky
    Cc: Michael Ellerman
    Cc: Thiago Jung Bauermann
    Cc: Vivek Goyal
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Philipp Rudo
     
  • Patch series "kexec_file: Clean up purgatory load", v2.

    Following the discussion with Dave and AKASHI, here are the common code
    patches extracted from my recent patch set (Add kexec_file_load support
    to s390) [1]. The patches were extracted to allow upstream integration
    together with AKASHI's common code patches before the arch code gets
    adjusted to the new base.

    The reason for this series is to prepare common code for adding
    kexec_file_load to s390 as well as cleaning up the mis-use of the
    sh_offset field during purgatory load. In detail this series contains:

    Patch #1&2: Minor cleanups/fixes.

    Patch #3-9: Clean up the purgatory load/relocation code. Especially
    remove the mis-use of the purgatory_info->sechdrs->sh_offset field,
    currently holding a pointer into either kexec_purgatory (ro) or
    purgatory_buf (rw) depending on the section. With these patches the
    section address will be calculated verbosely and sh_offset will contain
    the offset of the section in the stripped purgatory binary
    (purgatory_buf).

    Patch #10: Allows architectures to set the purgatory load address. This
    patch is important for s390 as the kernel and purgatory have to be
    loaded to fixed addresses. In current code this is impossible as the
    purgatory load is opaque to the architecture.

    Patch #11: Moves x86 purgatories sha implementation to common lib/
    directory to allow reuse in other architectures.

    This patch (of 11)

    When building the kernel with CONFIG_KEXEC_FILE enabled gcc prints a
    compile warning multiple times.

    In file included from /linux/init/initramfs.c:526:0:
    /include/linux/kexec.h:120:9: warning: `struct kimage' declared inside parameter list [enabled by default]
    unsigned long cmdline_len);
    ^

    This is because the typedefs for kexec_file_load uses struct kimage
    before it is declared. Fix this by simply forward declaring struct
    kimage.

    Link: http://lkml.kernel.org/r/20180321112751.22196-2-prudo@linux.vnet.ibm.com
    Signed-off-by: Philipp Rudo
    Acked-by: Dave Young
    Cc: Eric Biederman
    Cc: Vivek Goyal
    Cc: Michael Ellerman
    Cc: Thiago Jung Bauermann
    Cc: Martin Schwidefsky
    Cc: Heiko Carstens
    Cc: AKASHI Takahiro
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Philipp Rudo
     
  • In the previous patches, commonly-used routines, exclude_mem_range() and
    prepare_elf64_headers(), were carved out. Now place them in kexec
    common code. A prefix "crash_" is given to each of their names to avoid
    possible name collisions.

    Link: http://lkml.kernel.org/r/20180306102303.9063-8-takahiro.akashi@linaro.org
    Signed-off-by: AKASHI Takahiro
    Acked-by: Dave Young
    Tested-by: Dave Young
    Cc: Vivek Goyal
    Cc: Baoquan He
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    AKASHI Takahiro