320 Commits

Author SHA1 Message Date
Michael Bestas
e5a17833b1 Merge tag 'v4.4.277' of https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into android-msm-wahoo-4.4
This is the 4.4.277 stable release

# gpg: Signature made Wed Jul 28 10:13:10 2021 EEST
# gpg:                using RSA key 647F28654894E3BD457199BE38DBBDC86092693E
# gpg: Good signature from "Greg Kroah-Hartman <gregkh@kernel.org>" [full]
# gpg: gregkh@kernel.org: Verified 27 signatures in the past 11 days.  Encrypted
#      0 messages.

# By Colin Ian King (2) and others
# Via Greg Kroah-Hartman
* tag 'v4.4.277' of https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable:
  Linux 4.4.277
  btrfs: compression: don't try to compress if we don't have enough pages
  iio: accel: bma180: Fix BMA25x bandwidth register values
  iio: accel: bma180: Use explicit member assignment
  net: bcmgenet: ensure EXT_ENERGY_DET_MASK is clear
  media: ngene: Fix out-of-bounds bug in ngene_command_config_free_buf()
  tracing: Fix bug in rb_per_cpu_empty() that might cause deadloop.
  USB: serial: cp210x: add ID for CEL EM3588 USB ZigBee stick
  USB: serial: cp210x: fix comments for GE CS1000
  USB: serial: option: add support for u-blox LARA-R6 family
  usb: renesas_usbhs: Fix superfluous irqs happen after usb_pkt_pop()
  usb: max-3421: Prevent corruption of freed memory
  USB: usb-storage: Add LaCie Rugged USB3-FW to IGNORE_UAS
  usb: hub: Disable USB 3 device initiated lpm if exit latency is too high
  KVM: PPC: Book3S: Fix H_RTAS rets buffer overflow
  xhci: Fix lost USB 2 remote wake
  ALSA: sb: Fix potential ABBA deadlock in CSP driver
  s390/ftrace: fix ftrace_update_ftrace_func implementation
  proc: Avoid mixing integer types in mem_rw()
  Revert "USB: quirks: ignore remote wake-up on Fibocom L850-GL LTE modem"
  scsi: target: Fix protect handling in WRITE SAME(32)
  scsi: iscsi: Fix iface sysfs attr detection
  netrom: Decrease sock refcount when sock timers expire
  net: decnet: Fix sleeping inside in af_decnet
  net: fix uninit-value in caif_seqpkt_sendmsg
  s390/bpf: Perform r1 range checking before accessing jit->seen_reg[r1]
  perf probe-file: Delete namelist in del_events() on the error path
  perf test bpf: Free obj_buf
  igb: Check if num of q_vectors is smaller than max before array access
  iavf: Fix an error handling path in 'iavf_probe()'
  ipv6: tcp: drop silly ICMPv6 packet too big messages
  tcp: annotate data races around tp->mtu_info
  net: validate lwtstate->data before returning from skb_tunnel_info()
  net: ti: fix UAF in tlan_remove_one
  net: moxa: fix UAF in moxart_mac_probe
  net: bcmgenet: Ensure all TX/RX queues DMAs are disabled
  net: ipv6: fix return value of ip6_skb_dst_mtu
  x86/fpu: Make init_fpstate correct with optimized XSAVE
  Revert "memory: fsl_ifc: fix leak of IO mapping on probe failure"
  sched/fair: Fix CFS bandwidth hrtimer expiry type
  scsi: aic7xxx: Fix unintentional sign extension issue on left shift of u8
  kbuild: mkcompile_h: consider timestamp if KBUILD_BUILD_TIMESTAMP is set
  thermal/core: Correct function name thermal_zone_device_unregister()
  ARM: imx: pm-imx5: Fix references to imx5_cpu_suspend_info
  ARM: dts: imx6: phyFLEX: Fix UART hardware flow control
  ARM: dts: BCM63xx: Fix NAND nodes names
  ARM: brcmstb: dts: fix NAND nodes names

Change-Id: I6b5853d6a4ab11c742e356f9aec7f048487971bb
2021-08-05 14:00:59 +03:00
Haoran Luo
afa0917925 tracing: Fix bug in rb_per_cpu_empty() that might cause deadloop.
commit 67f0d6d9883c13174669f88adac4f0ee656cc16a upstream.

The "rb_per_cpu_empty()" misinterpret the condition (as not-empty) when
"head_page" and "commit_page" of "struct ring_buffer_per_cpu" points to
the same buffer page, whose "buffer_data_page" is empty and "read" field
is non-zero.

An error scenario could be constructed as followed (kernel perspective):

1. All pages in the buffer has been accessed by reader(s) so that all of
them will have non-zero "read" field.

2. Read and clear all buffer pages so that "rb_num_of_entries()" will
return 0 rendering there's no more data to read. It is also required
that the "read_page", "commit_page" and "tail_page" points to the same
page, while "head_page" is the next page of them.

3. Invoke "ring_buffer_lock_reserve()" with large enough "length"
so that it shot pass the end of current tail buffer page. Now the
"head_page", "commit_page" and "tail_page" points to the same page.

4. Discard current event with "ring_buffer_discard_commit()", so that
"head_page", "commit_page" and "tail_page" points to a page whose buffer
data page is now empty.

When the error scenario has been constructed, "tracing_read_pipe" will
be trapped inside a deadloop: "trace_empty()" returns 0 since
"rb_per_cpu_empty()" returns 0 when it hits the CPU containing such
constructed ring buffer. Then "trace_find_next_entry_inc()" always
return NULL since "rb_num_of_entries()" reports there's no more entry
to read. Finally "trace_seq_to_user()" returns "-EBUSY" spanking
"tracing_read_pipe" back to the start of the "waitagain" loop.

I've also written a proof-of-concept script to construct the scenario
and trigger the bug automatically, you can use it to trace and validate
my reasoning above:

  https://github.com/aegistudio/RingBufferDetonator.git

Tests has been carried out on linux kernel 5.14-rc2
(2734d6c1b1a089fb593ef6a23d4b70903526fe0c), my fixed version
of kernel (for testing whether my update fixes the bug) and
some older kernels (for range of affected kernels). Test result is
also attached to the proof-of-concept repository.

Link: https://lore.kernel.org/linux-trace-devel/YPaNxsIlb2yjSi5Y@aegistudio/
Link: https://lore.kernel.org/linux-trace-devel/YPgrN85WL9VyrZ55@aegistudio

Cc: stable@vger.kernel.org
Fixes: bf41a158ca ("ring-buffer: make reentrant")
Suggested-by: Linus Torvalds <torvalds@linuxfoundation.org>
Signed-off-by: Haoran Luo <www@aegistudio.net>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2021-07-28 09:12:36 +02:00
Michael Bestas
2cb80ee559 Merge tag 'v4.4.254' into android-msm-wahoo-4.4
This is the 4.4.254 stable release

# gpg: Signature made Sat Jan 30 14:26:14 2021 EET
# gpg:                using RSA key 647F28654894E3BD457199BE38DBBDC86092693E
# gpg: Good signature from "Greg Kroah-Hartman <gregkh@kernel.org>" [full]
# gpg: gregkh@kernel.org: Verified 5 signatures in the past 2 hours.  Encrypted
#      0 messages.

# By Ben Skeggs (2) and others
# Via Greg Kroah-Hartman
* tag 'v4.4.254':
  Linux 4.4.254
  x86/boot/compressed: Disable relocation relaxation
  xen-blkback: set ring->xenblkd to NULL after kthread_stop()
  tracing: Fix race in trace_open and buffer resize call
  Revert "mm/slub: fix a memory leak in sysfs_slab_add()"
  net_sched: avoid shift-out-of-bounds in tcindex_set_parms()
  ipv6: create multicast route with RTPROT_KERNEL
  skbuff: back tiny skbs with kmalloc() in __netdev_alloc_skb() too
  sh_eth: Fix power down vs. is_opened flag ordering
  sh: dma: fix kconfig dependency for G2_DMA
  netfilter: rpfilter: mask ecn bits before fib lookup
  compiler.h: Raise minimum version of GCC to 5.1 for arm64
  xhci: make sure TRB is fully written before giving it to the controller
  usb: bdc: Make bdc pci driver depend on BROKEN
  ehci: fix EHCI host controller initialization sequence
  iio: ad5504: Fix setting power-down state
  can: dev: can_restart: fix use after free bug
  drm/nouveau/i2c/gm200: increase width of aux semaphore owner fields
  drm/nouveau/bios: fix issue shadowing expansion ROMs
  scsi: ufs: Correct the LUN used in eh_device_reset_handler() callback
  ASoC: Intel: haswell: Add missing pm_ops
  dm: avoid filesystem lookup in dm_get_dev_t()
  ACPI: scan: Make acpi_bus_get_device() clear return pointer on error
  ALSA: hda/via: Add minimum mute flag
  ALSA: seq: oss: Fix missing error check in snd_seq_oss_synth_make_info()

 Conflicts:
	drivers/scsi/ufs/ufshcd.c
	net/core/skbuff.c

Change-Id: I8ad4adc3c7061df6faf5be4fa47e341d9a17edb0
2021-07-24 19:04:56 +03:00
Gaurav Kohli
a7c2dd4438 tracing: Fix race in trace_open and buffer resize call
commit bbeb97464eefc65f506084fd9f18f21653e01137 upstream.

Below race can come, if trace_open and resize of
cpu buffer is running parallely on different cpus
CPUX                                CPUY
				    ring_buffer_resize
				    atomic_read(&buffer->resize_disabled)
tracing_open
tracing_reset_online_cpus
ring_buffer_reset_cpu
rb_reset_cpu
				    rb_update_pages
				    remove/insert pages
resetting pointer

This race can cause data abort or some times infinte loop in
rb_remove_pages and rb_insert_pages while checking pages
for sanity.

Take buffer lock to fix this.

Link: https://lkml.kernel.org/r/1601976833-24377-1-git-send-email-gkohli@codeaurora.org

Cc: stable@vger.kernel.org
Fixes: 83f40318da ("ring-buffer: Make removal of ring buffer pages atomic")
Reported-by: Denis Efremov <efremov@linux.com>
Signed-off-by: Gaurav Kohli <gkohli@codeaurora.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2021-01-30 13:25:57 +01:00
Nathan Chancellor
de02d35734 Merge 4.4.244 into android-msm-wahoo-4.4
Changes in 4.4.244: (64 commits)
        ring-buffer: Fix recursion protection transitions between interrupt context
        gfs2: Wake up when sd_glock_disposal becomes zero
        mm: mempolicy: fix potential pte_unmap_unlock pte error
        time: Prevent undefined behaviour in timespec64_to_ns()
        btrfs: reschedule when cloning lots of extents
        net: xfrm: fix a race condition during allocing spi
        perf tools: Add missing swap for ino_generation
        ALSA: hda: prevent undefined shift in snd_hdac_ext_bus_get_link()
        can: dev: can_get_echo_skb(): prevent call to kfree_skb() in hard IRQ context
        can: dev: __can_get_echo_skb(): fix real payload length return value for RTR frames
        can: can_create_echo_skb(): fix echo skb generation: always use skb_clone()
        can: peak_usb: add range checking in decode operations
        can: peak_usb: peak_usb_get_ts_time(): fix timestamp wrapping
        Btrfs: fix missing error return if writeback for extent buffer never started
        pinctrl: devicetree: Avoid taking direct reference to device name string
        i40e: Wrong truncation from u16 to u8
        i40e: Fix of memory leak and integer truncation in i40e_virtchnl.c
        geneve: add transport ports in route lookup for geneve
        ath9k_htc: Use appropriate rs_datalen type
        usb: gadget: goku_udc: fix potential crashes in probe
        gfs2: Free rd_bits later in gfs2_clear_rgrpd to fix use-after-free
        gfs2: check for live vs. read-only file system in gfs2_fitrim
        drm/amdgpu: perform srbm soft reset always on SDMA resume
        mac80211: fix use of skb payload instead of header
        cfg80211: regulatory: Fix inconsistent format argument
        iommu/amd: Increase interrupt remapping table limit to 512 entries
        xfs: fix a missing unlock on error in xfs_fs_map_blocks
        of/address: Fix of_node memory leak in of_dma_is_coherent
        cosa: Add missing kfree in error path of cosa_write
        perf: Fix get_recursion_context()
        ext4: correctly report "not supported" for {usr,grp}jquota when !CONFIG_QUOTA
        ext4: unlock xattr_sem properly in ext4_inline_data_truncate()
        usb: cdc-acm: Add DISABLE_ECHO for Renesas USB Download mode
        mei: protect mei_cl_mtu from null dereference
        ocfs2: initialize ip_next_orphan
        don't dump the threads that had been already exiting when zapped.
        drm/gma500: Fix out-of-bounds access to struct drm_device.vblank[]
        pinctrl: amd: use higher precision for 512 RtcClk
        pinctrl: amd: fix incorrect way to disable debounce filter
        swiotlb: fix "x86: Don't panic if can not alloc buffer for swiotlb"
        IPv6: Set SIT tunnel hard_header_len to zero
        net/af_iucv: fix null pointer dereference on shutdown
        net/x25: Fix null-ptr-deref in x25_connect
        net: Update window_clamp if SOCK_RCVBUF is set
        random32: make prandom_u32() output unpredictable
        x86/speculation: Allow IBPB to be conditionally enabled on CPUs with always-on STIBP
        xen/events: avoid removing an event channel while handling it
        xen/events: add a proper barrier to 2-level uevent unmasking
        xen/events: fix race in evtchn_fifo_unmask()
        xen/events: add a new "late EOI" evtchn framework
        xen/blkback: use lateeoi irq binding
        xen/netback: use lateeoi irq binding
        xen/scsiback: use lateeoi irq binding
        xen/pciback: use lateeoi irq binding
        xen/events: switch user event channels to lateeoi model
        xen/events: use a common cpu hotplug hook for event channels
        xen/events: defer eoi in case of excessive number of events
        xen/events: block rogue events for some time
        perf/core: Fix race in the perf_mmap_close() function
        Revert "kernel/reboot.c: convert simple_strtoul to kstrtoint"
        reboot: fix overflow parsing reboot cpu number
        ext4: fix leaking sysfs kobject after failed mount
        Convert trailing spaces and periods in path components
        Linux 4.4.244

Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
2020-11-18 19:43:37 -07:00
Steven Rostedt (VMware)
47f1d1fe0c ring-buffer: Fix recursion protection transitions between interrupt context
[ Upstream commit b02414c8f045ab3b9afc816c3735bc98c5c3d262 ]

The recursion protection of the ring buffer depends on preempt_count() to be
correct. But it is possible that the ring buffer gets called after an
interrupt comes in but before it updates the preempt_count(). This will
trigger a false positive in the recursion code.

Use the same trick from the ftrace function callback recursion code which
uses a "transition" bit that gets set, to allow for a single recursion for
to handle transitions between contexts.

Cc: stable@vger.kernel.org
Fixes: 567cd4da54 ("ring-buffer: User context bit recursion checking")
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-11-18 18:24:57 +01:00
Nathan Chancellor
de03ddc510 Merge 4.4.242 into android-msm-wahoo-4.4
Changes in 4.4.242: (87 commits)
        SUNRPC: ECONNREFUSED should cause a rebind.
        scripts/setlocalversion: make git describe output more reliable
        powerpc/powernv/opal-dump : Use IRQ_HANDLED instead of numbers in interrupt handler
        efivarfs: Replace invalid slashes with exclamation marks in dentries.
        ravb: Fix bit fields checking in ravb_hwtstamp_get()
        tipc: fix memory leak caused by tipc_buf_append()
        mtd: lpddr: Fix bad logic in print_drs_error
        ata: sata_rcar: Fix DMA boundary mask
        fscrypt: return -EXDEV for incompatible rename or link into encrypted dir
        f2fs crypto: avoid unneeded memory allocation in ->readdir
        powerpc/powernv/smp: Fix spurious DBG() warning
        sparc64: remove mm_cpumask clearing to fix kthread_use_mm race
        f2fs: fix to check segment boundary during SIT page readahead
        um: change sigio_spinlock to a mutex
        xfs: fix realtime bitmap/summary file truncation when growing rt volume
        video: fbdev: pvr2fb: initialize variables
        ath10k: fix VHT NSS calculation when STBC is enabled
        mmc: via-sdmmc: Fix data race bug
        printk: reduce LOG_BUF_SHIFT range for H8300
        kgdb: Make "kgdbcon" work properly with "kgdb_earlycon"
        USB: adutux: fix debugging
        drivers/net/wan/hdlc_fr: Correctly handle special skb->protocol values
        power: supply: test_power: add missing newlines when printing parameters by sysfs
        md/bitmap: md_bitmap_get_counter returns wrong blocks
        clk: ti: clockdomain: fix static checker warning
        net: 9p: initialize sun_server.sun_path to have addr's value only when addr is valid
        drivers: watchdog: rdc321x_wdt: Fix race condition bugs
        ext4: Detect already used quota file early
        gfs2: add validation checks for size of superblock
        memory: emif: Remove bogus debugfs error handling
        ARM: dts: s5pv210: move PMU node out of clock controller
        ARM: dts: s5pv210: remove dedicated 'audio-subsystem' node
        md/raid5: fix oops during stripe resizing
        leds: bcm6328, bcm6358: use devres LED registering function
        NFS: fix nfs_path in case of a rename retry
        ACPI / extlog: Check for RDMSR failure
        ACPI: video: use ACPI backlight for HP 635 Notebook
        acpi-cpufreq: Honor _PSD table setting on new AMD CPUs
        w1: mxc_w1: Fix timeout resolution problem leading to bus error
        scsi: mptfusion: Fix null pointer dereferences in mptscsih_remove()
        btrfs: reschedule if necessary when logging directory items
        vt: keyboard, simplify vt_kdgkbsent
        vt: keyboard, extend func_buf_lock to readers
        dmaengine: dma-jz4780: Fix race in jz4780_dma_tx_status
        iio:gyro:itg3200: Fix timestamp alignment and prevent data leak.
        powerpc/powernv/elog: Fix race while processing OPAL error log event.
        ubifs: dent: Fix some potential memory leaks while iterating entries
        ubi: check kthread_should_stop() after the setting of task state
        ia64: fix build error with !COREDUMP
        ceph: promote to unsigned long long before shifting
        libceph: clear con->out_msg on Policy::stateful_server faults
        9P: Cast to loff_t before multiplying
        ring-buffer: Return 0 on success from ring_buffer_resize()
        vringh: fix __vringh_iov() when riov and wiov are different
        tty: make FONTX ioctl use the tty pointer they were actually passed
        arm64: berlin: Select DW_APB_TIMER_OF
        cachefiles: Handle readpage error correctly
        hil/parisc: Disable HIL driver when it gets stuck
        ARM: samsung: fix PM debug build with DEBUG_LL but !MMU
        ARM: s3c24xx: fix missing system reset
        device property: Keep secondary firmware node secondary by type
        device property: Don't clear secondary pointer for shared primary firmware node
        staging: comedi: cb_pcidas: Allow 2-channel commands for AO subdevice
        xen/events: don't use chip_data for legacy IRQs
        tipc: fix use-after-free in tipc_bcast_get_mode
        gianfar: Replace skb_realloc_headroom with skb_cow_head for PTP
        gianfar: Account for Tx PTP timestamp in the skb headroom
        Fonts: Replace discarded const qualifier
        ALSA: usb-audio: Add implicit feedback quirk for Qu-16
        ftrace: Fix recursion check for NMI test
        ftrace: Handle tracing when switching between context
        ARM: dts: sun4i-a10: fix cpu_alert temperature
        x86/kexec: Use up-to-dated screen_info copy to fill boot params
        of: Fix reserved-memory overlap detection
        scsi: core: Don't start concurrent async scan on same host
        vsock: use ns_capable_noaudit() on socket create
        vt: Disable KD_FONT_OP_COPY
        fork: fix copy_process(CLONE_PARENT) race with the exiting ->real_parent
        serial: 8250_mtk: Fix uart_get_baud_rate warning
        serial: txx9: add missing platform_driver_unregister() on error in serial_txx9_init
        USB: serial: cyberjack: fix write-URB completion race
        USB: serial: option: add LE910Cx compositions 0x1203, 0x1230, 0x1231
        USB: serial: option: add Telit FN980 composition 0x1055
        USB: Add NO_LPM quirk for Kingston flash drive
        ARC: stack unwinding: avoid indefinite looping
        Revert "ARC: entry: fix potential EFA clobber when TIF_SYSCALL_TRACE"
        Linux 4.4.242

Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>

Conflicts:
	scripts/setlocalversion
2020-11-12 09:49:14 -07:00
Qiujun Huang
687b0d6084 ring-buffer: Return 0 on success from ring_buffer_resize()
commit 0a1754b2a97efa644aa6e84d1db5b17c42251483 upstream.

We don't need to check the new buffer size, and the return value
had confused resize_buffer_duplicate_size().
...
	ret = ring_buffer_resize(trace_buf->buffer,
		per_cpu_ptr(size_buf->data,cpu_id)->entries, cpu_id);
	if (ret == 0)
		per_cpu_ptr(trace_buf->data, cpu_id)->entries =
			per_cpu_ptr(size_buf->data, cpu_id)->entries;
...

Link: https://lkml.kernel.org/r/20201019142242.11560-1-hqjagain@gmail.com

Cc: stable@vger.kernel.org
Fixes: d60da506cb ("tracing: Add a resize function to make one buffer equivalent to another buffer")
Signed-off-by: Qiujun Huang <hqjagain@gmail.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-11-10 10:22:17 +01:00
Nathan Chancellor
06d423a807 Merge 4.4.180 into android-msm-wahoo-4.4
Changes in 4.4.180: (267 commits)
        kbuild: simplify ld-option implementation
        KVM: fail KVM_SET_VCPU_EVENTS with invalid exception number
        cifs: do not attempt cifs operation on smb2+ rename error
        MIPS: scall64-o32: Fix indirect syscall number load
        trace: Fix preempt_enable_no_resched() abuse
        sched/numa: Fix a possible divide-by-zero
        ceph: ensure d_name stability in ceph_dentry_hash()
        ceph: fix ci->i_head_snapc leak
        nfsd: Don't release the callback slot unless it was actually held
        sunrpc: don't mark uninitialised items as VALID.
        USB: Add new USB LPM helpers
        USB: Consolidate LPM checks to avoid enabling LPM twice
        powerpc/xmon: Add RFI flush related fields to paca dump
        powerpc/64s: Improve RFI L1-D cache flush fallback
        powerpc/pseries: Support firmware disable of RFI flush
        powerpc/powernv: Support firmware disable of RFI flush
        powerpc/rfi-flush: Move the logic to avoid a redo into the debugfs code
        powerpc/rfi-flush: Make it possible to call setup_rfi_flush() again
        powerpc/rfi-flush: Always enable fallback flush on pseries
        powerpc/rfi-flush: Differentiate enabled and patched flush types
        powerpc/pseries: Add new H_GET_CPU_CHARACTERISTICS flags
        powerpc/rfi-flush: Call setup_rfi_flush() after LPM migration
        powerpc: Add security feature flags for Spectre/Meltdown
        powerpc/pseries: Set or clear security feature flags
        powerpc/powernv: Set or clear security feature flags
        powerpc/64s: Move cpu_show_meltdown()
        powerpc/64s: Enhance the information in cpu_show_meltdown()
        powerpc/powernv: Use the security flags in pnv_setup_rfi_flush()
        powerpc/pseries: Use the security flags in pseries_setup_rfi_flush()
        powerpc/64s: Wire up cpu_show_spectre_v1()
        powerpc/64s: Wire up cpu_show_spectre_v2()
        powerpc/pseries: Fix clearing of security feature flags
        powerpc: Move default security feature flags
        powerpc/pseries: Restore default security feature flags on setup
        powerpc/64s: Fix section mismatch warnings from setup_rfi_flush()
        powerpc/64s: Add support for a store forwarding barrier at kernel entry/exit
        powerpc/64s: Add barrier_nospec
        powerpc/64s: Add support for ori barrier_nospec patching
        powerpc/64s: Patch barrier_nospec in modules
        powerpc/64s: Enable barrier_nospec based on firmware settings
        powerpc/64: Use barrier_nospec in syscall entry
        powerpc: Use barrier_nospec in copy_from_user()
        powerpc/64s: Enhance the information in cpu_show_spectre_v1()
        powerpc64s: Show ori31 availability in spectre_v1 sysfs file not v2
        powerpc/64: Disable the speculation barrier from the command line
        powerpc/64: Make stf barrier PPC_BOOK3S_64 specific.
        powerpc/64: Add CONFIG_PPC_BARRIER_NOSPEC
        powerpc/64: Call setup_barrier_nospec() from setup_arch()
        powerpc/64: Make meltdown reporting Book3S 64 specific
        powerpc/fsl: Add barrier_nospec implementation for NXP PowerPC Book3E
        powerpc/asm: Add a patch_site macro & helpers for patching instructions
        powerpc/64s: Add new security feature flags for count cache flush
        powerpc/64s: Add support for software count cache flush
        powerpc/pseries: Query hypervisor for count cache flush settings
        powerpc/powernv: Query firmware for count cache flush settings
        powerpc: Avoid code patching freed init sections
        powerpc/fsl: Add infrastructure to fixup branch predictor flush
        powerpc/fsl: Add macro to flush the branch predictor
        powerpc/fsl: Fix spectre_v2 mitigations reporting
        powerpc/fsl: Add nospectre_v2 command line argument
        powerpc/fsl: Flush the branch predictor at each kernel entry (64bit)
        powerpc/fsl: Update Spectre v2 reporting
        powerpc/security: Fix spectre_v2 reporting
        powerpc/fsl: Fix the flush of branch predictor.
        tipc: handle the err returned from cmd header function
        slip: make slhc_free() silently accept an error pointer
        intel_th: gth: Fix an off-by-one in output unassigning
        fs/proc/proc_sysctl.c: Fix a NULL pointer dereference
        NFS: Forbid setting AF_INET6 to "struct sockaddr_in"->sin_family.
        netfilter: ebtables: CONFIG_COMPAT: drop a bogus WARN_ON
        tipc: check bearer name with right length in tipc_nl_compat_bearer_enable
        tipc: check link name with right length in tipc_nl_compat_link_set
        bpf: reject wrong sized filters earlier
        Revert "block/loop: Use global lock for ioctl() operation."
        ipv4: add sanity checks in ipv4_link_failure()
        team: fix possible recursive locking when add slaves
        net: stmmac: move stmmac_check_ether_addr() to driver probe
        ipv4: set the tcp_min_rtt_wlen range from 0 to one day
        powerpc/fsl: Enable runtime patching if nospectre_v2 boot arg is used
        powerpc/fsl: Flush branch predictor when entering KVM
        powerpc/fsl: Emulate SPRN_BUCSR register
        powerpc/fsl: Flush the branch predictor at each kernel entry (32 bit)
        powerpc/fsl: Sanitize the syscall table for NXP PowerPC 32 bit platforms
        powerpc/fsl: Fixed warning: orphan section `__btb_flush_fixup'
        powerpc/fsl: Add FSL_PPC_BOOK3E as supported arch for nospectre_v2 boot arg
        Documentation: Add nospectre_v1 parameter
        usbnet: ipheth: prevent TX queue timeouts when device not ready
        usbnet: ipheth: fix potential null pointer dereference in ipheth_carrier_set
        qlcnic: Avoid potential NULL pointer dereference
        netfilter: bridge: set skb transport_header before entering NF_INET_PRE_ROUTING
        sc16is7xx: missing unregister/delete driver on error in sc16is7xx_init()
        usb: gadget: net2280: Fix overrun of OUT messages
        usb: gadget: net2280: Fix net2280_dequeue()
        usb: gadget: net2272: Fix net2272_dequeue()
        ARM: dts: pfla02: increase phy reset duration
        net: ks8851: Dequeue RX packets explicitly
        net: ks8851: Reassert reset pin if chip ID check fails
        net: ks8851: Delay requesting IRQ until opened
        net: ks8851: Set initial carrier state to down
        net: xilinx: fix possible object reference leak
        net: ibm: fix possible object reference leak
        net: ethernet: ti: fix possible object reference leak
        scsi: qla4xxx: fix a potential NULL pointer dereference
        usb: u132-hcd: fix resource leak
        ceph: fix use-after-free on symlink traversal
        scsi: zfcp: reduce flood of fcrscn1 trace records on multi-element RSCN
        libata: fix using DMA buffers on stack
        kconfig/[mn]conf: handle backspace (^H) key
        vfio/type1: Limit DMA mappings per container
        ALSA: line6: use dynamic buffers
        ipv4: ip_do_fragment: Preserve skb_iif during fragmentation
        ipv6/flowlabel: wait rcu grace period before put_pid()
        ipv6: invert flowlabel sharing check in process and user mode
        bnxt_en: Improve multicast address setup logic.
        packet: validate msg_namelen in send directly
        USB: yurex: Fix protection fault after device removal
        USB: w1 ds2490: Fix bug caused by improper use of altsetting array
        USB: core: Fix unterminated string returned by usb_string()
        USB: core: Fix bug caused by duplicate interface PM usage counter
        HID: debug: fix race condition with between rdesc_show() and device removal
        rtc: sh: Fix invalid alarm warning for non-enabled alarm
        igb: Fix WARN_ONCE on runtime suspend
        bonding: show full hw address in sysfs for slave entries
        jffs2: fix use-after-free on symlink traversal
        debugfs: fix use-after-free on symlink traversal
        rtc: da9063: set uie_unsupported when relevant
        vfio/pci: use correct format characters
        scsi: storvsc: Fix calculation of sub-channel count
        net: hns: Use NAPI_POLL_WEIGHT for hns driver
        net: hns: Fix WARNING when remove HNS driver with SMMU enabled
        hugetlbfs: fix memory leak for resv_map
        xsysace: Fix error handling in ace_setup
        ARM: orion: don't use using 64-bit DMA masks
        ARM: iop: don't use using 64-bit DMA masks
        usb: usbip: fix isoc packet num validation in get_pipe
        staging: iio: adt7316: allow adt751x to use internal vref for all dacs
        staging: iio: adt7316: fix the dac read calculation
        staging: iio: adt7316: fix the dac write calculation
        Input: snvs_pwrkey - initialize necessary driver data before enabling IRQ
        selinux: never allow relabeling on context mounts
        x86/mce: Improve error message when kernel cannot recover, p2
        media: v4l2: i2c: ov7670: Fix PLL bypass register values
        scsi: libsas: fix a race condition when smp task timeout
        ASoC:soc-pcm:fix a codec fixup issue in TDM case
        ASoC: cs4270: Set auto-increment bit for register writes
        ASoC: tlv320aic32x4: Fix Common Pins
        perf/x86/intel: Fix handling of wakeup_events for multi-entry PEBS
        scsi: csiostor: fix missing data copy in csio_scsi_err_handler()
        iommu/amd: Set exclusion range correctly
        genirq: Prevent use-after-free and work list corruption
        usb: dwc3: Fix default lpm_nyet_threshold value
        scsi: qla2xxx: Fix incorrect region-size setting in optrom SYSFS routines
        Bluetooth: hidp: fix buffer overflow
        Bluetooth: Align minimum encryption key size for LE and BR/EDR connections
        UAS: fix alignment of scatter/gather segments
        ipv6: fix a potential deadlock in do_ipv6_setsockopt()
        ASoC: Intel: avoid Oops if DMA setup fails
        timer/debug: Change /proc/timer_stats from 0644 to 0600
        netfilter: compat: initialize all fields in xt_init
        platform/x86: sony-laptop: Fix unintentional fall-through
        iio: adc: xilinx: fix potential use-after-free on remove
        HID: input: add mapping for Expose/Overview key
        HID: input: add mapping for keyboard Brightness Up/Down/Toggle keys
        libnvdimm/btt: Fix a kmemdup failure check
        s390/dasd: Fix capacity calculation for large volumes
        s390/3270: fix lockdep false positive on view->lock
        KVM: x86: avoid misreporting level-triggered irqs as edge-triggered in tracing
        tools lib traceevent: Fix missing equality check for strcmp
        init: initialize jump labels before command line option parsing
        ipvs: do not schedule icmp errors from tunnels
        s390: ctcm: fix ctcm_new_device error return code
        selftests/net: correct the return value for run_netsocktests
        gpu: ipu-v3: dp: fix CSC handling
        cw1200: fix missing unlock on error in cw1200_hw_scan()
        x86/vdso: Pass --eh-frame-hdr to the linker
        Don't jump to compute_result state from check_result state
        locking/static_keys: Provide DECLARE and well as DEFINE macros
        x86/microcode/intel: Add a helper which gives the microcode revision
        x86: stop exporting msr-index.h to userland
        bitops: avoid integer overflow in GENMASK(_ULL)
        x86/microcode/intel: Check microcode revision before updating sibling threads
        x86/MCE: Save microcode revision in machine check records
        x86/cpufeatures: Hide AMD-specific speculation flags
        x86/speculation: Support Enhanced IBRS on future CPUs
        x86/speculation: Simplify the CPU bug detection logic
        x86/bugs: Add AMD's variant of SSB_NO
        x86/bugs: Add AMD's SPEC_CTRL MSR usage
        x86/bugs: Switch the selection of mitigation from CPU vendor to CPU features
        locking/atomics, asm-generic: Move some macros from <linux/bitops.h> to a new <linux/bits.h> file
        x86/bugs: Fix the AMD SSBD usage of the SPEC_CTRL MSR
        x86/speculation: Remove SPECTRE_V2_IBRS in enum spectre_v2_mitigation
        x86/microcode: Make sure boot_cpu_data.microcode is up-to-date
        x86/microcode: Update the new microcode revision unconditionally
        x86/cpu: Sanitize FAM6_ATOM naming
        KVM: x86: SVM: Call x86_spec_ctrl_set_guest/host() with interrupts disabled
        x86/mm: Use WRITE_ONCE() when setting PTEs
        x86/speculation: Apply IBPB more strictly to avoid cross-process data leak
        x86/speculation: Enable cross-hyperthread spectre v2 STIBP mitigation
        x86/speculation: Propagate information about RSB filling mitigation to sysfs
        x86/speculation: Update the TIF_SSBD comment
        x86/speculation: Clean up spectre_v2_parse_cmdline()
        x86/speculation: Remove unnecessary ret variable in cpu_show_common()
        x86/speculation: Move STIPB/IBPB string conditionals out of cpu_show_common()
        x86/speculation: Disable STIBP when enhanced IBRS is in use
        x86/speculation: Rename SSBD update functions
        x86/speculation: Reorganize speculation control MSRs update
        x86/Kconfig: Select SCHED_SMT if SMP enabled
        sched: Add sched_smt_active()
        x86/speculation: Rework SMT state change
        x86/speculation: Reorder the spec_v2 code
        x86/speculation: Mark string arrays const correctly
        x86/speculataion: Mark command line parser data __initdata
        x86/speculation: Unify conditional spectre v2 print functions
        x86/speculation: Add command line control for indirect branch speculation
        x86/speculation: Prepare for per task indirect branch speculation control
        x86/process: Consolidate and simplify switch_to_xtra() code
        x86/speculation: Avoid __switch_to_xtra() calls
        x86/speculation: Prepare for conditional IBPB in switch_mm()
        x86/speculation: Split out TIF update
        x86/speculation: Prepare arch_smt_update() for PRCTL mode
        x86/speculation: Prevent stale SPEC_CTRL msr content
        x86/speculation: Add prctl() control for indirect branch speculation
        x86/speculation: Enable prctl mode for spectre_v2_user
        x86/speculation: Add seccomp Spectre v2 user space protection mode
        x86/speculation: Provide IBPB always command line options
        kvm: x86: Report STIBP on GET_SUPPORTED_CPUID
        x86/msr-index: Cleanup bit defines
        x86/speculation: Consolidate CPU whitelists
        x86/speculation/mds: Add basic bug infrastructure for MDS
        x86/speculation/mds: Add BUG_MSBDS_ONLY
        x86/kvm: Expose X86_FEATURE_MD_CLEAR to guests
        x86/speculation/mds: Add mds_clear_cpu_buffers()
        x86/speculation/mds: Clear CPU buffers on exit to user
        x86/speculation/mds: Conditionally clear CPU buffers on idle entry
        x86/speculation/mds: Add mitigation control for MDS
        x86/speculation/l1tf: Document l1tf in sysfs
        x86/speculation/mds: Add sysfs reporting for MDS
        x86/speculation/mds: Add mitigation mode VMWERV
        Documentation: Move L1TF to separate directory
        Documentation: Add MDS vulnerability documentation
        x86/cpu/bugs: Use __initconst for 'const' init data
        x86/speculation: Move arch_smt_update() call to after mitigation decisions
        x86/speculation/mds: Add SMT warning message
        x86/speculation/mds: Fix comment
        x86/speculation/mds: Print SMT vulnerable on MSBDS with mitigations off
        cpu/speculation: Add 'mitigations=' cmdline option
        x86/speculation: Support 'mitigations=' cmdline option
        x86/speculation/mds: Add 'mitigations=' support for MDS
        x86/mds: Add MDSUM variant to the MDS documentation
        Documentation: Correct the possible MDS sysfs values
        x86/speculation/mds: Fix documentation typo
        x86/bugs: Change L1TF mitigation string to match upstream
        USB: serial: use variable for status
        USB: serial: fix unthrottle races
        powerpc/64s: Include cpu header
        bridge: Fix error path for kobject_init_and_add()
        net: ucc_geth - fix Oops when changing number of buffers in the ring
        packet: Fix error path in packet_init
        vlan: disable SIOCSHWTSTAMP in container
        vrf: sit mtu should not be updated when vrf netdev is the link
        ipv4: Fix raw socket lookup for local traffic
        bonding: fix arp_validate toggling in active-backup mode
        drivers/virt/fsl_hypervisor.c: dereferencing error pointers in ioctl
        drivers/virt/fsl_hypervisor.c: prevent integer overflow in ioctl
        powerpc/booke64: set RI in default MSR
        powerpc/lib: fix book3s/32 boot failure due to code patching
        Linux 4.4.180

Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>

Conflicts:
	arch/powerpc/include/asm/uaccess.h
	include/linux/cpu.h
	kernel/cpu.c
	kernel/irq/manage.c
	net/ipv4/sysctl_net_ipv4.c
2019-05-16 13:34:46 -07:00
Peter Zijlstra
10dbe22927 trace: Fix preempt_enable_no_resched() abuse
commit d6097c9e4454adf1f8f2c9547c2fa6060d55d952 upstream.

Unless the very next line is schedule(), or implies it, one must not use
preempt_enable_no_resched(). It can cause a preemption to go missing and
thereby cause arbitrary delays, breaking the PREEMPT=y invariant.

Link: http://lkml.kernel.org/r/20190423200318.GY14281@hirez.programming.kicks-ass.net

Cc: Waiman Long <longman@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: the arch/x86 maintainers <x86@kernel.org>
Cc: Davidlohr Bueso <dave@stgolabs.net>
Cc: Tim Chen <tim.c.chen@linux.intel.com>
Cc: huang ying <huang.ying.caritas@gmail.com>
Cc: Roman Gushchin <guro@fb.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: stable@vger.kernel.org
Fixes: 2c2d7329d8 ("tracing/ftrace: use preempt_enable_no_resched_notrace in ring_buffer_time_stamp()")
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-05-16 19:44:43 +02:00
Nathan Chancellor
79a097e001 Merge 4.4.179 into android-msm-wahoo-4.4
Changes in 4.4.179: (170 commits)
        arm64: debug: Don't propagate UNKNOWN FAR into si_code for debug signals
        arm64: debug: Ensure debug handlers check triggering exception level
        ext4: cleanup bh release code in ext4_ind_remove_space()
        lib/int_sqrt: optimize initial value compute
        tty/serial: atmel: Add is_half_duplex helper
        mm: mempolicy: make mbind() return -EIO when MPOL_MF_STRICT is specified
        i2c: core-smbus: prevent stack corruption on read I2C_BLOCK_DATA
        Bluetooth: Fix decrementing reference count twice in releasing socket
        tty/serial: atmel: RS485 HD w/DMA: enable RX after TX is stopped
        CIFS: fix POSIX lock leak and invalid ptr deref
        h8300: use cc-cross-prefix instead of hardcoding h8300-unknown-linux-
        tracing: kdb: Fix ftdump to not sleep
        gpio: gpio-omap: fix level interrupt idling
        sysctl: handle overflow for file-max
        enic: fix build warning without CONFIG_CPUMASK_OFFSTACK
        mm/cma.c: cma_declare_contiguous: correct err handling
        mm/page_ext.c: fix an imbalance with kmemleak
        mm/vmalloc.c: fix kernel BUG at mm/vmalloc.c:512!
        mm/slab.c: kmemleak no scan alien caches
        ocfs2: fix a panic problem caused by o2cb_ctl
        f2fs: do not use mutex lock in atomic context
        fs/file.c: initialize init_files.resize_wait
        cifs: use correct format characters
        dm thin: add sanity checks to thin-pool and external snapshot creation
        cifs: Fix NULL pointer dereference of devname
        fs: fix guard_bio_eod to check for real EOD errors
        tools lib traceevent: Fix buffer overflow in arg_eval
        usb: chipidea: Grab the (legacy) USB PHY by phandle first
        scsi: core: replace GFP_ATOMIC with GFP_KERNEL in scsi_scan.c
        coresight: etm4x: Add support to enable ETMv4.2
        ARM: 8840/1: use a raw_spinlock_t in unwind
        mmc: omap: fix the maximum timeout setting
        e1000e: Fix -Wformat-truncation warnings
        IB/mlx4: Increase the timeout for CM cache
        scsi: megaraid_sas: return error when create DMA pool failed
        perf test: Fix failure of 'evsel-tp-sched' test on s390
        SoC: imx-sgtl5000: add missing put_device()
        media: sh_veu: Correct return type for mem2mem buffer helpers
        media: s5p-jpeg: Correct return type for mem2mem buffer helpers
        media: s5p-g2d: Correct return type for mem2mem buffer helpers
        media: mx2_emmaprp: Correct return type for mem2mem buffer helpers
        leds: lp55xx: fix null deref on firmware load failure
        kprobes: Prohibit probing on bsearch()
        ARM: 8833/1: Ensure that NEON code always compiles with Clang
        ALSA: PCM: check if ops are defined before suspending PCM
        bcache: fix input overflow to cache set sysfs file io_error_halflife
        bcache: fix input overflow to sequential_cutoff
        bcache: improve sysfs_strtoul_clamp()
        fbdev: fbmem: fix memory access if logo is bigger than the screen
        cdrom: Fix race condition in cdrom_sysctl_register
        ASoC: fsl-asoc-card: fix object reference leaks in fsl_asoc_card_probe
        soc: qcom: gsbi: Fix error handling in gsbi_probe()
        mt7601u: bump supported EEPROM version
        ARM: avoid Cortex-A9 livelock on tight dmb loops
        tty: increase the default flip buffer limit to 2*640K
        media: mt9m111: set initial frame size other than 0x0
        hwrng: virtio - Avoid repeated init of completion
        soc/tegra: fuse: Fix illegal free of IO base address
        hpet: Fix missing '=' character in the __setup() code of hpet_mmap_enable
        dmaengine: imx-dma: fix warning comparison of distinct pointer types
        netfilter: physdev: relax br_netfilter dependency
        media: s5p-jpeg: Check for fmt_ver_flag when doing fmt enumeration
        regulator: act8865: Fix act8600_sudcdc_voltage_ranges setting
        wlcore: Fix memory leak in case wl12xx_fetch_firmware failure
        x86/build: Mark per-CPU symbols as absolute explicitly for LLD
        dmaengine: tegra: avoid overflow of byte tracking
        drm/dp/mst: Configure no_stop_bit correctly for remote i2c xfers
        binfmt_elf: switch to new creds when switching to new mm
        kbuild: clang: choose GCC_TOOLCHAIN_DIR not on LD
        x86/build: Specify elf_i386 linker emulation explicitly for i386 objects
        x86: vdso: Use $LD instead of $CC to link
        x86/vdso: Drop implicit common-page-size linker flag
        lib/string.c: implement a basic bcmp
        tty: mark Siemens R3964 line discipline as BROKEN
        tty: ldisc: add sysctl to prevent autoloading of ldiscs
        ipv6: Fix dangling pointer when ipv6 fragment
        ipv6: sit: reset ip header pointer in ipip6_rcv
        net: rds: force to destroy connection if t_sock is NULL in rds_tcp_kill_sock().
        openvswitch: fix flow actions reallocation
        qmi_wwan: add Olicard 600
        sctp: initialize _pad of sockaddr_in before copying to user memory
        tcp: Ensure DCTCP reacts to losses
        netns: provide pure entropy for net_hash_mix()
        net: ethtool: not call vzalloc for zero sized memory request
        ip6_tunnel: Match to ARPHRD_TUNNEL6 for dev type
        ALSA: seq: Fix OOB-reads from strlcpy
        include/linux/bitrev.h: fix constant bitrev
        ASoC: fsl_esai: fix channel swap issue when stream starts
        block: do not leak memory in bio_copy_user_iov()
        genirq: Respect IRQCHIP_SKIP_SET_WAKE in irq_chip_set_wake_parent()
        ARM: dts: at91: Fix typo in ISC_D0 on PC9
        arm64: futex: Fix FUTEX_WAKE_OP atomic ops with non-zero result value
        xen: Prevent buffer overflow in privcmd ioctl
        sched/fair: Do not re-read ->h_load_next during hierarchical load calculation
        xtensa: fix return_address
        PCI: Add function 1 DMA alias quirk for Marvell 9170 SATA controller
        perf/core: Restore mmap record type correctly
        ext4: add missing brelse() in add_new_gdb_meta_bg()
        ext4: report real fs size after failed resize
        ALSA: echoaudio: add a check for ioremap_nocache
        ALSA: sb8: add a check for request_region
        IB/mlx4: Fix race condition between catas error reset and aliasguid flows
        mmc: davinci: remove extraneous __init annotation
        ALSA: opl3: fix mismatch between snd_opl3_drum_switch definition and declaration
        thermal/int340x_thermal: Add additional UUIDs
        thermal/int340x_thermal: fix mode setting
        tools/power turbostat: return the exit status of a command
        perf top: Fix error handling in cmd_top()
        perf evsel: Free evsel->counts in perf_evsel__exit()
        perf tests: Fix a memory leak of cpu_map object in the openat_syscall_event_on_all_cpus test
        perf tests: Fix a memory leak in test__perf_evsel__tp_sched_test()
        x86/hpet: Prevent potential NULL pointer dereference
        x86/cpu/cyrix: Use correct macros for Cyrix calls on Geode processors
        iommu/vt-d: Check capability before disabling protected memory
        x86/hw_breakpoints: Make default case in hw_breakpoint_arch_parse() return an error
        fix incorrect error code mapping for OBJECTID_NOT_FOUND
        ext4: prohibit fstrim in norecovery mode
        rsi: improve kernel thread handling to fix kernel panic
        9p: do not trust pdu content for stat item size
        9p locks: add mount option for lock retry interval
        f2fs: fix to do sanity check with current segment number
        serial: uartps: console_setup() can't be placed to init section
        ARM: samsung: Limit SAMSUNG_PM_CHECK config option to non-Exynos platforms
        ACPI / SBS: Fix GPE storm on recent MacBookPro's
        cifs: fallback to older infolevels on findfirst queryinfo retry
        crypto: sha256/arm - fix crash bug in Thumb2 build
        crypto: sha512/arm - fix crash bug in Thumb2 build
        iommu/dmar: Fix buffer overflow during PCI bus notification
        ARM: 8839/1: kprobe: make patch_lock a raw_spinlock_t
        appletalk: Fix use-after-free in atalk_proc_exit
        lib/div64.c: off by one in shift
        include/linux/swap.h: use offsetof() instead of custom __swapoffset macro
        tpm/tpm_crb: Avoid unaligned reads in crb_recv()
        ovl: fix uid/gid when creating over whiteout
        appletalk: Fix compile regression
        bonding: fix event handling for stacked bonds
        net: atm: Fix potential Spectre v1 vulnerabilities
        net: bridge: multicast: use rcu to access port list from br_multicast_start_querier
        net: fou: do not use guehdr after iptunnel_pull_offloads in gue_udp_recv
        tcp: tcp_grow_window() needs to respect tcp_space()
        ipv4: recompile ip options in ipv4_link_failure
        ipv4: ensure rcu_read_lock() in ipv4_link_failure()
        crypto: crypto4xx - properly set IV after de- and encrypt
        modpost: file2alias: go back to simple devtable lookup
        modpost: file2alias: check prototype of handler
        tpm/tpm_i2c_atmel: Return -E2BIG when the transfer is incomplete
        KVM: x86: Don't clear EFER during SMM transitions for 32-bit vCPU
        iio/gyro/bmg160: Use millidegrees for temperature scale
        iio: ad_sigma_delta: select channel when reading register
        iio: adc: at91: disable adc channel interrupt in timeout case
        io: accel: kxcjk1013: restore the range after resume.
        staging: comedi: vmk80xx: Fix use of uninitialized semaphore
        staging: comedi: vmk80xx: Fix possible double-free of ->usb_rx_buf
        staging: comedi: ni_usb6501: Fix use of uninitialized mutex
        staging: comedi: ni_usb6501: Fix possible double-free of ->usb_rx_buf
        ALSA: core: Fix card races between register and disconnect
        crypto: x86/poly1305 - fix overflow during partial reduction
        arm64: futex: Restore oldval initialization to work around buggy compilers
        x86/kprobes: Verify stack frame on kretprobe
        kprobes: Mark ftrace mcount handler functions nokprobe
        kprobes: Fix error check when reusing optimized probes
        mac80211: do not call driver wake_tx_queue op during reconfig
        Revert "kbuild: use -Oz instead of -Os when using clang"
        sched/fair: Limit sched_cfs_period_timer() loop to avoid hard lockup
        device_cgroup: fix RCU imbalance in error case
        mm/vmstat.c: fix /proc/vmstat format for CONFIG_DEBUG_TLBFLUSH=y CONFIG_SMP=n
        ALSA: info: Fix racy addition/deletion of nodes
        Revert "locking/lockdep: Add debug_locks check in __lock_downgrade()"
        kernel/sysctl.c: fix out-of-bounds access when setting file-max
        Linux 4.4.179

Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>

Conflicts:
	Makefile
	fs/ext4/ioctl.c
2019-04-27 09:07:11 -07:00
Douglas Anderson
f7b7a59b47 tracing: kdb: Fix ftdump to not sleep
[ Upstream commit 31b265b3baaf55f209229888b7ffea523ddab366 ]

As reported back in 2016-11 [1], the "ftdump" kdb command triggers a
BUG for "sleeping function called from invalid context".

kdb's "ftdump" command wants to call ring_buffer_read_prepare() in
atomic context.  A very simple solution for this is to add allocation
flags to ring_buffer_read_prepare() so kdb can call it without
triggering the allocation error.  This patch does that.

Note that in the original email thread about this, it was suggested
that perhaps the solution for kdb was to either preallocate the buffer
ahead of time or create our own iterator.  I'm hoping that this
alternative of adding allocation flags to ring_buffer_read_prepare()
can be considered since it means I don't need to duplicate more of the
core trace code into "trace_kdb.c" (for either creating my own
iterator or re-preparing a ring allocator whose memory was already
allocated).

NOTE: another option for kdb is to actually figure out how to make it
reuse the existing ftrace_dump() function and totally eliminate the
duplication.  This sounds very appealing and actually works (the "sr
z" command can be seen to properly dump the ftrace buffer).  The
downside here is that ftrace_dump() fully consumes the trace buffer.
Unless that is changed I'd rather not use it because it means "ftdump
| grep xyz" won't be very useful to search the ftrace buffer since it
will throw away the whole trace on the first grep.  A future patch to
dump only the last few lines of the buffer will also be hard to
implement.

[1] https://lkml.kernel.org/r/20161117191605.GA21459@google.com

Link: http://lkml.kernel.org/r/20190308193205.213659-1-dianders@chromium.org

Reported-by: Brian Norris <briannorris@chromium.org>
Signed-off-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-04-27 09:33:48 +02:00
Nathan Chancellor
c2ada16481 Merge 4.4.159 into android-msm-wahoo-4.4
Changes in 4.4.159: (29 commits)
        NFC: Fix possible memory corruption when handling SHDLC I-Frame commands
        NFC: Fix the number of pipes
        ASoC: cs4265: fix MMTLR Data switch control
        ALSA: bebob: use address returned by kmalloc() instead of kernel stack for streaming DMA mapping
        ALSA: emu10k1: fix possible info leak to userspace on SNDRV_EMU10K1_IOCTL_INFO
        platform/x86: alienware-wmi: Correct a memory leak
        xen/netfront: don't bug in case of too many frags
        xen/x86/vpmu: Zero struct pt_regs before calling into sample handling code
        ring-buffer: Allow for rescheduling when removing pages
        mm: shmem.c: Correctly annotate new inodes for lockdep
        gso_segment: Reset skb->mac_len after modifying network header
        ipv6: fix possible use-after-free in ip6_xmit()
        net/appletalk: fix minor pointer leak to userspace in SIOCFINDIPDDPRT
        net: hp100: fix always-true check for link up state
        neighbour: confirm neigh entries when ARP packet is received
        scsi: target: iscsi: Use hex2bin instead of a re-implementation
        ocfs2: fix ocfs2 read block panic
        drm/nouveau/drm/nouveau: Use pm_runtime_get_noresume() in connector_detect()
        tty: vt_ioctl: fix potential Spectre v1
        ext4: avoid divide by zero fault when deleting corrupted inline directories
        ext4: recalucate superblock checksum after updating free blocks/inodes
        ext4: fix online resize's handling of a too-small final block group
        ext4: fix online resizing for bigalloc file systems with a 1k block size
        ext4: don't mark mmp buffer head dirty
        arm64: Add trace_hardirqs_off annotation in ret_to_user
        HID: sony: Update device ids
        HID: sony: Support DS4 dongle
        iw_cxgb4: only allow 1 flush on user qps
        Linux 4.4.159

Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>

Conflicts:
	drivers/hid/hid-core.c
2018-09-29 07:24:00 -07:00
Vaibhav Nagarnaik
fed4d566a8 ring-buffer: Allow for rescheduling when removing pages
commit 83f365554e47997ec68dc4eca3f5dce525cd15c3 upstream.

When reducing ring buffer size, pages are removed by scheduling a work
item on each CPU for the corresponding CPU ring buffer. After the pages
are removed from ring buffer linked list, the pages are free()d in a
tight loop. The loop does not give up CPU until all pages are removed.
In a worst case behavior, when lot of pages are to be freed, it can
cause system stall.

After the pages are removed from the list, the free() can happen while
the work is rescheduled. Call cond_resched() in the loop to prevent the
system hangup.

Link: http://lkml.kernel.org/r/20180907223129.71994-1-vnagarnaik@google.com

Cc: stable@vger.kernel.org
Fixes: 83f40318da ("ring-buffer: Make removal of ring buffer pages atomic")
Reported-by: Jason Behmer <jbehmer@google.com>
Signed-off-by: Vaibhav Nagarnaik <vnagarnaik@google.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-09-29 03:08:52 -07:00
Nathan Chancellor
879bbe15b3 Merge 4.4.147 into android-msm-wahoo-4.4
Changes in 4.4.147: (13 commits)
        scsi: qla2xxx: Fix ISP recovery on unload
        scsi: qla2xxx: Return error when TMF returns
        genirq: Make force irq threading setup more robust
        nohz: Fix local_timer_softirq_pending()
        netlink: Do not subscribe to non-existent groups
        netlink: Don't shift with UB on nlk->ngroups
        netlink: Don't shift on 64 for ngroups
        ext4: fix false negatives *and* false positives in ext4_check_descriptors()
        ACPI / PCI: Bail early in acpi_pci_add_bus() if there is no ACPI handle
        ring_buffer: tracing: Inherit the tracing setting to next ring buffer
        i2c: imx: Fix reinit_completion() use
        jfs: Fix inconsistency between memory allocation and ea_buf->max_size
        Linux 4.4.147

Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
2018-08-09 08:57:36 -07:00
Masami Hiramatsu
731ccd90b8 ring_buffer: tracing: Inherit the tracing setting to next ring buffer
commit 73c8d8945505acdcbae137c2e00a1232e0be709f upstream.

Maintain the tracing on/off setting of the ring_buffer when switching
to the trace buffer snapshot.

Taking a snapshot is done by swapping the backup ring buffer
(max_tr_buffer). But since the tracing on/off setting is defined
by the ring buffer, when swapping it, the tracing on/off setting
can also be changed. This causes a strange result like below:

  /sys/kernel/debug/tracing # cat tracing_on
  1
  /sys/kernel/debug/tracing # echo 0 > tracing_on
  /sys/kernel/debug/tracing # cat tracing_on
  0
  /sys/kernel/debug/tracing # echo 1 > snapshot
  /sys/kernel/debug/tracing # cat tracing_on
  1
  /sys/kernel/debug/tracing # echo 1 > snapshot
  /sys/kernel/debug/tracing # cat tracing_on
  0

We don't touch tracing_on, but snapshot changes tracing_on
setting each time. This is an anomaly, because user doesn't know
that each "ring_buffer" stores its own tracing-enable state and
the snapshot is done by swapping ring buffers.

Link: http://lkml.kernel.org/r/153149929558.11274.11730609978254724394.stgit@devbox

Cc: Ingo Molnar <mingo@redhat.com>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Tom Zanussi <tom.zanussi@linux.intel.com>
Cc: Hiraku Toyooka <hiraku.toyooka@cybertrust.co.jp>
Cc: stable@vger.kernel.org
Fixes: debdd57f51 ("tracing: Make a snapshot feature available from userspace")
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
[ Updated commit log and comment in the code ]
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-08-09 12:19:28 +02:00
Nathan Chancellor
d527d12d12 Merge 4.4.109 into android-msm-wahoo-4.4-oreo-mr1
Changes in 4.4.109: (65 commits)
        ACPI: APEI / ERST: Fix missing error handling in erst_reader()
        crypto: mcryptd - protect the per-CPU queue with a lock
        mfd: cros ec: spi: Don't send first message too soon
        mfd: twl4030-audio: Fix sibling-node lookup
        mfd: twl6040: Fix child-node lookup
        ALSA: rawmidi: Avoid racy info ioctl via ctl device
        ALSA: usb-audio: Fix the missing ctl name suffix at parsing SU
        PCI / PM: Force devices to D0 in pci_pm_thaw_noirq()
        parisc: Hide Diva-built-in serial aux and graphics card
        spi: xilinx: Detect stall with Unknown commands
        KVM: X86: Fix load RFLAGS w/o the fixed bit
        kvm: x86: fix RSM when PCID is non-zero
        powerpc/perf: Dereference BHRB entries safely
        net: mvneta: clear interface link status on port disable
        tracing: Remove extra zeroing out of the ring buffer page
        tracing: Fix possible double free on failure of allocating trace buffer
        tracing: Fix crash when it fails to alloc ring buffer
        ring-buffer: Mask out the info bits when returning buffer page length
        iw_cxgb4: Only validate the MSN for successful completions
        ASoC: fsl_ssi: AC'97 ops need regmap, clock and cleaning up on failure
        ASoC: twl4030: fix child-node lookup
        ALSA: hda: Drop useless WARN_ON()
        ALSA: hda - fix headset mic detection issue on a Dell machine
        x86/vm86/32: Switch to flush_tlb_mm_range() in mark_screen_rdonly()
        x86/mm: Remove flush_tlb() and flush_tlb_current_task()
        x86/mm: Make flush_tlb_mm_range() more predictable
        x86/mm: Reimplement flush_tlb_page() using flush_tlb_mm_range()
        x86/mm: Remove the UP asm/tlbflush.h code, always use the (formerly) SMP code
        x86/mm: Disable PCID on 32-bit kernels
        x86/mm: Add the 'nopcid' boot option to turn off PCID
        x86/mm: Enable CR4.PCIDE on supported systems
        x86/mm/64: Fix reboot interaction with CR4.PCIDE
        kbuild: add '-fno-stack-check' to kernel build options
        ipv4: igmp: guard against silly MTU values
        ipv6: mcast: better catch silly mtu values
        net: igmp: Use correct source address on IGMPv3 reports
        netlink: Add netns check on taps
        net: qmi_wwan: add Sierra EM7565 1199:9091
        net: reevalulate autoflowlabel setting after sysctl setting
        tcp md5sig: Use skb's saddr when replying to an incoming segment
        tg3: Fix rx hang on MTU change with 5717/5719
        net: ipv4: fix for a race condition in raw_sendmsg
        net: mvmdio: disable/unprepare clocks in EPROBE_DEFER case
        sctp: Replace use of sockets_allocated with specified macro.
        ipv4: Fix use-after-free when flushing FIB tables
        net: bridge: fix early call to br_stp_change_bridge_id and plug newlink leaks
        net: Fix double free and memory corruption in get_net_ns_by_id()
        net: phy: micrel: ksz9031: reconfigure autoneg after phy autoneg workaround
        sock: free skb in skb_complete_tx_timestamp on error
        usbip: fix usbip bind writing random string after command in match_busid
        usbip: stub: stop printing kernel pointer addresses in messages
        usbip: vhci: stop printing kernel pointer addresses in messages
        USB: serial: ftdi_sio: add id for Airbus DS P8GR
        USB: serial: qcserial: add Sierra Wireless EM7565
        USB: serial: option: add support for Telit ME910 PID 0x1101
        USB: serial: option: adding support for YUGA CLM920-NC5
        usb: Add device quirk for Logitech HD Pro Webcam C925e
        usb: add RESET_RESUME for ELSA MicroLink 56K
        USB: Fix off by one in type-specific length check of BOS SSP capability
        usb: xhci: Add XHCI_TRUST_TX_LENGTH for Renesas uPD720201
        nohz: Prevent a timer interrupt storm in tick_nohz_stop_sched_tick()
        x86/smpboot: Remove stale TLB flush invocations
        n_tty: fix EXTPROC vs ICANON interaction with TIOCINQ (aka FIONREAD)
        mm/vmstat: Make NR_TLB_REMOTE_FLUSH_RECEIVED available even on UP
        Linux 4.4.109

Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>

Conflicts:
	net/ipv4/raw.c
2018-01-02 16:19:13 -07:00
Steven Rostedt (VMware)
9dc9648942 ring-buffer: Mask out the info bits when returning buffer page length
commit 45d8b80c2ac5d21cd1e2954431fb676bc2b1e099 upstream.

Two info bits were added to the "commit" part of the ring buffer data page
when returned to be consumed. This was to inform the user space readers that
events have been missed, and that the count may be stored at the end of the
page.

What wasn't handled, was the splice code that actually called a function to
return the length of the data in order to zero out the rest of the page
before sending it up to user space. These data bits were returned with the
length making the value negative, and that negative value was not checked.
It was compared to PAGE_SIZE, and only used if the size was less than
PAGE_SIZE. Luckily PAGE_SIZE is unsigned long which made the compare an
unsigned compare, meaning the negative size value did not end up causing a
large portion of memory to be randomly zeroed out.

Fixes: 66a8cb95ed ("ring-buffer: Add place holder recording of dropped events")
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-01-02 20:33:22 +01:00
Thierry Strudel
b11ab24fe6 Merged linux-4.4.70 into android-msm-wahoo-4.4
Linux 4.4.70
    drivers: char: mem: Check for address space wraparound with mmap()
    nfsd: encoders mustn't use unitialized values in error cases
    drm/edid: Add 10 bpc quirk for LGD 764 panel in HP zBook 17 G2
    PCI: Freeze PME scan before suspending devices
    PCI: Fix pci_mmap_fits() for HAVE_PCI_RESOURCE_TO_USER platforms
    tracing/kprobes: Enforce kprobes teardown after testing
    osf_wait4(): fix infoleak
    genirq: Fix chained interrupt data ordering
    uwb: fix device quirk on big-endian hosts
    metag/uaccess: Check access_ok in strncpy_from_user
    metag/uaccess: Fix access_ok()
    iommu/vt-d: Flush the IOTLB to get rid of the initial kdump mappings
    staging: rtl8192e: rtl92e_get_eeprom_size Fix read size of EPROM_CMD.
    staging: rtl8192e: fix 2 byte alignment of register BSSIDR.
    mm/huge_memory.c: respect FOLL_FORCE/FOLL_COW for thp
    xc2028: Fix use-after-free bug properly
    arm64: documentation: document tagged pointer stack constraints
    arm64: uaccess: ensure extension of access_ok() addr
    arm64: xchg: hazard against entire exchange variable
    ARM: dts: at91: sama5d3_xplained: not all ADC channels are available
    ARM: dts: at91: sama5d3_xplained: fix ADC vref
    powerpc/64e: Fix hang when debugging programs with relocated kernel
    powerpc/pseries: Fix of_node_put() underflow during DLPAR remove
    powerpc/book3s/mce: Move add_taint() later in virtual mode
    cx231xx-cards: fix NULL-deref at probe
    cx231xx-audio: fix NULL-deref at probe
    cx231xx-audio: fix init error path
    dvb-frontends/cxd2841er: define symbol_rate_min/max in T/C fe-ops
    zr364xx: enforce minimum size when reading header
    dib0700: fix NULL-deref at probe
    s5p-mfc: Fix unbalanced call to clock management
    gspca: konica: add missing endpoint sanity check
    ceph: fix recursion between ceph_set_acl() and __ceph_setattr()
    iio: proximity: as3935: fix as3935_write
    ipx: call ipxitf_put() in ioctl error path
    USB: hub: fix non-SS hub-descriptor handling
    USB: hub: fix SS hub-descriptor handling
    USB: serial: io_ti: fix div-by-zero in set_termios
    USB: serial: mct_u232: fix big-endian baud-rate handling
    USB: serial: qcserial: add more Lenovo EM74xx device IDs
    usb: serial: option: add Telit ME910 support
    USB: iowarrior: fix info ioctl on big-endian hosts
    usb: musb: tusb6010_omap: Do not reset the other direction's packet size
    ttusb2: limit messages to buffer size
    mceusb: fix NULL-deref at probe
    usbvision: fix NULL-deref at probe
    net: irda: irda-usb: fix firmware name on big-endian hosts
    usb: host: xhci-mem: allocate zeroed Scratchpad Buffer
    xhci: apply PME_STUCK_QUIRK and MISSING_CAS quirk for Denverton
    usb: host: xhci-plat: propagate return value of platform_get_irq()
    sched/fair: Initialize throttle_count for new task-groups lazily
    sched/fair: Do not announce throttled next buddy in dequeue_task_fair()
    fscrypt: avoid collisions when presenting long encrypted filenames
    f2fs: check entire encrypted bigname when finding a dentry
    fscrypt: fix context consistency check when key(s) unavailable
    net: qmi_wwan: Add SIMCom 7230E
    ext4 crypto: fix some error handling
    ext4 crypto: don't let data integrity writebacks fail with ENOMEM
    USB: serial: ftdi_sio: add Olimex ARM-USB-TINY(H) PIDs
    USB: serial: ftdi_sio: fix setting latency for unprivileged users
    pid_ns: Fix race between setns'ed fork() and zap_pid_ns_processes()
    pid_ns: Sleep in TASK_INTERRUPTIBLE in zap_pid_ns_processes
    iio: dac: ad7303: fix channel description
    of: fix sparse warning in of_pci_range_parser_one
    proc: Fix unbalanced hard link numbers
    cdc-acm: fix possible invalid access when processing notification
    drm/nouveau/tmr: handle races with hw when updating the next alarm time
    drm/nouveau/tmr: avoid processing completed alarms when adding a new one
    drm/nouveau/tmr: fix corruption of the pending list when rescheduling an alarm
    drm/nouveau/tmr: ack interrupt before processing alarms
    drm/nouveau/therm: remove ineffective workarounds for alarm bugs
    drm/amdgpu: Make display watermark calculations more accurate
    drm/amdgpu: Avoid overflows/divide-by-zero in latency_watermark calculations.
    ath9k_htc: fix NULL-deref at probe
    ath9k_htc: Add support of AirTies 1eda:2315 AR9271 device
    s390/cputime: fix incorrect system time
    s390/kdump: Add final note
    regulator: tps65023: Fix inverted core enable logic.
    KVM: X86: Fix read out-of-bounds vulnerability in kvm pio emulation
    KVM: x86: Fix load damaged SSEx MXCSR register
    ima: accept previously set IMA_NEW_FILE
    mwifiex: pcie: fix cmd_buf use-after-free in remove/reset
    rtlwifi: rtl8821ae: setup 8812ae RFE according to device type
    md: update slab_cache before releasing new stripes when stripes resizing
    dm space map disk: fix some book keeping in the disk space map
    dm thin metadata: call precommit before saving the roots
    dm bufio: make the parameter "retain_bytes" unsigned long
    dm cache metadata: fail operations if fail_io mode has been established
    dm bufio: check new buffer allocation watermark every 30 seconds
    dm bufio: avoid a possible ABBA deadlock
    dm raid: select the Kconfig option CONFIG_MD_RAID0
    dm btree: fix for dm_btree_find_lowest_key()
    infiniband: call ipv6 route lookup via the stub interface
    tpm_crb: check for bad response size
    ARM: tegra: paz00: Mark panel regulator as enabled on boot
    USB: core: replace %p with %pK
    char: lp: fix possible integer overflow in lp_setup()
    watchdog: pcwd_usb: fix NULL-deref at probe
    USB: ene_usb6250: fix DMA to the stack
    usb: misc: legousbtower: Fix memory leak
    usb: misc: legousbtower: Fix buffers on stack
Linux 4.4.69
    ipmi: Fix kernel panic at ipmi_ssif_thread()
    wlcore: Add RX_BA_WIN_SIZE_CHANGE_EVENT event
    wlcore: Pass win_size taken from ieee80211_sta to FW
    mac80211: RX BA support for sta max_rx_aggregation_subframes
    mac80211: pass block ack session timeout to to driver
    mac80211: pass RX aggregation window size to driver
    Bluetooth: hci_intel: add missing tty-device sanity check
    Bluetooth: hci_bcm: add missing tty-device sanity check
    Bluetooth: Fix user channel for 32bit userspace on 64bit kernel
    tty: pty: Fix ldisc flush after userspace become aware of the data already
    serial: omap: suspend device on probe errors
    serial: omap: fix runtime-pm handling on unbind
    serial: samsung: Use right device for DMA-mapping calls
    arm64: KVM: Fix decoding of Rt/Rt2 when trapping AArch32 CP accesses
    padata: free correct variable
    CIFS: add misssing SFM mapping for doublequote
    cifs: fix CIFS_IOC_GET_MNT_INFO oops
    CIFS: fix mapping of SFM_SPACE and SFM_PERIOD
    SMB3: Work around mount failure when using SMB3 dialect to Macs
    Set unicode flag on cifs echo request to avoid Mac error
    fs/block_dev: always invalidate cleancache in invalidate_bdev()
    ceph: fix memory leak in __ceph_setxattr()
    fs/xattr.c: zero out memory copied to userspace in getxattr
    ext4: evict inline data when writing to memory map
    IB/mlx4: Reduce SRIOV multicast cleanup warning message to debug level
    IB/mlx4: Fix ib device initialization error flow
    IB/IPoIB: ibX: failed to create mcg debug file
    IB/core: Fix sysfs registration error flow
    vfio/type1: Remove locked page accounting workqueue
    dm era: save spacemap metadata root after the pre-commit
    crypto: algif_aead - Require setkey before accept(2)
    block: fix blk_integrity_register to use template's interval_exp if not 0
    KVM: arm/arm64: fix races in kvm_psci_vcpu_on
    KVM: x86: fix user triggerable warning in kvm_apic_accept_events()
    um: Fix PTRACE_POKEUSER on x86_64
    x86, pmem: Fix cache flushing for iovec write < 8 bytes
    selftests/x86/ldt_gdt_32: Work around a glibc sigaction() bug
    x86/boot: Fix BSS corruption/overwrite bug in early x86 kernel startup
    usb: hub: Do not attempt to autosuspend disconnected devices
    usb: hub: Fix error loop seen after hub communication errors
    usb: Make sure usb/phy/of gets built-in
    usb: misc: add missing continue in switch
    staging: comedi: jr3_pci: cope with jiffies wraparound
    staging: comedi: jr3_pci: fix possible null pointer dereference
    staging: gdm724x: gdm_mux: fix use-after-free on module unload
    staging: vt6656: use off stack for out buffer USB transfers.
    staging: vt6656: use off stack for in buffer USB transfers.
    USB: Proper handling of Race Condition when two USB class drivers try to call init_usb_class simultaneously
    USB: serial: ftdi_sio: add device ID for Microsemi/Arrow SF2PLUS Dev Kit
    usb: host: xhci: print correct command ring address
    iscsi-target: Set session_fall_back_to_erl0 when forcing reinstatement
    target: Convert ACL change queue_depth se_session reference usage
    target/fileio: Fix zero-length READ and WRITE handling
    target: Fix compare_and_write_callback handling for non GOOD status
    xen: adjust early dom0 p2m handling to xen hypervisor behavior
Linux 4.4.68
    block: get rid of blk_integrity_revalidate()
    drm/ttm: fix use-after-free races in vm fault handling
    f2fs: sanity check segment count
    bnxt_en: allocate enough space for ->ntp_fltr_bmap
    ipv6: reorder ip6_route_dev_notifier after ipv6_dev_notf
    ipv6: initialize route null entry in addrconf_init()
    rtnetlink: NUL-terminate IFLA_PHYS_PORT_NAME string
    ipv4, ipv6: ensure raw socket message is big enough to hold an IP header
    tcp: do not inherit fastopen_req from parent
    tcp: fix wraparound issue in tcp_lp
    bpf, arm64: fix jit branch offset related to ldimm64
    tcp: do not underestimate skb->truesize in tcp_trim_head()
    ALSA: hda - Fix deadlock of controller device lock at unbinding
    staging: emxx_udc: remove incorrect __init annotations
    staging: wlan-ng: add missing byte order conversion
    brcmfmac: Make skb header writable before use
    brcmfmac: Ensure pointer correctly set if skb data location changes
    MIPS: R2-on-R6 MULTU/MADDU/MSUBU emulation bugfix
    scsi: mac_scsi: Fix MAC_SCSI=m option when SCSI=m
    serial: 8250_omap: Fix probe and remove for PM runtime
    phy: qcom-usb-hs: Add depends on EXTCON
    USB: serial: io_edgeport: fix descriptor error handling
    USB: serial: mct_u232: fix modem-status error handling
    USB: serial: quatech2: fix control-message error handling
    USB: serial: ftdi_sio: fix latency-timer error handling
    USB: serial: ark3116: fix open error handling
    USB: serial: ti_usb_3410_5052: fix control-message error handling
    USB: serial: io_edgeport: fix epic-descriptor handling
    USB: serial: ssu100: fix control-message error handling
    USB: serial: digi_acceleport: fix incomplete rx sanity check
    USB: serial: keyspan_pda: fix receive sanity checks
    usb: chipidea: Handle extcon events properly
    usb: chipidea: Only read/write OTGSC from one place
    usb: host: ohci-exynos: Decrese node refcount on exynos_ehci_get_phy() error paths
    usb: host: ehci-exynos: Decrese node refcount on exynos_ehci_get_phy() error paths
    KVM: nVMX: do not leak PML full vmexit to L1
    KVM: nVMX: initialize PML fields in vmcs02
    Revert "KVM: nested VMX: disable perf cpuid reporting"
    x86/platform/intel-mid: Correct MSI IRQ line for watchdog device
    kprobes/x86: Fix kernel panic when certain exception-handling addresses are probed
    clk: Make x86/ conditional on CONFIG_COMMON_CLK
    x86/pci-calgary: Fix iommu_free() comparison of unsigned expression >= 0
    x86/ioapic: Restore IO-APIC irq_chip retrigger callback
    mwifiex: Avoid skipping WEP key deletion for AP
    mwifiex: remove redundant dma padding in AMSDU
    mwifiex: debugfs: Fix (sometimes) off-by-1 SSID print
    ARM: OMAP5 / DRA7: Fix HYP mode boot for thumb2 build
    leds: ktd2692: avoid harmless maybe-uninitialized warning
    power: supply: bq24190_charger: Handle fault before status on interrupt
    power: supply: bq24190_charger: Don't read fault register outside irq_handle_thread()
    power: supply: bq24190_charger: Call power_supply_changed() for relevant component
    power: supply: bq24190_charger: Install irq_handler_thread() at end of probe()
    power: supply: bq24190_charger: Call set_mode_host() on pm_resume()
    power: supply: bq24190_charger: Fix irq trigger to IRQF_TRIGGER_FALLING
    powerpc/powernv: Fix opal_exit tracepoint opcode
    cpupower: Fix turbo frequency reporting for pre-Sandy Bridge cores
    ARM: 8452/3: PJ4: make coprocessor access sequences buildable in Thumb2 mode
    9p: fix a potential acl leak
Linux 4.4.67
    dm ioctl: prevent stack leak in dm ioctl call
    nfsd: stricter decoding of write-like NFSv2/v3 ops
    nfsd4: minor NFSv2/v3 write decoding cleanup
    ext4/fscrypto: avoid RCU lookup in d_revalidate
    ext4 crypto: use dget_parent() in ext4_d_revalidate()
    ext4 crypto: revalidate dentry after adding or removing the key
    ext4: require encryption feature for EXT4_IOC_SET_ENCRYPTION_POLICY
    IB/ehca: fix maybe-uninitialized warnings
    IB/qib: rename BITS_PER_PAGE to RVT_BITS_PER_PAGE
    netlink: Allow direct reclaim for fallback allocation
    8250_pci: Fix potential use-after-free in error path
    scsi: cxlflash: Improve EEH recovery time
    scsi: cxlflash: Fix to avoid EEH and host reset collisions
    scsi: cxlflash: Scan host only after the port is ready for I/O
    net: tg3: avoid uninitialized variable warning
    mtd: avoid stack overflow in MTD CFI code
    drbd: avoid redefinition of BITS_PER_PAGE
    ALSA: ppc/awacs: shut up maybe-uninitialized warning
    ASoC: intel: Fix PM and non-atomic crash in bytcr drivers
    Handle mismatched open calls
    timerfd: Protect the might cancel mechanism proper
Linux 4.4.66
    ftrace/x86: Fix triple fault with graph tracing and suspend-to-ram
    ARCv2: save r30 on kernel entry as gcc uses it for code-gen
    nfsd: check for oversized NFSv2/v3 arguments
    Input: i8042 - add Clevo P650RS to the i8042 reset list
    p9_client_readdir() fix
    MIPS: Avoid BUG warning in arch_check_elf
    MIPS: KGDB: Use kernel context for sleeping threads
    ALSA: seq: Don't break snd_use_lock_sync() loop by timeout
    ALSA: firewire-lib: fix inappropriate assignment between signed/unsigned type
    ipv6: check raw payload size correctly in ioctl
    ipv6: check skb->protocol before lookup for nexthop
    macvlan: Fix device ref leak when purging bc_queue
    ip6mr: fix notification device destruction
    netpoll: Check for skb->queue_mapping
    net: ipv6: RTF_PCPU should not be settable from userspace
    dp83640: don't recieve time stamps twice
    tcp: clear saved_syn in tcp_disconnect()
    sctp: listen on the sock only when it's state is listening or closed
    net: ipv4: fix multipath RTM_GETROUTE behavior when iif is given
    l2tp: fix PPP pseudo-wire auto-loading
    l2tp: take reference on sessions being dumped
    net/packet: fix overflow in check for tp_reserve
    net/packet: fix overflow in check for tp_frame_nr
    l2tp: purge socket queues in the .destruct() callback
    net: phy: handle state correctly in phy_stop_machine
    net: neigh: guard against NULL solicit() method
    sparc64: Fix kernel panic due to erroneous #ifdef surrounding pmd_write()
    sparc64: kern_addr_valid regression
    xen/x86: don't lose event interrupts
    usb: gadget: f_midi: Fixed a bug when buflen was smaller than wMaxPacketSize
    regulator: core: Clear the supply pointer if enabling fails
    RDS: Fix the atomicity for congestion map update
    net_sched: close another race condition in tcf_mirred_release()
    net: cavium: liquidio: Avoid dma_unmap_single on uninitialized ndata
    MIPS: Fix crash registers on non-crashing CPUs
    md:raid1: fix a dead loop when read from a WriteMostly disk
    ext4: check if in-inode xattr is corrupted in ext4_expand_extra_isize_ea()
    drm/amdgpu: fix array out of bounds
    crypto: testmgr - fix out of bound read in __test_aead()
    clk: sunxi: Add apb0 gates for H3
    ARM: OMAP2+: timer: add probe for clocksources
    xc2028: unlock on error in xc2028_set_config()
    f2fs: do more integrity verification for superblock
Linux 4.4.65
    perf/core: Fix concurrent sys_perf_event_open() vs. 'move_group' race
    ping: implement proper locking
    staging/android/ion : fix a race condition in the ion driver
    vfio/pci: Fix integer overflows, bitmask check
    tipc: check minimum bearer MTU
    netfilter: nfnetlink: correctly validate length of batch messages
    xc2028: avoid use after free
    mnt: Add a per mount namespace limit on the number of mounts
    tipc: fix socket timer deadlock
    tipc: fix random link resets while adding a second bearer
    gfs2: avoid uninitialized variable warning
    hostap: avoid uninitialized variable use in hfa384x_get_rid
    tty: nozomi: avoid a harmless gcc warning
    tipc: correct error in node fsm
    tipc: re-enable compensation for socket receive buffer double counting
    tipc: make dist queue pernet
    tipc: make sure IPv6 header fits in skb headroom
Linux 4.4.64
    tipc: fix crash during node removal
    block: fix del_gendisk() vs blkdev_ioctl crash
    x86, pmem: fix broken __copy_user_nocache cache-bypass assumptions
    hv: don't reset hv_context.tsc_page on crash
    Drivers: hv: balloon: account for gaps in hot add regions
    Drivers: hv: balloon: keep track of where ha_region starts
    Tools: hv: kvp: ensure kvp device fd is closed on exec
    kvm: arm/arm64: Fix locking for kvm_free_stage2_pgd
    x86/mce/AMD: Give a name to MCA bank 3 when accessed with legacy MSRs
    powerpc/kprobe: Fix oops when kprobed on 'stdu' instruction
    ubi/upd: Always flush after prepared for an update
    mac80211: reject ToDS broadcast data frames
    mmc: sdhci-esdhc-imx: increase the pad I/O drive strength for DDR50 card
    ACPI / power: Avoid maybe-uninitialized warning
    Input: elantech - add Fujitsu Lifebook E547 to force crc_enabled
    VSOCK: Detach QP check should filter out non matching QPs.
    Drivers: hv: vmbus: Reduce the delay between retries in vmbus_post_msg()
    Drivers: hv: get rid of timeout in vmbus_open()
    Drivers: hv: don't leak memory in vmbus_establish_gpadl()
    s390/mm: fix CMMA vs KSM vs others
    CIFS: remove bad_network_name flag
    cifs: Do not send echoes before Negotiate is complete
    ring-buffer: Have ring_buffer_iter_empty() return true when empty
    tracing: Allocate the snapshot buffer before enabling probe
    KEYS: fix keyctl_set_reqkey_keyring() to not leak thread keyrings
    KEYS: Change the name of the dead type to ".dead" to prevent user access
    KEYS: Disallow keyrings beginning with '.' to be joined as session keyrings
Linux 4.4.63
    MIPS: fix Select HAVE_IRQ_EXIT_ON_IRQ_STACK patch.
    sctp: deny peeloff operation on asocs with threads sleeping on it
    net: ipv6: check route protocol when deleting routes
    tty/serial: atmel: RS485 half duplex w/DMA: enable RX after TX is done
    SUNRPC: fix refcounting problems with auth_gss messages.
    ibmveth: calculate gso_segs for large packets
    catc: Use heap buffer for memory size test
    catc: Combine failure cleanup code in catc_probe()
    rtl8150: Use heap buffers for all register access
    pegasus: Use heap buffers for all register access
    virtio-console: avoid DMA from stack
    dvb-usb-firmware: don't do DMA on stack
    dvb-usb: don't use stack for firmware load
    mm: Tighten x86 /dev/mem with zeroing reads
    rtc: tegra: Implement clock handling
    platform/x86: acer-wmi: setup accelerometer when machine has appropriate notify event
    ext4: fix inode checksum calculation problem if i_extra_size is small
    dvb-usb-v2: avoid use-after-free
    ath9k: fix NULL pointer dereference
    crypto: ahash - Fix EINPROGRESS notification callback
    powerpc: Disable HFSCR[TM] if TM is not supported
    zram: do not use copy_page with non-page aligned address
    kvm: fix page struct leak in handle_vmon
    Revert "MIPS: Lantiq: Fix cascaded IRQ setup"
    char: lack of bool string made CONFIG_DEVPORT always on
    char: Drop bogus dependency of DEVPORT on !M68K
    ftrace: Fix removing of second function probe
    irqchip/irq-imx-gpcv2: Fix spinlock initialization
    libnvdimm: fix reconfig_mutex, mmap_sem, and jbd2_handle lockdep splat
    xen, fbfront: fix connecting to backend
    scsi: sd: Fix capacity calculation with 32-bit sector_t
    scsi: sd: Consider max_xfer_blocks if opt_xfer_blocks is unusable
    scsi: sr: Sanity check returned mode data
    iscsi-target: Drop work-around for legacy GlobalSAN initiator
    iscsi-target: Fix TMR reference leak during session shutdown
    acpi, nfit, libnvdimm: fix interleave set cookie calculation (64-bit comparison)
    x86/vdso: Plug race between mapping and ELF header setup
    x86/vdso: Ensure vdso32_enabled gets set to valid values only
    perf/x86: Avoid exposing wrong/stale data in intel_pmu_lbr_read_32()
    Input: xpad - add support for Razer Wildcat gamepad
    CIFS: store results of cifs_reopen_file to avoid infinite wait
    drm/nouveau/mmu/nv4a: use nv04 mmu rather than the nv44 one
    drm/nouveau/mpeg: mthd returns true on success now
    thp: fix MADV_DONTNEED vs clear soft dirty race
    cgroup, kthread: close race window where new kthreads can be migrated to non-root cgroups
Linux 4.4.62
    ibmveth: set correct gso_size and gso_type
    net/mlx4_core: Fix when to save some qp context flags for dynamic VST to VGT transitions
    net/mlx4_core: Fix racy CQ (Completion Queue) free
    net/mlx4_en: Fix bad WQE issue
    usb: hub: Wait for connection to be reestablished after port reset
    blk-mq: Avoid memory reclaim when remapping queues
    net/packet: fix overflow in check for priv area size
    crypto: caam - fix RNG deinstantiation error checking
    MIPS: IRQ Stack: Fix erroneous jal to plat_irq_dispatch
    MIPS: Select HAVE_IRQ_EXIT_ON_IRQ_STACK
    MIPS: Switch to the irq_stack in interrupts
    MIPS: Only change $28 to thread_info if coming from user mode
    MIPS: Stack unwinding while on IRQ stack
    MIPS: Introduce irq_stack
    mtd: bcm47xxpart: fix parsing first block after aligned TRX
    usb: dwc3: gadget: delay unmap of bounced requests
    drm/i915: Stop using RP_DOWN_EI on Baytrail
    drm/i915: Avoid tweaking evaluation thresholds on Baytrail v3
Linux 4.4.61
    mm/mempolicy.c: fix error handling in set_mempolicy and mbind.
    MIPS: Flush wrong invalid FTLB entry for huge page
    MIPS: Lantiq: fix missing xbar kernel panic
    MIPS: End spinlocks with .insn
    MIPS: ralink: Fix typos in rt3883 pinctrl
    MIPS: Force o32 fp64 support on 32bit MIPS64r6 kernels
    s390/uaccess: get_user() should zero on failure (again)
    s390/decompressor: fix initrd corruption caused by bss clear
    nios2: reserve boot memory for device tree
    powerpc: Don't try to fix up misaligned load-with-reservation instructions
    powerpc/mm: Add missing global TLB invalidate if cxl is active
    metag/usercopy: Add missing fixups
    metag/usercopy: Fix src fixup in from user rapf loops
    metag/usercopy: Set flags before ADDZ
    metag/usercopy: Zero rest of buffer from copy_from_user
    metag/usercopy: Add early abort to copy_to_user
    metag/usercopy: Fix alignment error checking
    metag/usercopy: Drop unused macros
    ring-buffer: Fix return value check in test_ringbuffer()
    ptrace: fix PTRACE_LISTEN race corrupting task->state
    Reset TreeId to zero on SMB2 TREE_CONNECT
    iio: bmg160: reset chip when probing
    arm/arm64: KVM: Take mmap_sem in kvm_arch_prepare_memory_region
    arm/arm64: KVM: Take mmap_sem in stage2_unmap_vm
    staging: android: ashmem: lseek failed due to no FMODE_LSEEK.
    sysfs: be careful of error returns from ops->show()
    drm/vmwgfx: fix integer overflow in vmw_surface_define_ioctl()
    drm/vmwgfx: Remove getparam error message
    drm/ttm, drm/vmwgfx: Relax permission checking when opening surfaces
    drm/vmwgfx: avoid calling vzalloc with a 0 size in vmw_get_cap_3d_ioctl()
    drm/vmwgfx: NULL pointer dereference in vmw_surface_define_ioctl()
    drm/vmwgfx: Type-check lookups of fence objects

Bug: 62730977
Change-Id: I4458200bbc977cf55a134fd9fd08627604e36d95
Signed-off-by: Thierry Strudel <tstrudel@google.com>
2017-09-20 15:50:18 -07:00
Joel Fernandes
8c8f57a62b ANDROID: tracing/ring_buffer: Try harder to allocate
Ftrace fails to allocate large buffers on walleye/taimen due to large
number of CPUs coupled with effects of large amounts of caching in the
page cache.  Currently the ring buffer allocation doesn't retry after
direct-reclaim made some progress but still wasn't able to find a free
page. On retrying I see that the allocations almost always succeed.  The
retry doesn't happen because GFP_NORETRY is used in the tracer to
prevent the case where we might OOM, however this is incorrect in the
sense a RETRY doesn't necessarily mean it will OOM (as seen in my
testing, most of the time the retry just needs to loop back and find a
free page). In order to retry but still prevent the OOM, I re-use the
PF_DUMPCORE flag which bails out incase we are about to OOM.

Test:
* systrace -b 64000 and -b 100000 is working after dropping GFP_NORETRY.
* Used memeater to use 3GB memory and -b 64000 and saw that OOM didn't
trigger with PF_DUMPCORE (and triggered without PF_DUMPCORE).

Bug: 62918608
Change-Id: I85de23e843d2a4fdf2276905b1ae8af4486b3bd7
Signed-off-by: Joel Fernandes <joelaf@google.com>
2017-07-07 17:35:32 +00:00
Steven Rostedt (VMware)
a2a67e53f9 ring-buffer: Have ring_buffer_iter_empty() return true when empty
commit 78f7a45dac2a2d2002f98a3a95f7979867868d73 upstream.

I noticed that reading the snapshot file when it is empty no longer gives a
status. It suppose to show the status of the snapshot buffer as well as how
to allocate and use it. For example:

 ># cat snapshot
 # tracer: nop
 #
 #
 # * Snapshot is allocated *
 #
 # Snapshot commands:
 # echo 0 > snapshot : Clears and frees snapshot buffer
 # echo 1 > snapshot : Allocates snapshot buffer, if not already allocated.
 #                      Takes a snapshot of the main buffer.
 # echo 2 > snapshot : Clears snapshot buffer (but does not allocate or free)
 #                      (Doesn't have to be '2' works with any number that
 #                       is not a '0' or '1')

But instead it just showed an empty buffer:

 ># cat snapshot
 # tracer: nop
 #
 # entries-in-buffer/entries-written: 0/0   #P:4
 #
 #                              _-----=> irqs-off
 #                             / _----=> need-resched
 #                            | / _---=> hardirq/softirq
 #                            || / _--=> preempt-depth
 #                            ||| /     delay
 #           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
 #              | |       |   ||||       |         |

What happened was that it was using the ring_buffer_iter_empty() function to
see if it was empty, and if it was, it showed the status. But that function
was returning false when it was empty. The reason was that the iter header
page was on the reader page, and the reader page was empty, but so was the
buffer itself. The check only tested to see if the iter was on the commit
page, but the commit page was no longer pointing to the reader page, but as
all pages were empty, the buffer is also.

Fixes: 651e22f270 ("ring-buffer: Always reset iterator to reader page")
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-04-27 09:09:31 +02:00
Wei Yongjun
5cc244782d ring-buffer: Fix return value check in test_ringbuffer()
commit 62277de758b155dc04b78f195a1cb5208c37b2df upstream.

In case of error, the function kthread_run() returns ERR_PTR()
and never returns NULL. The NULL test in the return value check
should be replaced with IS_ERR().

Link: http://lkml.kernel.org/r/1466184839-14927-1-git-send-email-weiyj_lk@163.com

Fixes: 6c43e554a ("ring-buffer: Add ring buffer startup selftest")
Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-04-12 12:38:33 +02:00
Steven Rostedt (Red Hat)
f199023137 ring-buffer: Prevent overflow of size in ring_buffer_resize()
commit 59643d1535eb220668692a5359de22545af579f6 upstream.

If the size passed to ring_buffer_resize() is greater than MAX_LONG - BUF_PAGE_SIZE
then the DIV_ROUND_UP() will return zero.

Here's the details:

  # echo 18014398509481980 > /sys/kernel/debug/tracing/buffer_size_kb

tracing_entries_write() processes this and converts kb to bytes.

 18014398509481980 << 10 = 18446744073709547520

and this is passed to ring_buffer_resize() as unsigned long size.

 size = DIV_ROUND_UP(size, BUF_PAGE_SIZE);

Where DIV_ROUND_UP(a, b) is (a + b - 1)/b

BUF_PAGE_SIZE is 4080 and here

 18446744073709547520 + 4080 - 1 = 18446744073709551599

where 18446744073709551599 is still smaller than 2^64

 2^64 - 18446744073709551599 = 17

But now 18446744073709551599 / 4080 = 4521260802379792

and size = size * 4080 = 18446744073709551360

This is checked to make sure its still greater than 2 * 4080,
which it is.

Then we convert to the number of buffer pages needed.

 nr_page = DIV_ROUND_UP(size, BUF_PAGE_SIZE)

but this time size is 18446744073709551360 and

 2^64 - (18446744073709551360 + 4080 - 1) = -3823

Thus it overflows and the resulting number is less than 4080, which makes

  3823 / 4080 = 0

an nr_pages is set to this. As we already checked against the minimum that
nr_pages may be, this causes the logic to fail as well, and we crash the
kernel.

There's no reason to have the two DIV_ROUND_UP() (that's just result of
historical code changes), clean up the code and fix this bug.

Fixes: 83f40318da ("ring-buffer: Make removal of ring buffer pages atomic")
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2016-06-01 12:15:49 -07:00
Steven Rostedt (Red Hat)
dfb71aefc9 ring-buffer: Use long for nr_pages to avoid overflow failures
commit 9b94a8fba501f38368aef6ac1b30e7335252a220 upstream.

The size variable to change the ring buffer in ftrace is a long. The
nr_pages used to update the ring buffer based on the size is int. On 64 bit
machines this can cause an overflow problem.

For example, the following will cause the ring buffer to crash:

 # cd /sys/kernel/debug/tracing
 # echo 10 > buffer_size_kb
 # echo 8556384240 > buffer_size_kb

Then you get the warning of:

 WARNING: CPU: 1 PID: 318 at kernel/trace/ring_buffer.c:1527 rb_update_pages+0x22f/0x260

Which is:

  RB_WARN_ON(cpu_buffer, nr_removed);

Note each ring buffer page holds 4080 bytes.

This is because:

 1) 10 causes the ring buffer to have 3 pages.
    (10kb requires 3 * 4080 pages to hold)

 2) (2^31 / 2^10  + 1) * 4080 = 8556384240
    The value written into buffer_size_kb is shifted by 10 and then passed
    to ring_buffer_resize(). 8556384240 * 2^10 = 8761737461760

 3) The size passed to ring_buffer_resize() is then divided by BUF_PAGE_SIZE
    which is 4080. 8761737461760 / 4080 = 2147484672

 4) nr_pages is subtracted from the current nr_pages (3) and we get:
    2147484669. This value is saved in a signed integer nr_pages_to_update

 5) 2147484669 is greater than 2^31 but smaller than 2^32, a signed int
    turns into the value of -2147482627

 6) As the value is a negative number, in update_pages_handler() it is
    negated and passed to rb_remove_pages() and 2147482627 pages will
    be removed, which is much larger than 3 and it causes the warning
    because not all the pages asked to be removed were removed.

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

Fixes: 7a8e76a382 ("tracing: unified trace buffer")
Reported-by: Hao Qin <QEver.cn@gmail.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2016-06-01 12:15:49 -07:00
Steven Rostedt (Red Hat)
bd1b7cd360 ring-buffer: Put back the length if crossed page with add_timestamp
Commit fcc742eaad "ring-buffer: Add event descriptor to simplify passing
data" added a descriptor that holds various data instead of passing around
several variables through parameters. The problem was that one of the
parameters was modified in a function and the code was designed not to have
an effect on that modified  parameter. Now that the parameter is a
descriptor and any modifications to it are non-volatile, the size of the
data could be unnecessarily expanded.

Remove the extra space added if a timestamp was added and the event went
across the page.

Cc: stable@vger.kernel.org # 4.3+
Fixes: fcc742eaad "ring-buffer: Add event descriptor to simplify passing data"
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-11-24 09:27:25 -05:00
Steven Rostedt (Red Hat)
b81f472a20 ring-buffer: Update read stamp with first real commit on page
Do not update the read stamp after swapping out the reader page from the
write buffer. If the reader page is swapped out of the buffer before an
event is written to it, then the read_stamp may get an out of date
timestamp, as the page timestamp is updated on the first commit to that
page.

rb_get_reader_page() only returns a page if it has an event on it, otherwise
it will return NULL. At that point, check if the page being returned has
events and has not been read yet. Then at that point update the read_stamp
to match the time stamp of the reader page.

Cc: stable@vger.kernel.org # 2.6.30+
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-11-24 09:23:17 -05:00
Yaowei Bai
cdb2a0a915 ring-buffer: rb_event_is_commit() can return boolean
Make rb_event_is_commit() return bool to improve readability
due to this particular function only using either one or zero as its
return value.

No functional change.

Link: http://lkml.kernel.org/r/1443537816-5788-7-git-send-email-bywxiaobai@163.com

Signed-off-by: Yaowei Bai <bywxiaobai@163.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-11-02 14:25:29 -05:00
Yaowei Bai
da58834cf2 ring-buffer: rb_per_cpu_empty() can return boolean
Makes rb_per_cpu_empty() return bool to improve readability.

No functional change.

Link: http://lkml.kernel.org/r/1443537816-5788-6-git-send-email-bywxiaobai@163.com

Signed-off-by: Yaowei Bai <bywxiaobai@163.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-11-02 14:24:27 -05:00
Yaowei Bai
3d4e204d81 ring_buffer: ring_buffer_empty{cpu}() can return boolean
Make ring_buffer_empty() and ring_buffer_empty_cpu() return bool.

No functional change.

Link: http://lkml.kernel.org/r/1443537816-5788-5-git-send-email-bywxiaobai@163.com

Signed-off-by: Yaowei Bai <bywxiaobai@163.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-11-02 14:23:38 -05:00
Yaowei Bai
06ca320952 ring-buffer: rb_is_reader_page() can return boolean
Make rb_is_reader_page() return bool to improve readability due to this
particular function only using either true or false as its return value.

No functional change.

Link: http://lkml.kernel.org/r/1443537816-5788-4-git-send-email-bywxiaobai@163.com

Signed-off-by: Yaowei Bai <bywxiaobai@163.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-11-02 14:23:20 -05:00
Steven Rostedt (Red Hat)
b7dc42fd79 ring-buffer: Revert "ring-buffer: Get timestamp after event is allocated"
The commit a4543a2fa9 "ring-buffer: Get timestamp after event is
allocated" is needed for some future work. But after adding it, there is a
race somewhere that causes the saved timestamp to have a slight shift, and
get ahead of the actual timestamp and make it look like time goes backwards.

I'm still looking into why this happens, but in the mean time, this is
holding up other work to get in. I'm reverting the change for now (which
makes the problem go away), and will add it back after I know what is wrong
and fix it.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-09-03 08:57:12 -04:00
Steven Rostedt (Red Hat)
d90fd77402 ring-buffer: Reorganize function locations
Functions in ring-buffer.c have gotten interleaved between different
use cases. Move the functions around to get like functions closer
together. This may or may not help gcc keep cache locality, but it
makes it a little easier to work with the code.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-07-20 22:30:49 -04:00
Steven Rostedt (Red Hat)
7d75e6833b ring-buffer: Make sure event has enough room for extend and padding
Now that events only add time extends after it is committed, in case
an event comes in before it can discard the allocated event, the time
extend needs to be stored within the event. If the event is bigger
than then size needed for the time extend, padding must be added.
The minimum padding size is 8 bytes. Thus if the event is 12 bytes
(size of time extend + 4), there will not be enough room to add both
the time extend and padding. Make sure all events are either 8 bytes
or 16 or more bytes.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-07-20 22:30:49 -04:00
Steven Rostedt (Red Hat)
a4543a2fa9 ring-buffer: Get timestamp after event is allocated
Move the capturing of the timestamp to after an event is allocated.
If the event is not a commit (where it is an event that preempted
another event), then no timestamp is needed, because the delta of
nested events is always zero.

If the event starts on a new page, no delta needs to be calculated
as the full timestamp will be added to the page header, and the
event will have a delta of zero.

Now if the event requires a time extend (the delta does not fit
in the 27 bit delta slot in the header), then the event is discarded,
the length is extended to hold the TIME_EXTEND event that allows for
a 59 bit delta, and the commit is tried again.

If the event can't be discarded (another event came in after it),
then the TIME_EXTEND is added directly to the allocated event and
the rest of the event is given padding.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-07-20 22:30:48 -04:00
Steven Rostedt (Red Hat)
9826b2733a ring-buffer: Move the adding of the extended timestamp out of line
Requiring a extended time stamp is an uncommon occurrence, and it is
best to do it out of line when needed.

Add a noinline function that handles the extended timestamp and
have it called with an unlikely to completely move it out of the
fast path.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-07-20 22:30:47 -04:00
Steven Rostedt (Red Hat)
fcc742eaad ring-buffer: Add event descriptor to simplify passing data
Add rb_event_info descriptor to pass event info to functions a bit
easier than using a bunch of parameters. This will also allow for
changing the code around a bit to find better fast paths.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-07-20 22:30:46 -04:00
Steven Rostedt (Red Hat)
a497adb45b ring-buffer: Add enum names for the context levels
Instead of having hard coded numbers for the context levels, use
enums to describe them more.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-05-29 10:39:08 -04:00
Steven Rostedt (Red Hat)
3c6296f716 ring-buffer: Remove useless unused tracing_off_permanent()
The tracing_off_permanent() call is a way to disable all ring_buffers.
Nothing uses it and nothing should use it, as tracing_off() and
friends are better, as they disable the ring buffers related to
tracing. The tracing_off_permanent() even disabled non tracing
ring buffers. This is a bit drastic, and was added to handle NMIs
doing outputs that could corrupt the ring buffer when only tracing
used them. It is now obsolete and adds a little overhead, it should
be removed.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-05-28 16:47:39 -04:00
Steven Rostedt (Red Hat)
289a5a25c5 ring-buffer: Give NMIs a chance to lock the reader_lock
Currently, if an NMI does a dump of a ring buffer, it disables
all ring buffers from ever doing any writes again. This is because
it wont take the locks for the cpu_buffer and this can cause
corruption if it preempted a read, or a read happens on another
CPU for the current cpu buffer. This is a bit overkill.

First, it should at least try to take the lock, and if it fails
then disable it. Also, there's no need to disable all ring
buffers, even those that are unrelated to what is being read.
Only disable the per cpu ring buffer that is being read if
it can not get the lock for it.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-05-28 16:47:01 -04:00
Steven Rostedt (Red Hat)
985e871b28 ring-buffer: Add trace_recursive checks to ring_buffer_write()
The ring_buffer_write() function isn't protected by the trace recursive
writes. Luckily, this function is not used as much and is unlikely
to ever recurse. But it should still have the protection, because
even a call to ring_buffer_lock_reserve() could cause ring buffer
corruption if called when ring_buffer_write() is being used.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-05-27 10:48:56 -04:00
Steven Rostedt (Red Hat)
6776221bfe ring-buffer: Allways do the trace_recursive checks
Currently the trace_recursive checks are only done if CONFIG_TRACING
is enabled. That was because there use to be a dependency with tracing
for the recursive checks (it used the task_struct trace recursive
variable). But now it uses its own variable and there is no dependency.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-05-27 10:44:43 -04:00
Steven Rostedt (Red Hat)
58a09ec6e3 ring-buffer: Move recursive check to per_cpu descriptor
Instead of using a global per_cpu variable to perform the recursive
checks into the ring buffer, use the already existing per_cpu descriptor
that is part of the ring buffer itself.

Not only does this simplify the code, it also allows for one ring buffer
to be used within the guts of the use of another ring buffer. For example
trace_printk() can now be used within the ring buffer to record changes
done by an instance into the main ring buffer. The recursion checks
will prevent the trace_printk() itself from causing recursive issues
with the main ring buffer (it is just ignored), but the recursive
checks wont prevent the trace_printk() from recording other ring buffers.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-05-27 10:42:36 -04:00
Steven Rostedt (Red Hat)
3205f8063b ring-buffer: Add unlikelys to make fast path the default
I was running the trace_event benchmark and noticed that the times
to record a trace_event was all over the place. I looked at the assembly
of the ring_buffer_lock_reserver() and saw this:

 <ring_buffer_lock_reserve>:
       31 c0                   xor    %eax,%eax
       48 83 3d 76 47 bd 00    cmpq   $0x1,0xbd4776(%rip)        # ffffffff81d10d60 <ring_buffer_flags>
       01
       55                      push   %rbp
       48 89 e5                mov    %rsp,%rbp
       75 1d                   jne    ffffffff8113c60d <ring_buffer_lock_reserve+0x2d>
       65 ff 05 69 e3 ec 7e    incl   %gs:0x7eece369(%rip)        # a960 <__preempt_count>
       8b 47 08                mov    0x8(%rdi),%eax
       85 c0                   test   %eax,%eax
 +---- 74 12                   je     ffffffff8113c610 <ring_buffer_lock_reserve+0x30>
 |     65 ff 0d 5b e3 ec 7e    decl   %gs:0x7eece35b(%rip)        # a960 <__preempt_count>
 |     0f 84 85 00 00 00       je     ffffffff8113c690 <ring_buffer_lock_reserve+0xb0>
 |     31 c0                   xor    %eax,%eax
 |     5d                      pop    %rbp
 |     c3                      retq
 |     90                      nop
 +---> 65 44 8b 05 48 e3 ec    mov    %gs:0x7eece348(%rip),%r8d        # a960 <__preempt_count>
       7e
       41 81 e0 ff ff ff 7f    and    $0x7fffffff,%r8d
       b0 08                   mov    $0x8,%al
       65 8b 0d 58 36 ed 7e    mov    %gs:0x7eed3658(%rip),%ecx        # fc80 <current_context>
       41 f7 c0 00 ff 1f 00    test   $0x1fff00,%r8d
       74 1e                   je     ffffffff8113c64f <ring_buffer_lock_reserve+0x6f>
       41 f7 c0 00 00 10 00    test   $0x100000,%r8d
       b0 01                   mov    $0x1,%al
       75 13                   jne    ffffffff8113c64f <ring_buffer_lock_reserve+0x6f>
       41 81 e0 00 00 0f 00    and    $0xf0000,%r8d
       49 83 f8 01             cmp    $0x1,%r8
       19 c0                   sbb    %eax,%eax
       83 e0 02                and    $0x2,%eax
       83 c0 02                add    $0x2,%eax
       85 c8                   test   %ecx,%eax
       75 ab                   jne    ffffffff8113c5fe <ring_buffer_lock_reserve+0x1e>
       09 c8                   or     %ecx,%eax
       65 89 05 24 36 ed 7e    mov    %eax,%gs:0x7eed3624(%rip)        # fc80 <current_context>

The arrow is the fast path.

After adding the unlikely's, the fast path looks a bit better:

 <ring_buffer_lock_reserve>:
       31 c0                   xor    %eax,%eax
       48 83 3d 76 47 bd 00    cmpq   $0x1,0xbd4776(%rip)        # ffffffff81d10d60 <ring_buffer_flags>
       01
       55                      push   %rbp
       48 89 e5                mov    %rsp,%rbp
       75 7b                   jne    ffffffff8113c66b <ring_buffer_lock_reserve+0x8b>
       65 ff 05 69 e3 ec 7e    incl   %gs:0x7eece369(%rip)        # a960 <__preempt_count>
       8b 47 08                mov    0x8(%rdi),%eax
       85 c0                   test   %eax,%eax
       0f 85 9f 00 00 00       jne    ffffffff8113c6a1 <ring_buffer_lock_reserve+0xc1>
       65 8b 0d 57 e3 ec 7e    mov    %gs:0x7eece357(%rip),%ecx        # a960 <__preempt_count>
       81 e1 ff ff ff 7f       and    $0x7fffffff,%ecx
       b0 08                   mov    $0x8,%al
       65 8b 15 68 36 ed 7e    mov    %gs:0x7eed3668(%rip),%edx        # fc80 <current_context>
       f7 c1 00 ff 1f 00       test   $0x1fff00,%ecx
       75 50                   jne    ffffffff8113c670 <ring_buffer_lock_reserve+0x90>
       85 d0                   test   %edx,%eax
       75 7d                   jne    ffffffff8113c6a1 <ring_buffer_lock_reserve+0xc1>
       09 d0                   or     %edx,%eax
       65 89 05 53 36 ed 7e    mov    %eax,%gs:0x7eed3653(%rip)        # fc80 <current_context>
       65 8b 05 fc da ec 7e    mov    %gs:0x7eecdafc(%rip),%eax        # a130 <cpu_number>
       89 c2                   mov    %eax,%edx

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-05-21 17:39:29 -04:00
Steven Rostedt (Red Hat)
af658dca22 tracing: Rename ftrace_event.h to trace_events.h
The term "ftrace" is really the infrastructure of the function hooks,
and not the trace events. Rename ftrace_event.h to trace_events.h to
represent the trace_event infrastructure and decouple the term ftrace
from it.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-05-13 14:05:12 -04:00
Steven Rostedt (Red Hat)
d631c8cceb ring-buffer: Remove duplicate use of '&' in recursive code
A clean up of the recursive protection code changed

  val = this_cpu_read(current_context);
  val--;
  val &= this_cpu_read(current_context);

to

  val = this_cpu_read(current_context);
  val &= val & (val - 1);

Which has a duplicate use of '&' as the above is the same as

  val = val & (val - 1);

Actually, it would be best to remove that line altogether and
just add it to where it is used.

And Christoph even mentioned that it can be further compacted to
just a single line:

  __this_cpu_and(current_context, __this_cpu_read(current_context) - 1);

Link: http://lkml.kernel.org/alpine.DEB.2.11.1503271423580.23114@gentwo.org

Suggested-by: Christoph Lameter <cl@linux.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-03-30 13:36:31 -04:00
Steven Rostedt
80a9b64e2c ring-buffer: Replace this_cpu_*() with __this_cpu_*()
It has come to my attention that this_cpu_read/write are horrible on
architectures other than x86. Worse yet, they actually disable
preemption or interrupts! This caused some unexpected tracing results
on ARM.

   101.356868: preempt_count_add <-ring_buffer_lock_reserve
   101.356870: preempt_count_sub <-ring_buffer_lock_reserve

The ring_buffer_lock_reserve has recursion protection that requires
accessing a per cpu variable. But since preempt_disable() is traced, it
too got traced while accessing the variable that is suppose to prevent
recursion like this.

The generic version of this_cpu_read() and write() are:

 #define this_cpu_generic_read(pcp)					\
 ({	typeof(pcp) ret__;						\
	preempt_disable();						\
	ret__ = *this_cpu_ptr(&(pcp));					\
	preempt_enable();						\
	ret__;								\
 })

 #define this_cpu_generic_to_op(pcp, val, op)				\
 do {									\
	unsigned long flags;						\
	raw_local_irq_save(flags);					\
	*__this_cpu_ptr(&(pcp)) op val;					\
	raw_local_irq_restore(flags);					\
 } while (0)

Which is unacceptable for locations that know they are within preempt
disabled or interrupt disabled locations.

Paul McKenney stated that __this_cpu_() versions produce much better code on
other architectures than this_cpu_() does, if we know that the call is done in
a preempt disabled location.

I also changed the recursive_unlock() to use two local variables instead
of accessing the per_cpu variable twice.

Link: http://lkml.kernel.org/r/20150317114411.GE3589@linux.vnet.ibm.com
Link: http://lkml.kernel.org/r/20150317104038.312e73d1@gandalf.local.home

Cc: stable@vger.kernel.org
Acked-by: Christoph Lameter <cl@linux.com>
Reported-by: Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
Tested-by: Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-03-25 08:56:49 -04:00
Steven Rostedt (Red Hat)
1e0d6714ac ring-buffer: Do not wake up a splice waiter when page is not full
When an application connects to the ring buffer via splice, it can only
read full pages. Splice does not work with partial pages. If there is
not enough data to fill a page, the splice command will either block
or return -EAGAIN (if set to nonblock).

Code was added where if the page is not full, to just sleep again.
The problem is, it will get woken up again on the next event. That
is, when something is written into the ring buffer, if there is a waiter
it will wake it up. The waiter would then check the buffer, see that
it still does not have enough data to fill a page and go back to sleep.
To make matters worse, when the waiter goes back to sleep, it could
cause another event, which would wake it back up again to see it
doesn't have enough data and sleep again. This produces a tremendous
overhead and fills the ring buffer with noise.

For example, recording sched_switch on an idle system for 10 seconds
produces 25,350,475 events!!!

Create another wait queue for those waiters wanting full pages.
When an event is written, it only wakes up waiters if there's a full
page of data. It does not wake up the waiter if the page is not yet
full.

After this change, recording sched_switch on an idle system for 10
seconds produces only 800 events. Getting rid of 25,349,675 useless
events (99.9969% of events!!), is something to take seriously.

Cc: stable@vger.kernel.org # 3.16+
Cc: Rabin Vincent <rabin@rab.in>
Fixes: e30f53aad2 "tracing: Do not busy wait in buffer splice"
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-02-11 07:41:42 -05:00
Steven Rostedt (Red Hat)
3efb5f21a3 tracing: Remove unneeded includes of debugfs.h and fs.h
The creation of tracing files and directories is for the most part
encapsulated in helper functions in trace.c. Other files do not need to
include debugfs.h or fs.h, as they may have needed to in the past.

Remove them from the files that do not need them.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2015-01-22 11:19:48 -05:00
Linus Torvalds
1dd7dcb6ea Merge tag 'trace-3.19' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace
Pull tracing updates from Steven Rostedt:
 "There was a lot of clean ups and minor fixes.  One of those clean ups
  was to the trace_seq code.  It also removed the return values to the
  trace_seq_*() functions and use trace_seq_has_overflowed() to see if
  the buffer filled up or not.  This is similar to work being done to
  the seq_file code as well in another tree.

  Some of the other goodies include:

   - Added some "!" (NOT) logic to the tracing filter.

   - Fixed the frame pointer logic to the x86_64 mcount trampolines

   - Added the logic for dynamic trampolines on !CONFIG_PREEMPT systems.
     That is, the ftrace trampoline can be dynamically allocated and be
     called directly by functions that only have a single hook to them"

* tag 'trace-3.19' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: (55 commits)
  tracing: Truncated output is better than nothing
  tracing: Add additional marks to signal very large time deltas
  Documentation: describe trace_buf_size parameter more accurately
  tracing: Allow NOT to filter AND and OR clauses
  tracing: Add NOT to filtering logic
  ftrace/fgraph/x86: Have prepare_ftrace_return() take ip as first parameter
  ftrace/x86: Get rid of ftrace_caller_setup
  ftrace/x86: Have save_mcount_regs macro also save stack frames if needed
  ftrace/x86: Add macro MCOUNT_REG_SIZE for amount of stack used to save mcount regs
  ftrace/x86: Simplify save_mcount_regs on getting RIP
  ftrace/x86: Have save_mcount_regs store RIP in %rdi for first parameter
  ftrace/x86: Rename MCOUNT_SAVE_FRAME and add more detailed comments
  ftrace/x86: Move MCOUNT_SAVE_FRAME out of header file
  ftrace/x86: Have static tracing also use ftrace_caller_setup
  ftrace/x86: Have static function tracing always test for function graph
  kprobes: Add IPMODIFY flag to kprobe_ftrace_ops
  ftrace, kprobes: Support IPMODIFY flag to find IP modify conflict
  kprobes/ftrace: Recover original IP if pre_handler doesn't change it
  tracing/trivial: Fix typos and make an int into a bool
  tracing: Deletion of an unnecessary check before iput()
  ...
2014-12-10 19:58:13 -08:00
Steven Rostedt (Red Hat)
c0cd93aa16 ring-buffer: Remove check of trace_seq_{puts,printf}() return values
Remove checking the return value of all trace_seq_puts(). It was wrong
anyway as only the last return value mattered. But as the trace_seq_puts()
is going to be a void function in the future, we should not be checking
the return value of it anyway.

Just return !trace_seq_has_overflowed() instead.

Reviewed-by: Petr Mladek <pmladek@suse.cz>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2014-11-19 15:25:40 -05:00