4.4.127-stable review
Subsystems (5)
Greg Kroah-Hartman
maintainercover 4.4.127-stable review
This is the start of the stable review cycle for the 4.4.127 release. There are 72 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sun Apr 8 08:42:48 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.4.127-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.4.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 4.4.127-rc1
Greg Kroah-Hartman <[email protected]>
Revert "ip6_vti: adjust vti mtu according to mtu of lower device"
Greg Kroah-Hartman <[email protected]>
net: cavium: liquidio: fix up "Avoid dma_unmap_single on uninitialized ndata"
Greg Kroah-Hartman <[email protected]>
spi: davinci: fix up dma_mapping_error() incorrect patch
Greg Kroah-Hartman <[email protected]>
Revert "mtip32xx: use runtime tag to initialize command header"
Greg Kroah-Hartman <[email protected]>
Revert "cpufreq: Fix governor module removal race"
Greg Kroah-Hartman <[email protected]>
Revert "ARM: dts: omap3-n900: Fix the audio CODEC's reset pin"
Greg Kroah-Hartman <[email protected]>
Revert "ARM: dts: am335x-pepper: Fix the audio CODEC's reset pin"
Greg Kroah-Hartman <[email protected]>
Revert "PCI/MSI: Stop disabling MSI/MSI-X in pci_device_shutdown()"
Dan Williams <[email protected]>
nospec: Kill array_index_nospec_mask_check()
Will Deacon <[email protected]>
nospec: Move array_index_nospec() parameter checking into separate macro
Matthias Brugger <[email protected]>
net: hns: Fix ethtool private flags
Guoqing Jiang <[email protected]>
md/raid10: reset the 'first' at the end of loop
Keerthy <[email protected]>
ARM: dts: am57xx-beagle-x15-common: Add overide powerhold property
Keerthy <[email protected]>
ARM: dts: dra7: Add power hold and power controller properties to palmas
Keerthy <[email protected]>
Documentation: pinctrl: palmas: Add ti,palmas-powerhold-override property definition
Mike Frysinger <[email protected]>
vt: change SGR 21 to follow the standards
Ondrej Zary <[email protected]>
Input: i8042 - enable MUX on Sony VAIO VGN-CS series to fix touchpad
Dennis Wassenberg <[email protected]>
Input: i8042 - add Lenovo ThinkPad L460 to i8042 reset list
Frank Mori Hess <[email protected]>
staging: comedi: ni_mio_common: ack ai fifo error interrupts.
Andy Lutomirski <[email protected]>
fs/proc: Stop trying to report thread stacks
Eric Biggers <[email protected]>
crypto: x86/cast5-avx - fix ECB encryption when long sg follows short one
Herbert Xu <[email protected]>
crypto: ahash - Fix early termination in hash walk
Alexander Gerasiov <[email protected]>
parport_pc: Add support for WCH CH382L PCI-E single parallel port card.
Oliver Neukum <[email protected]>
media: usbtv: prevent double free in error case
Colin Ian King <[email protected]>
mei: remove dev_err message on an unsupported ioctl
Johan Hovold <[email protected]>
USB: serial: cp210x: add ELDAT Easywave RX09 id
Clemens Werther <[email protected]>
USB: serial: ftdi_sio: add support for Harman FirmwareHubEmulator
Major Hayden <[email protected]>
USB: serial: ftdi_sio: add RT Systems VX-8 cable
John Stultz <[email protected]>
usb: dwc2: Improve gadget state disconnection handling
Paolo Bonzini <[email protected]>
scsi: virtio_scsi: always read VPD pages for multiqueue too
Alexander Potapenko <[email protected]>
llist: clang: introduce member_address_is_nonnull()
Szymon Janc <[email protected]>
Bluetooth: Fix missing encryption refresh on Security Request
Florian Westphal <[email protected]>
netfilter: x_tables: add and use xt_check_proc_name
Florian Westphal <[email protected]>
netfilter: bridge: ebt_among: add more missing match size checks
Steffen Klassert <[email protected]>
xfrm: Refuse to insert 32 bit userspace socket policies on 64 bit systems
Greg Hackmann <[email protected]>
net: xfrm: use preempt-safe this_cpu_read() in ipcomp_alloc_tfms()
Roland Dreier <[email protected]>
RDMA/ucma: Introduce safer rdma_addr_size() variants
Leon Romanovsky <[email protected]>
RDMA/ucma: Don't allow join attempts for unsupported AF family
Leon Romanovsky <[email protected]>
RDMA/ucma: Check that device exists prior to accessing it
Leon Romanovsky <[email protected]>
RDMA/ucma: Check that device is connected prior to access it
Leon Romanovsky <[email protected]>
RDMA/ucma: Ensure that CM_ID exists prior to access it
Leon Romanovsky <[email protected]>
RDMA/ucma: Fix use-after-free access in ucma_close
Leon Romanovsky <[email protected]>
RDMA/ucma: Check AF family prior resolving address
Florian Westphal <[email protected]>
xfrm_user: uncoditionally validate esn replay attribute struct
Nick Desaulniers <[email protected]>
arm64: avoid overflow in VA_START and PAGE_OFFSET
Matthias Kaehlcke <[email protected]>
selinux: Remove redundant check for unknown labeling behavior
Matthias Kaehlcke <[email protected]>
netfilter: ctnetlink: Make some parameters integer to avoid enum mismatch
Arnd Bergmann <[email protected]>
tty: provide tty_name() even without CONFIG_TTY
Richard Guy Briggs <[email protected]>
audit: add tty field to LOGIN event
Matthias Kaehlcke <[email protected]>
frv: declare jiffies to be located in the .data section
Matthias Kaehlcke <[email protected]>
jiffies.h: declare jiffies and jiffies_64 with ____cacheline_aligned_in_smp
Mark Charlebois <[email protected]>
fs: compat: Remove warning from COMPATIBLE_IOCTL
Matthias Kaehlcke <[email protected]>
selinux: Remove unnecessary check of array base in selinux_set_mapping()
Matthias Kaehlcke <[email protected]>
cpumask: Add helper cpumask_available()
Matthias Kaehlcke <[email protected]>
genirq: Use cpumask_available() for check of cpumask variable
Nick Desaulniers <[email protected]>
netfilter: nf_nat_h323: fix logical-not-parentheses warning
Nick Desaulniers <[email protected]>
Input: mousedev - fix implicit conversion warning
Matthias Kaehlcke <[email protected]>
dm ioctl: remove double parentheses
Matthias Kaehlcke <[email protected]>
PCI: Make PCI_ROM_ADDRESS_MASK a 32-bit constant
Kaixu Xia <[email protected]>
writeback: fix the wrong congested state variable definition
Colin Ian King <[email protected]>
ACPI, PCI, irq: remove redundant check for null string pointer
Masami Hiramatsu <[email protected]>
kprobes/x86: Fix to set RWX bits correctly before releasing trampoline
Krzysztof Opasiak <[email protected]>
usb: gadget: f_hid: fix: Prevent accessing released memory
Felipe F. Tonello <[email protected]>
usb: gadget: align buffer size when allocating for OUT endpoint
Felipe F. Tonello <[email protected]>
usb: gadget: fix usb_ep_align_maybe endianness and new usb_ep_align
Felipe F. Tonello <[email protected]>
usb: gadget: change len to size_t on alloc_ep_req()
Felipe F. Tonello <[email protected]>
usb: gadget: define free_ep_req as universal function
Richard Narron <[email protected]>
partitions/msdos: Unable to mount UFS 44bsd partitions
Linus Torvalds <[email protected]>
perf/hwbp: Simplify the perf-hwbp code, fix documentation
Dan Carpenter <[email protected]>
ALSA: pcm: potential uninitialized return values
Stefan Roese <[email protected]>
ALSA: pcm: Use dma_bytes as size parameter in dma_mmap_coherent()
Linus Walleij <[email protected]>
mtd: jedec_probe: Fix crash in jedec_read_mfr()
-------------
Diffstat:
.../devicetree/bindings/pinctrl/pinctrl-palmas.txt | 9 +++ Documentation/filesystems/proc.txt | 26 --------- Makefile | 4 +- arch/arm/boot/dts/am335x-pepper.dts | 2 +- arch/arm/boot/dts/am57xx-beagle-x15.dts | 1 + arch/arm/boot/dts/dra7-evm.dts | 2 + arch/arm/boot/dts/omap3-n900.dts | 4 +- arch/arm64/include/asm/memory.h | 6 +- arch/frv/include/asm/timex.h | 6 ++ arch/x86/crypto/cast5_avx_glue.c | 3 +- arch/x86/kernel/kprobes/core.c | 9 +++ block/partitions/msdos.c | 4 +- crypto/ahash.c | 7 ++- drivers/acpi/pci_irq.c | 3 - drivers/block/mtip32xx/mtip32xx.c | 36 ++++-------- drivers/cpufreq/cpufreq.c | 6 -- drivers/infiniband/core/addr.c | 16 ++++++ drivers/infiniband/core/ucma.c | 67 +++++++++++++++------- drivers/input/mousedev.c | 62 +++++++++++--------- drivers/input/serio/i8042-x86ia64io.h | 24 ++++++++ drivers/md/dm-ioctl.c | 4 +- drivers/md/raid10.c | 1 + drivers/media/usb/usbtv/usbtv-core.c | 2 + drivers/misc/mei/main.c | 1 - drivers/mtd/chips/jedec_probe.c | 2 + drivers/net/ethernet/cavium/liquidio/lio_main.c | 2 +- drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c | 2 +- drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c | 2 +- drivers/net/ethernet/hisilicon/hns/hns_dsaf_rcb.c | 2 +- drivers/net/ethernet/hisilicon/hns/hns_ethtool.c | 4 +- drivers/parport/parport_pc.c | 4 ++ drivers/pci/pci-driver.c | 2 + drivers/pci/probe.c | 2 +- drivers/pci/setup-res.c | 2 +- drivers/scsi/virtio_scsi.c | 1 + drivers/spi/spi-davinci.c | 2 +- drivers/staging/comedi/drivers/ni_mio_common.c | 2 + drivers/tty/vt/vt.c | 6 +- drivers/usb/dwc2/hcd.c | 7 ++- drivers/usb/gadget/function/f_hid.c | 24 ++++++-- drivers/usb/gadget/function/f_midi.c | 6 -- drivers/usb/gadget/function/f_sourcesink.c | 6 -- drivers/usb/gadget/function/g_zero.h | 1 - drivers/usb/gadget/u_f.c | 6 +- drivers/usb/gadget/u_f.h | 26 ++++++++- drivers/usb/serial/cp210x.c | 1 + drivers/usb/serial/ftdi_sio.c | 2 + drivers/usb/serial/ftdi_sio_ids.h | 9 +++ fs/compat_ioctl.c | 2 +- fs/proc/task_mmu.c | 29 ++++------ fs/proc/task_nommu.c | 28 ++++----- include/linux/audit.h | 24 ++++++++ include/linux/cpumask.h | 10 ++++ include/linux/jiffies.h | 13 ++--- include/linux/llist.h | 21 ++++++- include/linux/netfilter/x_tables.h | 2 + include/linux/nospec.h | 14 ----- include/linux/tty.h | 4 +- include/linux/usb/gadget.h | 17 +++++- include/rdma/ib_addr.h | 2 + include/uapi/linux/pci_regs.h | 2 +- kernel/audit.c | 18 ++---- kernel/auditsc.c | 8 ++- kernel/events/hw_breakpoint.c | 30 +++------- kernel/irq/manage.c | 2 +- kernel/kprobes.c | 2 +- mm/backing-dev.c | 4 +- net/bluetooth/smp.c | 8 ++- net/bridge/netfilter/ebt_among.c | 34 +++++++++++ net/ipv4/netfilter/nf_nat_h323.c | 57 +++++++++--------- net/ipv6/ip6_vti.c | 20 ------- net/netfilter/nf_conntrack_netlink.c | 7 +-- net/netfilter/x_tables.c | 30 ++++++++++ net/netfilter/xt_hashlimit.c | 5 +- net/netfilter/xt_recent.c | 6 +- net/xfrm/xfrm_ipcomp.c | 2 +- net/xfrm/xfrm_state.c | 5 ++ net/xfrm/xfrm_user.c | 21 +++---- security/selinux/hooks.c | 16 ------ security/selinux/ss/services.c | 2 +- sound/core/oss/pcm_oss.c | 4 +- sound/core/pcm_native.c | 2 +- 82 files changed, 522 insertions(+), 357 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/72 mtd: jedec_probe: Fix crash in jedec_read_mfr()
4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Linus Walleij <[email protected]>
commit 87a73eb5b56fd6e07c8e499fe8608ef2d8912b82 upstream.
It turns out that the loop where we read manufacturer jedec_read_mfd() can under some circumstances get a CFI_MFR_CONTINUATION repeatedly, making the loop go over all banks and eventually hit the end of the map and crash because of an access violation:
Unable to handle kernel paging request at virtual address c4980000 pgd = (ptrval) [c4980000] *pgd=03808811, *pte=00000000, *ppte=00000000 Internal error: Oops: 7 [#1] PREEMPT ARM CPU: 0 PID: 1 Comm: swapper Not tainted 4.16.0-rc1+ #150 Hardware name: Gemini (Device Tree) PC is at jedec_probe_chip+0x6ec/0xcd0 LR is at 0x4 pc : [<c03a2bf4>] lr : [<00000004>] psr: 60000013
sp : c382dd18 ip : 0000ffff fp : 00000000
r10: c0626388 r9 : 00020000 r8 : c0626340
r7 : 00000000 r6 : 00000001 r5 : c3a71afc r4 : c382dd70 r3 : 00000001 r2 : c4900000 r1 : 00000002 r0 : 00080000
Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none
Control: 0000397f Table: 00004000 DAC: 00000053 Process swapper (pid: 1, stack limit = 0x(ptrval))
Fix this by breaking the loop with a return 0 if the offset exceeds the map size.
--- drivers/mtd/chips/jedec_probe.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/mtd/chips/jedec_probe.c +2 -0
@@ -1889,6 +1889,8 @@ static inline u32 jedec_read_mfr(structdo {uint32_t ofs =cfi_build_cmd_addr (0 + (bank <<8 ), map, cfi); mask = (1 << (cfi->device_type *8 )) -1 ; +if (ofs >= map->size) +return 0 ; result =map_read (map, base + ofs); bank++; }while ((result.x[0 ] & mask) ==CFI_MFR_CONTINUATION );
Re: [PATCH 4.4 01/72] mtd: jedec_probe: Fix crash in jedec_read_mfr()
Quoted 7 lines · Greg Kroah-Hartman
4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Linus Walleij <[email protected]>
commit
87a73eb5b56fd6e07c8e499fe8608ef2d8912b82upstream.
[...]
drivers/mtd/chips/jedec_probe.c static inline u32 jedec_read_mfr(struct · line 1896
Quoted 11 lines
drivers/mtd/chips/jedec_probe.c +2
-0@@ -1889,6 +1889,8 @@ static inline u32 jedec_read_mfr(struct do { uint32_t ofs = cfi_build_cmd_addr(0 + (bank << 8), map, cfi); mask = (1 << (cfi->device_type * 8)) - 1; +if (ofs >= map->size) +return 0 ; result = map_read(map, base + ofs); bank++; } while ((result.x[0] & mask) == CFI_MFR_CONTINUATION);
Looking at the calling code several levels up, ingenprobe_ident_chips():
max_chips = map->size >> cfi.chipshift;
[...]
for (i = 1; i < max_chips; i++) {
cp->probe_chip(map, i << cfi.chipshift, chip_map, &cfi);
}The expression i << cfi.chipshift becomes the base parameter here, so we have base < map->size. That implies to me that map->size is the size of the complete mapping, and we need to compare it with the complete address.
So shouldn't the test be ofs >= (map->size - base)? Or even ofs >= (1 << cfi->chipshift)?
Ben.
Signature · 2 lines
Ben Hutchings Software Developer, Codethink Ltd.
Greg Kroah-Hartman
maintainerPATCH 2/72 ALSA: pcm: Use dma_bytes as size parameter in dma_mmap_coherent()
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stefan Roese <[email protected]>
commit 9066ae7ff5d89c0b5daa271e2d573540097a94fa upstream.
When trying to use the driver (e.g. aplay *.wav), the 4MiB DMA buffer will get mmapp'ed in 16KiB chunks. But this fails with the 2nd 16KiB area, as the page offset is outside of the VMA range (size), which is currently used as size parameter in snd_pcm_lib_default_mmap(). By using the DMA buffer size (dma_bytes) instead, the complete DMA buffer can be mmapp'ed and the issue is fixed.
This issue was detected on an ARM platform (TI AM57xx) using the RME HDSP MADI PCIe soundcard.
--- sound/core/pcm_native.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/core/pcm_native.c +1 -1
@@ -3408,7 +3408,7 @@ int snd_pcm_lib_default_mmap(struct snd_ area, substream->runtime->dma_area, substream->runtime->dma_addr, - area->vm_end - area->vm_start); + substream->runtime->dma_bytes);#endif /* CONFIG_X86 */ /* mmap with fault handler */ area->vm_ops = &snd_pcm_vm_ops_data_fault;
Greg Kroah-Hartman
maintainerPATCH 3/72 ALSA: pcm: potential uninitialized return values
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <[email protected]>
commit 5607dddbfca774fb38bffadcb077fe03aa4ac5c6 upstream.
Smatch complains that "tmp" can be uninitialized if we do a zero size write.
--- sound/core/oss/pcm_oss.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
sound/core/oss/pcm_oss.c +2 -2
@@ -1361,7 +1361,7 @@ static ssize_t snd_pcm_oss_write2(structstatic ssize_t snd_pcm_oss_write1 (struct snd_pcm_substream *substream,const char __user *buf,size_t bytes) {size_t xfer =0 ; -ssize_t tmp; +ssize_t tmp =0 ;struct snd_pcm_runtime *runtime = substream->runtime;if (atomic_read (&substream->mmap_count))
@@ -1468,7 +1468,7 @@ static ssize_t snd_pcm_oss_read2(structstatic ssize_t snd_pcm_oss_read1 (struct snd_pcm_substream *substream,char __user *buf,size_t bytes) {size_t xfer =0 ; -ssize_t tmp; +ssize_t tmp =0 ;struct snd_pcm_runtime *runtime = substream->runtime;if (atomic_read (&substream->mmap_count))
Greg Kroah-Hartman
maintainerPATCH 4/72 perf/hwbp: Simplify the perf-hwbp code, fix documentation
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Linus Torvalds <[email protected]>
commit f67b15037a7a50c57f72e69a6d59941ad90a0f0f upstream.
Annoyingly, modify_user_hw_breakpoint() unnecessarily complicates the modification of a breakpoint - simplify it and remove the pointless local variables.
Also update the stale Docbook while at it.
--- kernel/events/hw_breakpoint.c | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-)
kernel/events/hw_breakpoint.c +7 -23
@@ -427,16 +427,9 @@ EXPORT_SYMBOL_GPL(register_user_hw_break* modify_user_hw_breakpoint - modify a user-space hardware breakpoint * @bp: the breakpoint structure to modify * @attr: new breakpoint attributes -* @triggered: callback to trigger when we hit the breakpoint -* @tsk: pointer to 'task_struct' of the process to which the address belongs */ int modify_user_hw_breakpoint (struct perf_event *bp,struct perf_event_attr *attr) { -u64 old_addr = bp->attr.bp_addr; -u64 old_len = bp->attr.bp_len; -int old_type = bp->attr.bp_type; -int err =0 ; -/* * modify_user_hw_breakpoint can be invoked with IRQs disabled and hence it * will not be possible to raise IPIs that invoke __perf_event_disable.
@@ -451,27 +444,18 @@ int modify_user_hw_breakpoint(struct per bp->attr.bp_addr = attr->bp_addr; bp->attr.bp_type = attr->bp_type; bp->attr.bp_len = attr->bp_len; + bp->attr.disabled =1 ; -if (attr->disabled) - goto end; - - err =validate_hw_breakpoint (bp); -if (!err) -perf_event_enable (bp); +if (!attr->disabled) { +int err =validate_hw_breakpoint (bp); -if (err) { - bp->attr.bp_addr = old_addr; - bp->attr.bp_type = old_type; - bp->attr.bp_len = old_len; -if (!bp->attr.disabled) -perf_event_enable (bp); +if (err) +return err; -return err; +perf_event_enable (bp); + bp->attr.disabled =0 ; } -end: - bp->attr.disabled = attr->disabled; -return 0 ; }EXPORT_SYMBOL_GPL (modify_user_hw_breakpoint);
Greg Kroah-Hartman
maintainerPATCH 5/72 partitions/msdos: Unable to mount UFS 44bsd partitions
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Richard Narron <[email protected]>
commit 5f15684bd5e5ef39d4337988864fec8012471dda upstream.
UFS partitions from newer versions of FreeBSD 10 and 11 use relative addressing for their subpartitions. But older versions of FreeBSD still use absolute addressing just like OpenBSD and NetBSD.
Instead of simply testing for a FreeBSD partition, the code needs to also test if the starting offset of the C subpartition is zero.
https://bugzilla.kernel.org/show_bug.cgi?id=197733
--- block/partitions/msdos.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
block/partitions/msdos.c +3 -1
@@ -300,7 +300,9 @@ static void parse_bsd(struct parsed_partcontinue ; bsd_start =le32_to_cpu (p->p_offset); bsd_size =le32_to_cpu (p->p_size); -if (memcmp (flavour,"bsd\0" ,4 ) ==0 ) +/* FreeBSD has relative offset if C partition offset is zero */ +if (memcmp (flavour,"bsd\0" ,4 ) ==0 && +le32_to_cpu (l->d_partitions[2 ].p_offset) ==0 ) bsd_start += offset;if (offset == bsd_start && size == bsd_size)/* full parent partition, we have it already */
Greg Kroah-Hartman
maintainerPATCH 6/72 usb: gadget: define free_ep_req as universal function
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Felipe F. Tonello <[email protected]>
commit 079fe5a6da616891cca1a26e803e1df2a87e9ae5 upstream.
This function is shared between gadget functions, so this avoid unnecessary duplicated code and potentially avoid memory leaks.
--- drivers/usb/gadget/function/f_midi.c | 6 ------ drivers/usb/gadget/function/f_sourcesink.c | 6 ------ drivers/usb/gadget/function/g_zero.h | 1 - drivers/usb/gadget/u_f.c | 1 - drivers/usb/gadget/u_f.h | 10 ++++++++-- 5 files changed, 8 insertions(+), 16 deletions(-)
drivers/usb/gadget/function/f_midi.c +0 -6
@@ -201,12 +201,6 @@ static inline struct usb_request *midi_areturn alloc_ep_req (ep, length, length); } -static void free_ep_req (struct usb_ep *ep,struct usb_request *req) -{ -kfree (req->buf); -usb_ep_free_request (ep, req); -} -static const uint8_t f_midi_cin_length[] = {0 ,0 ,2 ,3 ,3 ,1 ,2 ,3 ,3 ,3 ,3 ,3 ,2 ,2 ,3 ,1 };
drivers/usb/gadget/function/f_sourcesink.c +0 -6
@@ -303,12 +303,6 @@ static inline struct usb_request *ss_allreturn alloc_ep_req (ep, len, ss->buflen); } -void free_ep_req (struct usb_ep *ep,struct usb_request *req) -{ -kfree (req->buf); -usb_ep_free_request (ep, req); -} -static void disable_ep (struct usb_composite_dev *cdev,struct usb_ep *ep) {int value;
drivers/usb/gadget/function/g_zero.h +0 -1
@@ -59,7 +59,6 @@ void lb_modexit(void);int lb_modinit (void );/* common utilities */ -void free_ep_req (struct usb_ep *ep,struct usb_request *req);void disable_endpoints (struct usb_composite_dev *cdev,struct usb_ep *in,struct usb_ep *out,struct usb_ep *iso_in,struct usb_ep *iso_out);
drivers/usb/gadget/u_f.c +0 -1
@@ -11,7 +11,6 @@* published by the Free Software Foundation. */ -#include <linux/usb/gadget.h> #include "u_f.h" struct usb_request *alloc_ep_req (struct usb_ep *ep,int len,int default_len)
drivers/usb/gadget/u_f.h +8 -2
@@ -16,6 +16,8 @@#ifndef __U_F_H__#define __U_F_H__ +#include <linux/usb/gadget.h> +/* Variable Length Array Macros **********************************************/ #define vla_group (groupname) size_t groupname##__next = 0#define vla_group_size (groupname) groupname##__next
@@ -45,8 +47,12 @@struct usb_ep ;struct usb_request ; +/* Requests allocated via alloc_ep_req() must be freed by free_ep_req(). */ struct usb_request *alloc_ep_req (struct usb_ep *ep,int len,int default_len); +static inline void free_ep_req (struct usb_ep *ep,struct usb_request *req) +{ +kfree (req->buf); +usb_ep_free_request (ep, req); +}#endif /* __U_F_H__ */ - -
Greg Kroah-Hartman
maintainerPATCH 7/72 usb: gadget: change len to size_t on alloc_ep_req()
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Felipe F. Tonello <[email protected]>
commit 69bb99738b5c6d56d2b1a75db9cbb4d187453c1a upstream.
Length of buffers should be of type size_t whenever possible. Altough recommended, this change has no real practical change, unless a driver has a uses a huge or negative buffer size - it might help find these bugs.
--- drivers/usb/gadget/u_f.c | 2 +- drivers/usb/gadget/u_f.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/usb/gadget/u_f.c +1 -1
@@ -13,7 +13,7 @@#include "u_f.h" -struct usb_request *alloc_ep_req (struct usb_ep *ep,int len,int default_len) +struct usb_request *alloc_ep_req (struct usb_ep *ep,size_t len,int default_len) {struct usb_request *req;
drivers/usb/gadget/u_f.h +1 -1
@@ -48,7 +48,7 @@ struct usb_ep;struct usb_request ;/* Requests allocated via alloc_ep_req() must be freed by free_ep_req(). */ -struct usb_request *alloc_ep_req (struct usb_ep *ep,int len,int default_len); +struct usb_request *alloc_ep_req (struct usb_ep *ep,size_t len,int default_len);static inline void free_ep_req (struct usb_ep *ep,struct usb_request *req) {kfree (req->buf);
Greg Kroah-Hartman
maintainerPATCH 8/72 usb: gadget: fix usb_ep_align_maybe endianness and new usb_ep_align
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Felipe F. Tonello <[email protected]>
commit 16b114a6d7973cf027e4c2b23eae1076eaf98c25 upstream.
USB spec specifies wMaxPacketSize to be little endian (as other properties), so when using this variable in the driver we should convert to the current CPU endianness if necessary.
This patch also introduces usb_ep_align() which does always returns the aligned buffer size for an endpoint. This is useful to be used by USB requests allocator functions.
--- include/linux/usb/gadget.h | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-)
include/linux/usb/gadget.h +14 -3
@@ -663,8 +663,20 @@ static inline struct usb_gadget *dev_to_list_for_each_entry (tmp, &(gadget)->ep_list, ep_list)/** +* usb_ep_align - returns @len aligned to ep's maxpacketsize. +* @ep: the endpoint whose maxpacketsize is used to align @len +* @len: buffer size's length to align to @ep's maxpacketsize +* +* This helper is used to align buffer's size to an ep's maxpacketsize. +*/ +static inline size_t usb_ep_align(struct usb_ep *ep, size_t len) +{ +return round_up (len, (size_t )le16_to_cpu (ep->desc->wMaxPacketSize)); +} + +/** * usb_ep_align_maybe - returns @len aligned to ep's maxpacketsize if gadget -* requires quirk_ep_out_aligned_size, otherwise reguens len. +* requires quirk_ep_out_aligned_size, otherwise returns len. * @g: controller to check for quirk * @ep: the endpoint whose maxpacketsize is used to align @len * @len: buffer size's length to align to @ep's maxpacketsize
@@ -675,8 +687,7 @@ static inline struct usb_gadget *dev_to_static inline size_t usb_ep_align_maybe (struct usb_gadget *g,struct usb_ep *ep,size_t len) { -return !g->quirk_ep_out_aligned_size ? len : -round_up (len, (size_t )ep->desc->wMaxPacketSize); +return g->quirk_ep_out_aligned_size ?usb_ep_align (ep, len) : len; }/**
Greg Kroah-Hartman
maintainerPATCH 9/72 usb: gadget: align buffer size when allocating for OUT endpoint
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Felipe F. Tonello <[email protected]>
commit e0466156ee2e944fb47a3fa00932c3698a6d2c67 upstream.
Using usb_ep_align() makes sure that the buffer size for OUT endpoints is always aligned with wMaxPacketSize (512 usually). This makes sure that no buffer has the wrong size, which can cause nasty bugs.
--- drivers/usb/gadget/u_f.c | 3 +++ drivers/usb/gadget/u_f.h | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-)
drivers/usb/gadget/u_f.c +3 -0
@@ -12,6 +12,7 @@*/ #include "u_f.h" +#include <linux/usb/ch9.h> struct usb_request *alloc_ep_req (struct usb_ep *ep,size_t len,int default_len) {
@@ -20,6 +21,8 @@ struct usb_request *alloc_ep_req(struct req =usb_ep_alloc_request (ep,GFP_ATOMIC );if (req) { req->length = len ?: default_len; +if (usb_endpoint_dir_out (ep->desc)) + req->length =usb_ep_align (ep, req->length); req->buf =kmalloc (req->length,GFP_ATOMIC );if (!req->buf) {usb_ep_free_request (ep, req);
drivers/usb/gadget/u_f.h +15 -1
@@ -47,8 +47,22 @@struct usb_ep ;struct usb_request ; -/* Requests allocated via alloc_ep_req() must be freed by free_ep_req(). */ +/** +* alloc_ep_req - returns a usb_request allocated by the gadget driver and +* allocates the request's buffer. +* +* @ep: the endpoint to allocate a usb_request +* @len: usb_requests's buffer suggested size +* @default_len: used if @len is not provided, ie, is 0 +* +* In case @ep direction is OUT, the @len will be aligned to ep's +* wMaxPacketSize. In order to avoid memory leaks or drops, *always* use +* usb_requests's length (req->length) to refer to the allocated buffer size. +* Requests allocated via alloc_ep_req() *must* be freed by free_ep_req(). +*/ struct usb_request *alloc_ep_req (struct usb_ep *ep,size_t len,int default_len); + +/* Frees a usb_request previously allocated by alloc_ep_req() */ static inline void free_ep_req (struct usb_ep *ep,struct usb_request *req) {kfree (req->buf);
Greg Kroah-Hartman
maintainerPATCH 10/72 usb: gadget: f_hid: fix: Prevent accessing released memory
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Krzysztof Opasiak <[email protected]>
commit aa65d11aa008f4de58a9cee7e121666d9d68505e upstream.
When we unlock our spinlock to copy data to user we may get disabled by USB host and free the whole list of completed out requests including the one from which we are copying the data to user memory.
To prevent from this let's remove our working element from the list and place it back only if there is sth left when we finish with it.
--- drivers/usb/gadget/function/f_hid.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-)
drivers/usb/gadget/function/f_hid.c +20 -4
@@ -223,6 +223,13 @@ static ssize_t f_hidg_read(struct file */* pick the first one */ list =list_first_entry (&hidg->completed_out_req, struct f_hidg_req_list, list); + +/* +* Remove this from list to protect it from beign free() +* while host disables our function +*/ +list_del (&list->list); + req = list->req; count = min_t(unsigned int, count, req->actual - list->pos);spin_unlock_irqrestore (&hidg->spinlock, flags);
@@ -238,15 +245,20 @@ static ssize_t f_hidg_read(struct file ** call, taking into account its current read position. */ if (list->pos == req->actual) { -spin_lock_irqsave (&hidg->spinlock, flags); -list_del (&list->list);kfree (list); -spin_unlock_irqrestore (&hidg->spinlock, flags); req->length = hidg->report_length; ret =usb_ep_queue (hidg->out_ep, req,GFP_KERNEL ); -if (ret <0 ) +if (ret <0 ) { +free_ep_req (hidg->out_ep, req);return ret; + } + }else { +spin_lock_irqsave (&hidg->spinlock, flags); +list_add (&list->list, &hidg->completed_out_req); +spin_unlock_irqrestore (&hidg->spinlock, flags); + +wake_up (&hidg->read_queue); }return count;
@@ -490,14 +502,18 @@ static void hidg_disable(struct usb_func {struct f_hidg *hidg =func_to_hidg (f);struct f_hidg_req_list *list, *next; +unsigned long flags;usb_ep_disable (hidg->in_ep);usb_ep_disable (hidg->out_ep); +spin_lock_irqsave (&hidg->spinlock, flags);list_for_each_entry_safe (list, next, &hidg->completed_out_req, list) { +free_ep_req (hidg->out_ep, list->req);list_del (&list->list);kfree (list); } +spin_unlock_irqrestore (&hidg->spinlock, flags); }static int hidg_set_alt (struct usb_function *f,unsigned intf,unsigned alt)
Greg Kroah-Hartman
maintainerPATCH 11/72 kprobes/x86: Fix to set RWX bits correctly before releasing trampoline
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Masami Hiramatsu <[email protected]>
commit c93f5cf571e7795f97d49ef51b766cf25e328545 upstream.
Fix kprobes to set(recover) RWX bits correctly on trampoline buffer before releasing it. Releasing readonly page to module_memfree() crash the kernel.
Without this fix, if kprobes user register a bunch of kprobes in function body (since kprobes on function entry usually use ftrace) and unregister it, kernel hits a BUG and crash.
--- arch/x86/kernel/kprobes/core.c | 9 +++++++++ kernel/kprobes.c | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-)
arch/x86/kernel/kprobes/core.c +9 -0
@@ -49,6 +49,7 @@#include <linux/kdebug.h> #include <linux/kallsyms.h> #include <linux/ftrace.h> +#include <linux/moduleloader.h> #include <asm/cacheflush.h> #include <asm/desc.h>
@@ -402,6 +403,14 @@ int __copy_instruction(u8 *dest, u8 *srcreturn length; } +/* Recover page to RW mode before releasing it */ +void free_insn_page (void *page) +{ +set_memory_nx ((unsigned long )page &PAGE_MASK ,1 ); +set_memory_rw ((unsigned long )page &PAGE_MASK ,1 ); +module_memfree (page); +} +static int arch_copy_kprobe (struct kprobe *p) {int ret;
kernel/kprobes.c +1 -1
@@ -125,7 +125,7 @@ static void *alloc_insn_page(void)return module_alloc (PAGE_SIZE ); } -static void free_insn_page (void *page) +void __weak free_insn_page (void *page) {module_memfree (page); }
Greg Kroah-Hartman
maintainerPATCH 12/72 ACPI, PCI, irq: remove redundant check for null string pointer
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Colin Ian King <[email protected]>
commit 45288978859119c019eff93f0cb838a0de100bcc upstream.
source is decleared as a 4 byte char array in struct acpi_pci_routing_table so !prt->source is a redundant null string pointer check. Detected with smatch:
drivers/acpi/pci_irq.c:134 do_prt_fixups() warn: this array is probably
non-NULL. 'prt->source'
--- drivers/acpi/pci_irq.c | 3 --- 1 file changed, 3 deletions(-)
drivers/acpi/pci_irq.c +0 -3
@@ -131,9 +131,6 @@ static void do_prt_fixups(struct acpi_pr quirk = &prt_quirks[i];/* All current quirks involve link devices, not GSIs */ -if (!prt->source) -continue ; - if (dmi_check_system(quirk->system) && entry->id.segment == quirk->segment && entry->id.bus == quirk->bus &&
Greg Kroah-Hartman
maintainerPATCH 13/72 writeback: fix the wrong congested state variable definition
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kaixu Xia <[email protected]>
commit c877ef8ae7b8edaedccad0fc8c23d4d1de7e2480 upstream.
The right variable definition should be wb_congested_state that include WB_async_congested and WB_sync_congested. So fix it.
--- mm/backing-dev.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
mm/backing-dev.c +2 -2
@@ -922,7 +922,7 @@ static atomic_t nr_wb_congested[2];void clear_wb_congested (struct bdi_writeback_congested *congested,int sync) {wait_queue_head_t *wqh = &congestion_wqh[sync]; -enum wb_state bit; +enum wb_congested_state bit; bit = sync ? WB_sync_congested : WB_async_congested;if (test_and_clear_bit (bit, &congested->state))
@@ -935,7 +935,7 @@ EXPORT_SYMBOL(clear_wb_congested);void set_wb_congested (struct bdi_writeback_congested *congested,int sync) { -enum wb_state bit; +enum wb_congested_state bit; bit = sync ? WB_sync_congested : WB_async_congested;if (!test_and_set_bit (bit, &congested->state))
Greg Kroah-Hartman
maintainerPATCH 14/72 PCI: Make PCI_ROM_ADDRESS_MASK a 32-bit constant
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Kaehlcke <[email protected]>
commit 76dc52684d0f72971d9f6cc7d5ae198061b715bd upstream.
A 64-bit value is not needed since a PCI ROM address consists in 32 bits. This fixes a clang warning about "implicit conversion from 'unsigned long' to 'u32'".
Also remove now unnecessary casts to u32 from __pci_read_base() and pci_std_update_resource().
--- drivers/pci/probe.c | 2 +- drivers/pci/setup-res.c | 2 +- include/uapi/linux/pci_regs.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-)
drivers/pci/probe.c +1 -1
@@ -230,7 +230,7 @@ int __pci_read_base(struct pci_dev *dev, res->flags |=IORESOURCE_ROM_ENABLE ; l64 = l &PCI_ROM_ADDRESS_MASK ; sz64 = sz &PCI_ROM_ADDRESS_MASK ; - mask64 = (u32 )PCI_ROM_ADDRESS_MASK ; + mask64 =PCI_ROM_ADDRESS_MASK ; }if (res->flags &IORESOURCE_MEM_64 ) {
drivers/pci/setup-res.c +1 -1
@@ -63,7 +63,7 @@ static void pci_std_update_resource(stru mask = (u32 )PCI_BASE_ADDRESS_IO_MASK ; new |= res->flags & ~PCI_BASE_ADDRESS_IO_MASK ; }else if (resno ==PCI_ROM_RESOURCE ) { - mask = (u32 )PCI_ROM_ADDRESS_MASK ; + mask =PCI_ROM_ADDRESS_MASK ; }else { mask = (u32 )PCI_BASE_ADDRESS_MEM_MASK ; new |= res->flags & ~PCI_BASE_ADDRESS_MEM_MASK ;
include/uapi/linux/pci_regs.h +1 -1
@@ -106,7 +106,7 @@#define PCI_SUBSYSTEM_ID 0x2e#define PCI_ROM_ADDRESS 0x30/* Bits 31..11 are address, 10..1 reserved */ #define PCI_ROM_ADDRESS_ENABLE 0x01 -#define PCI_ROM_ADDRESS_MASK (~0x7ffUL) +#define PCI_ROM_ADDRESS_MASK (~0x7ffU)#define PCI_CAPABILITY_LIST 0x34/* Offset of first capability list entry */
Greg Kroah-Hartman
maintainerPATCH 15/72 dm ioctl: remove double parentheses
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Kaehlcke <[email protected]>
commit e36215d87f301f9567c8c99fd34e6c3521a94ddf upstream.
The extra pair of parantheses is not needed and causes clang to generate warnings about the DM_DEV_CREATE_CMD comparison in validate_params().
Also remove another double parentheses that doesn't cause a warning.
--- drivers/md/dm-ioctl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/md/dm-ioctl.c +2 -2
@@ -1773,12 +1773,12 @@ static int validate_params(uint cmd, str cmd == DM_LIST_VERSIONS_CMD)return 0 ; -if ((cmd ==DM_DEV_CREATE_CMD )) { +if (cmd ==DM_DEV_CREATE_CMD ) {if (!*param->name) {DMWARN ("name not supplied when creating device" );return -EINVAL ; } - }else if ((*param->uuid && *param->name)) { + }else if (*param->uuid && *param->name) {DMWARN ("only supply one of name or uuid, cmd(%u)" , cmd);return -EINVAL ; }
Greg Kroah-Hartman
maintainerPATCH 16/72 Input: mousedev - fix implicit conversion warning
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nick Desaulniers <[email protected]>
commit dae1a432ab1fe79ae53129ededeaece35a2dc14d upstream.
Clang warns:
drivers/input/mousedev.c:653:63: error: implicit conversion from 'int' to 'signed char' changes value from 200 to -56 [-Wconstant-conversion]
client->ps2[1] = 0x60; client->ps2[2] = 3; client->ps2[3] = 200;
~ ^~~As the PS2 data is really a stream of bytes, let's switch to using u8 type for it, which silences this warning.
--- drivers/input/mousedev.c | 62 +++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 28 deletions(-)
drivers/input/mousedev.c +34 -28
@@ -15,6 +15,7 @@#define MOUSEDEV_MINORS 31#define MOUSEDEV_MIX 63 +#include <linux/bitops.h> #include <linux/sched.h> #include <linux/slab.h> #include <linux/poll.h>
@@ -103,7 +104,7 @@ struct mousedev_client {spinlock_t packet_lock;int pos_x, pos_y; -signed char ps2[6 ]; +u8 ps2[6 ];unsigned char ready, buffer, bufsiz;unsigned char imexseq, impsseq;enum mousedev_emul mode;
@@ -291,11 +292,10 @@ static void mousedev_notify_readers(stru } client->pos_x += packet->dx; - client->pos_x = client->pos_x <0 ? -0 : (client->pos_x >= xres ? xres : client->pos_x); + client->pos_x =clamp_val (client->pos_x,0 , xres); + client->pos_y += packet->dy; - client->pos_y = client->pos_y <0 ? -0 : (client->pos_y >= yres ? yres : client->pos_y); + client->pos_y =clamp_val (client->pos_y,0 , yres); p->dx += packet->dx; p->dy += packet->dy;
@@ -571,44 +571,50 @@ static int mousedev_open(struct inode *ireturn error; } -static inline int mousedev_limit_delta (int delta,int limit) -{ -return delta > limit ? limit : (delta < -limit ? -limit : delta); -} - -static void mousedev_packet (struct mousedev_client *client, -signed char *ps2_data) +static void mousedev_packet (struct mousedev_client *client,u8 *ps2_data) {struct mousedev_motion *p = &client->packets[client->tail]; +s8 dx, dy, dz; + + dx =clamp_val (p->dx,-127 ,127 ); + p->dx -= dx; + + dy =clamp_val (p->dy,-127 ,127 ); + p->dy -= dy; - ps2_data[0 ] =0x08 | - ((p->dx <0 ) <<4 ) | ((p->dy <0 ) <<5 ) | (p->buttons &0x07 ); - ps2_data[1 ] =mousedev_limit_delta (p->dx,127 ); - ps2_data[2 ] =mousedev_limit_delta (p->dy,127 ); - p->dx -= ps2_data[1 ]; - p->dy -= ps2_data[2 ]; + ps2_data[0 ] =BIT (3 ); + ps2_data[0 ] |= ((dx &BIT (7 )) >>3 ) | ((dy &BIT (7 )) >>2 ); + ps2_data[0 ] |= p->buttons &0x07 ; + ps2_data[1 ] = dx; + ps2_data[2 ] = dy;switch (client->mode) {case MOUSEDEV_EMUL_EXPS : - ps2_data[3 ] =mousedev_limit_delta (p->dz,7 ); - p->dz -= ps2_data[3 ]; - ps2_data[3 ] = (ps2_data[3 ] &0x0f ) | ((p->buttons &0x18 ) <<1 ); + dz =clamp_val (p->dz,-7 ,7 ); + p->dz -= dz; + + ps2_data[3 ] = (dz &0x0f ) | ((p->buttons &0x18 ) <<1 ); client->bufsiz =4 ;break ;case MOUSEDEV_EMUL_IMPS : - ps2_data[0 ] |= - ((p->buttons &0x10 ) >>3 ) | ((p->buttons &0x08 ) >>1 ); - ps2_data[3 ] =mousedev_limit_delta (p->dz,127 ); - p->dz -= ps2_data[3 ]; + dz =clamp_val (p->dz,-127 ,127 ); + p->dz -= dz; + + ps2_data[0 ] |= ((p->buttons &0x10 ) >>3 ) | + ((p->buttons &0x08 ) >>1 ); + ps2_data[3 ] = dz; + client->bufsiz =4 ;break ;case MOUSEDEV_EMUL_PS2 :default : - ps2_data[0 ] |= - ((p->buttons &0x10 ) >>3 ) | ((p->buttons &0x08 ) >>1 ); p->dz =0 ; + + ps2_data[0 ] |= ((p->buttons &0x10 ) >>3 ) | + ((p->buttons &0x08 ) >>1 ); + client->bufsiz =3 ;break ; }
@@ -714,7 +720,7 @@ static ssize_t mousedev_read(struct file {struct mousedev_client *client = file->private_data;struct mousedev *mousedev = client->mousedev; -signed char data[sizeof (client->ps2)]; +u8 data[sizeof (client->ps2)];int retval =0 ; if (!client->ready && !client->buffer && mousedev->exist &&
Greg Kroah-Hartman
maintainerPATCH 17/72 netfilter: nf_nat_h323: fix logical-not-parentheses warning
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nick Desaulniers <[email protected]>
commit eee6ebbac18a189ef33d25ea9b8bcae176515e49 upstream.
Clang produces the following warning:
net/ipv4/netfilter/nf_nat_h323.c:553:6: error:
logical not is only applied to the left hand side of this comparison
[-Werror,-Wlogical-not-parentheses]
if (!set_h225_addr(skb, protoff, data, dataoff, taddr,
^
add parentheses after the '!' to evaluate the comparison first add parentheses around left hand side expression to silence this warning
There's not necessarily a bug here, but it's cleaner to return early, ex:
if (x)
return
...
rather than:
if (x == 0)
...
else
return
Also added a return code check that seemed to be missing in one instance.
--- net/ipv4/netfilter/nf_nat_h323.c | 57 ++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 27 deletions(-)
net/ipv4/netfilter/nf_nat_h323.c +30 -27
@@ -252,16 +252,16 @@ static int nat_rtp_rtcp(struct sk_buff *if (set_h245_addr (skb, protoff, data, dataoff, taddr, &ct->tuplehash[!dir].tuple.dst.u3,htons ((port &htons (1 )) ? nated_port +1 : - nated_port)) ==0 ) { -/* Save ports */ - info->rtp_port[i][dir] = rtp_port; - info->rtp_port[i][!dir] =htons (nated_port); - }else { + nated_port))) {nf_ct_unexpect_related (rtp_exp);nf_ct_unexpect_related (rtcp_exp);return -1 ; } +/* Save ports */ + info->rtp_port[i][dir] = rtp_port; + info->rtp_port[i][!dir] =htons (nated_port); +/* Success */ pr_debug("nf_nat_h323: expect RTP %pI4:%hu->%pI4:%hu\n", &rtp_exp->tuple.src.u3.ip,
@@ -370,15 +370,15 @@ static int nat_h245(struct sk_buff *skb,/* Modify signal */ if (set_h225_addr (skb, protoff, data, dataoff, taddr, &ct->tuplehash[!dir].tuple.dst.u3, -htons (nated_port)) ==0 ) { -/* Save ports */ - info->sig_port[dir] = port; - info->sig_port[!dir] =htons (nated_port); - }else { +htons (nated_port))) {nf_ct_unexpect_related (exp);return -1 ; } +/* Save ports */ + info->sig_port[dir] = port; + info->sig_port[!dir] =htons (nated_port); + pr_debug("nf_nat_q931: expect H.245 %pI4:%hu->%pI4:%hu\n", &exp->tuple.src.u3.ip, ntohs(exp->tuple.src.u.tcp.port),
@@ -462,24 +462,27 @@ static int nat_q931(struct sk_buff *skb,/* Modify signal */ if (set_h225_addr (skb, protoff, data,0 , &taddr[idx], &ct->tuplehash[!dir].tuple.dst.u3, -htons (nated_port)) ==0 ) { -/* Save ports */ - info->sig_port[dir] = port; - info->sig_port[!dir] =htons (nated_port); - -/* Fix for Gnomemeeting */ -if (idx >0 && -get_h225_addr (ct, *data, &taddr[0 ], &addr, &port) && - (ntohl (addr.ip) &0xff000000 ) ==0x7f000000 ) { -set_h225_addr (skb, protoff, data,0 , &taddr[0 ], - &ct->tuplehash[!dir].tuple.dst.u3, - info->sig_port[!dir]); - } - }else { +htons (nated_port))) {nf_ct_unexpect_related (exp);return -1 ; } +/* Save ports */ + info->sig_port[dir] = port; + info->sig_port[!dir] =htons (nated_port); + +/* Fix for Gnomemeeting */ +if (idx >0 && +get_h225_addr (ct, *data, &taddr[0 ], &addr, &port) && + (ntohl (addr.ip) &0xff000000 ) ==0x7f000000 ) { +if (set_h225_addr (skb, protoff, data,0 , &taddr[0 ], + &ct->tuplehash[!dir].tuple.dst.u3, + info->sig_port[!dir])) { +nf_ct_unexpect_related (exp); +return -1 ; + } + } +/* Success */ pr_debug("nf_nat_ras: expect Q.931 %pI4:%hu->%pI4:%hu\n", &exp->tuple.src.u3.ip,
@@ -550,9 +553,9 @@ static int nat_callforwarding(struct sk_ }/* Modify signal */ -if (!set_h225_addr (skb, protoff, data, dataoff, taddr, - &ct->tuplehash[!dir].tuple.dst.u3, -htons (nated_port)) ==0 ) { +if (set_h225_addr (skb, protoff, data, dataoff, taddr, + &ct->tuplehash[!dir].tuple.dst.u3, +htons (nated_port))) {nf_ct_unexpect_related (exp);return -1 ; }
Greg Kroah-Hartman
maintainerPATCH 18/72 genirq: Use cpumask_available() for check of cpumask variable
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Kaehlcke <[email protected]>
commit d170fe7dd992b313d4851ae5ab77ee7a51ed8c72 upstream.
This fixes the following clang warning when CONFIG_CPUMASK_OFFSTACK=n:
kernel/irq/manage.c:839:28: error: address of array 'desc->irq_common_data.affinity' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion]
--- kernel/irq/manage.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/irq/manage.c +1 -1
@@ -836,7 +836,7 @@ irq_thread_check_affinity(struct irq_des* This code is triggered unconditionally. Check the affinity * mask pointer. For CPU_MASK_OFFSTACK=n this is optimized out. */ -if (desc->irq_common_data.affinity) +if (cpumask_available (desc->irq_common_data.affinity))cpumask_copy (mask, desc->irq_common_data.affinity);else valid = false;
Greg Kroah-Hartman
maintainerPATCH 19/72 cpumask: Add helper cpumask_available()
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Kaehlcke <[email protected]>
commit f7e30f01a9e221067bb4b579e3cfc25cd2617467 upstream.
With CONFIG_CPUMASK_OFFSTACK=y cpumask_var_t is a struct cpumask pointer, otherwise a struct cpumask array with a single element.
Some code dealing with cpumasks needs to validate that a cpumask_var_t is not a NULL pointer when CONFIG_CPUMASK_OFFSTACK=y. This is typically done by performing the check always, regardless of the underlying type of cpumask_var_t. This works in both cases, however clang raises a warning like this when CONFIG_CPUMASK_OFFSTACK=n:
kernel/irq/manage.c:839:28: error: address of array 'desc->irq_common_data.affinity' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion]
Add the inline helper cpumask_available() which only performs the pointer check if CONFIG_CPUMASK_OFFSTACK=y.
--- include/linux/cpumask.h | 10 ++++++++++ 1 file changed, 10 insertions(+)
include/linux/cpumask.h +10 -0
@@ -661,6 +661,11 @@ void alloc_bootmem_cpumask_var(cpumask_vvoid free_cpumask_var (cpumask_var_t mask);void free_bootmem_cpumask_var (cpumask_var_t mask); +static inline bool cpumask_available (cpumask_var_t mask) +{ +return mask !=NULL ; +} +#else typedef struct cpumask cpumask_var_t [1 ];
@@ -701,6 +706,11 @@ static inline void free_cpumask_var(cpumstatic inline void free_bootmem_cpumask_var (cpumask_var_t mask) { } + +static inline bool cpumask_available (cpumask_var_t mask) +{ +return true; +}#endif /* CONFIG_CPUMASK_OFFSTACK */ /* It's common to want to use cpu_all_mask in struct member initializers,
Greg Kroah-Hartman
maintainerPATCH 20/72 selinux: Remove unnecessary check of array base in selinux_set_mapping()
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Kaehlcke <[email protected]>
commit 342e91578eb6909529bc7095964cd44b9c057c4e upstream.
'perms' will never be NULL since it isn't a plain pointer but an array of u32 values.
This fixes the following warning when building with clang:
security/selinux/ss/services.c:158:16: error: address of array 'p_in->perms' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion]
while (p_in->perms && p_in->perms[k]) {--- security/selinux/ss/services.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
security/selinux/ss/services.c +1 -1
@@ -155,7 +155,7 @@ static int selinux_set_mapping(struct po } k =0 ; -while (p_in->perms && p_in->perms[k]) { +while (p_in->perms[k]) {/* An empty permission string skips ahead */ if (!*p_in->perms[k]) { k++;
Greg Kroah-Hartman
maintainerPATCH 21/72 fs: compat: Remove warning from COMPATIBLE_IOCTL
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mark Charlebois <[email protected]>
commit 9280cdd6fe5b8287a726d24cc1d558b96c8491d7 upstream.
cmd in COMPATIBLE_IOCTL is always a u32, so cast it so there isn't a warning about an overflow in XFORM.
From: Mark Charlebois <[email protected]>
--- fs/compat_ioctl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/compat_ioctl.c +1 -1
@@ -811,7 +811,7 @@ static int compat_ioctl_preallocate(stru*/ #define XFORM (i) (((i) ^ ((i) << 27) ^ ((i) << 17)) & 0xffffffff) -#define COMPATIBLE_IOCTL (cmd) XFORM(cmd), +#define COMPATIBLE_IOCTL (cmd) XFORM((u32)cmd),/* ioctl should not be warned about even if it's not implemented. Valid reasons to use this: - It is implemented with ->compat_ioctl on some device, but programs
Greg Kroah-Hartman
maintainerPATCH 22/72 jiffies.h: declare jiffies and jiffies_64 with ____cacheline_aligned_in_smp
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Kaehlcke <[email protected]>
commit 7c30f352c852bae2715ad65ac4a38ca9af7d7696 upstream.
jiffies_64 is defined in kernel/time/timer.c with ____cacheline_aligned_in_smp, however this macro is not part of the declaration of jiffies and jiffies_64 in jiffies.h.
As a result clang generates the following warning:
kernel/time/timer.c:57:26: error: section does not match previous declaration [-Werror,-Wsection]
__visible u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES;
^
include/linux/cache.h:39:36: note: expanded from macro '__cacheline_aligned_in_smp'
^
include/linux/cache.h:34:4: note: expanded from macro '__cacheline_aligned'
__section__(".data..cacheline_aligned")))
^
include/linux/jiffies.h:77:12: note: previous attribute is here
extern u64 __jiffy_data jiffies_64;
^ include/linux/jiffies.h:70:38: note: expanded from macro '__jiffy_data'
--- include/linux/jiffies.h | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-)
include/linux/jiffies.h +3 -8
@@ -1,6 +1,7 @@#ifndef _LINUX_JIFFIES_H#define _LINUX_JIFFIES_H +#include <linux/cache.h> #include <linux/math64.h> #include <linux/kernel.h> #include <linux/types.h>
@@ -63,19 +64,13 @@ extern int register_refined_jiffies(long/* TICK_USEC is the time between ticks in usec assuming fake USER_HZ */ #define TICK_USEC ((1000000UL + USER_HZ/2) / USER_HZ) -/* some arch's have a small-data section that can be accessed register-relative -* but that can only take up to, say, 4-byte variables. jiffies being part of -* an 8-byte variable may not be correctly accessed unless we force the issue -*/ -#define __jiffy_data __attribute__((section(".data"))) -/* * The 64-bit value is not atomic - you MUST NOT read it * without sampling the sequence number in jiffies_lock. * get_jiffies_64() will do this for you as appropriate. */ -extern u64 __jiffy_data jiffies_64; -extern unsigned long volatile __jiffy_data jiffies; +extern u64 __cacheline_aligned_in_smp jiffies_64; +extern unsigned long volatile __cacheline_aligned_in_smp jiffies;#if (BITS_PER_LONG <64 )u64 get_jiffies_64 (void );
Greg Kroah-Hartman
maintainerPATCH 23/72 frv: declare jiffies to be located in the .data section
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Kaehlcke <[email protected]>
commit 60b0a8c3d2480f3b57282b47b7cae7ee71c48635 upstream.
Commit 7c30f352c852 ("jiffies.h: declare jiffies and jiffies_64 with ____cacheline_aligned_in_smp") removed a section specification from the jiffies declaration that caused conflicts on some platforms.
Unfortunately this change broke the build for frv:
kernel/built-in.o: In function `__do_softirq': (.text+0x6460): relocation truncated to fit: R_FRV_GPREL12 against symbol
`jiffies' defined in *ABS* section in .tmp_vmlinux1
kernel/built-in.o: In function `__do_softirq': (.text+0x6574): relocation truncated to fit: R_FRV_GPREL12 against symbol
`jiffies' defined in *ABS* section in .tmp_vmlinux1
kernel/built-in.o: In function `pwq_activate_delayed_work': workqueue.c:(.text+0x15b9c): relocation truncated to fit: R_FRV_GPREL12 against
symbol `jiffies' defined in *ABS* section in .tmp_vmlinux1
...
Add __jiffy_arch_data to the declaration of jiffies and use it on frv to include the section specification. For all other platforms __jiffy_arch_data (currently) has no effect.
--- arch/frv/include/asm/timex.h | 6 ++++++ include/linux/jiffies.h | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-)
arch/frv/include/asm/timex.h +6 -0
@@ -16,5 +16,11 @@ static inline cycles_t get_cycles(void)#define vxtime_lock () do {} while (0)#define vxtime_unlock () do {} while (0) +/* This attribute is used in include/linux/jiffies.h alongside with +* __cacheline_aligned_in_smp. It is assumed that __cacheline_aligned_in_smp +* for frv does not contain another section specification. +*/ +#define __jiffy_arch_data __attribute__((__section__(".data"))) +#endif
include/linux/jiffies.h +5 -1
@@ -64,13 +64,17 @@ extern int register_refined_jiffies(long/* TICK_USEC is the time between ticks in usec assuming fake USER_HZ */ #define TICK_USEC ((1000000UL + USER_HZ/2) / USER_HZ) +#ifndef __jiffy_arch_data +#define __jiffy_arch_data +#endif +/* * The 64-bit value is not atomic - you MUST NOT read it * without sampling the sequence number in jiffies_lock. * get_jiffies_64() will do this for you as appropriate. */ extern u64 __cacheline_aligned_in_smp jiffies_64; -extern unsigned long volatile __cacheline_aligned_in_smp jiffies; +extern unsigned long volatile __cacheline_aligned_in_smp __jiffy_arch_data jiffies;#if (BITS_PER_LONG <64 )u64 get_jiffies_64 (void );
Greg Kroah-Hartman
maintainerPATCH 24/72 audit: add tty field to LOGIN event
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Richard Guy Briggs <[email protected]>
commit db0a6fb5d97afe01fd9c47d37c6daa82d4d4001d upstream.
The tty field was missing from AUDIT_LOGIN events.
Refactor code to create a new function audit_get_tty(), using it to replace the call in audit_log_task_info() and to add it to audit_log_set_loginuid(). Lock and bump the kref to protect it, adding audit_put_tty() alias to decrement it.
--- include/linux/audit.h | 24 ++++++++++++++++++++++++ kernel/audit.c | 18 +++++------------- kernel/auditsc.c | 8 ++++++-- 3 files changed, 35 insertions(+), 15 deletions(-)
include/linux/audit.h +24 -0
@@ -26,6 +26,7 @@#include <linux/sched.h> #include <linux/ptrace.h> #include <uapi/linux/audit.h> +#include <linux/tty.h> #define AUDIT_INO_UNSET ((unsigned long)-1)#define AUDIT_DEV_UNSET ((dev_t)-1)
@@ -239,6 +240,23 @@ static inline unsigned int audit_get_sesreturn tsk->sessionid; } +static inline struct tty_struct *audit_get_tty (struct task_struct *tsk) +{ +struct tty_struct *tty =NULL ; +unsigned long flags; + +spin_lock_irqsave (&tsk->sighand->siglock, flags); +if (tsk->signal) + tty =tty_kref_get (tsk->signal->tty); +spin_unlock_irqrestore (&tsk->sighand->siglock, flags); +return tty; +} + +static inline void audit_put_tty (struct tty_struct *tty) +{ +tty_kref_put (tty); +} +extern void __audit_ipc_obj (struct kern_ipc_perm *ipcp);extern void __audit_ipc_set_perm (unsigned long qbytes,uid_t uid,gid_t gid,umode_t mode);extern void __audit_bprm (struct linux_binprm *bprm);
@@ -410,6 +428,12 @@ static inline unsigned int audit_get_ses {return -1 ; } +static inline struct tty_struct *audit_get_tty (struct task_struct *tsk) +{ +return NULL ; +} +static inline void audit_put_tty (struct tty_struct *tty) +{ }static inline void audit_ipc_obj (struct kern_ipc_perm *ipcp) { } static inline void audit_ipc_set_perm(unsigned long qbytes, uid_t uid,
kernel/audit.c +5 -13
@@ -64,7 +64,6 @@#include <linux/security.h> #endif #include <linux/freezer.h> -#include <linux/tty.h> #include <linux/pid_namespace.h> #include <net/netns/generic.h>
@@ -1876,21 +1875,14 @@ void audit_log_task_info(struct audit_bu {const struct cred *cred;char comm[sizeof (tsk->comm)]; -char *tty; +struct tty_struct *tty;if (!ab)return ;/* tsk == current */ cred =current_cred (); - -spin_lock_irq (&tsk->sighand->siglock); -if (tsk->signal && tsk->signal->tty && tsk->signal->tty->name) - tty = tsk->signal->tty->name; -else - tty ="(none)" ; -spin_unlock_irq (&tsk->sighand->siglock); - + tty =audit_get_tty (tsk);audit_log_format (ab," ppid=%d pid=%d auid=%u uid=%u gid=%u" " euid=%u suid=%u fsuid=%u"
@@ -1906,11 +1898,11 @@ void audit_log_task_info(struct audit_bufrom_kgid (&init_user_ns, cred->egid),from_kgid (&init_user_ns, cred->sgid),from_kgid (&init_user_ns, cred->fsgid), - tty, audit_get_sessionid(tsk)); - + tty ?tty_name (tty) :"(none)" , + audit_get_sessionid(tsk)); +audit_put_tty (tty);audit_log_format (ab," comm=" );audit_log_untrustedstring (ab,get_task_comm (comm, tsk)); -audit_log_d_path_exe (ab, tsk->mm);audit_log_task_context (ab); }
kernel/auditsc.c +6 -2
@@ -1976,6 +1976,7 @@ static void audit_log_set_loginuid(kuid_ {struct audit_buffer *ab;uid_t uid, oldloginuid, loginuid; +struct tty_struct *tty;if (!audit_enabled)return ;
@@ -1983,14 +1984,17 @@ static void audit_log_set_loginuid(kuid_ uid =from_kuid (&init_user_ns,task_uid (current)); oldloginuid =from_kuid (&init_user_ns, koldloginuid); loginuid =from_kuid (&init_user_ns, kloginuid), + tty =audit_get_tty (current); ab =audit_log_start (NULL ,GFP_KERNEL ,AUDIT_LOGIN );if (!ab)return ;audit_log_format (ab,"pid=%d uid=%u" ,task_pid_nr (current), uid);audit_log_task_context (ab); -audit_log_format (ab," old-auid=%u auid=%u old-ses=%u ses=%u res=%d" , - oldloginuid, loginuid, oldsessionid, sessionid, !rc); +audit_log_format (ab," old-auid=%u auid=%u tty=%s old-ses=%u ses=%u res=%d" , + oldloginuid, loginuid, tty ?tty_name (tty) :"(none)" , + oldsessionid, sessionid, !rc); +audit_put_tty (tty);audit_log_end (ab); }
Re: [PATCH 4.4 24/72] audit: add tty field to LOGIN event
Quoted 7 lines · Greg Kroah-Hartman
4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Richard Guy Briggs <[email protected]>
commit
db0a6fb5d97afe01fd9c47d37c6daa82d4d4001dupstream.
[...]
Quoted 15 lines
kernel/auditsc.c +1
-0@@ -1976,6 +1976,7 @@ static void audit_log_set_loginuid(kuid_ { struct audit_buffer *ab; uid_t uid, oldloginuid, loginuid; +struct tty_struct *tty;
if (!audit_enabled)
return;kernel/auditsc.c +1
-0@@ -1983,14 +1984,17 @@ static void audit_log_set_loginuid(kuid_ uid = from_kuid(&init_user_ns, task_uid(current)); oldloginuid = from_kuid(&init_user_ns, koldloginuid); loginuid = from_kuid(&init_user_ns, kloginuid), + tty =audit_get_tty (current);
Quoted 4 lines
ab =audit_log_start(NULL, GFP_KERNEL, AUDIT_LOGIN); if (!ab)
return;
This error path leaks the tty ref. Fixed upstream by:
commit 76a658c20efd541a62838d9ff68ce94170d7a549
Author: Richard Guy Briggs <[email protected]> Date: Tue Jun 28 12:06:58 2016 -0400
audit: move calcs after alloc and check when logging set loginuid
Ben.
Quoted 11 lines
audit_log_format(ab, "pid=%d uid=%u", task_pid_nr(current), uid);audit_log_task_context(ab);kernel/auditsc.c +4
-2-audit_log_format (ab," old-auid=%u auid=%u old-ses=%u ses=%u res=%d" , - oldloginuid, loginuid, oldsessionid, sessionid, !rc); +audit_log_format (ab," old-auid=%u auid=%u tty=%s old-ses=%u ses=%u res=%d" , + oldloginuid, loginuid, tty ? tty_name(tty) : "(none)", + oldsessionid, sessionid, !rc); +audit_put_tty (tty);
audit_log_end(ab);
}
Signature · 2 lines
Ben Hutchings Software Developer, Codethink Ltd.
Greg Kroah-Hartman
maintainerRe: [PATCH 4.4 24/72] audit: add tty field to LOGIN event
Quoted 31 lines · Ben Hutchings
Quoted 7 lines · Greg Kroah-Hartman
4.4-stable review patch.��If anyone has any objections, please let me know.
------------------
From: Richard Guy Briggs <[email protected]>
commit
db0a6fb5d97afe01fd9c47d37c6daa82d4d4001dupstream.[...]
Quoted 15 lines
kernel/auditsc.c +1
-0@@ -1976,6 +1976,7 @@ static void audit_log_set_loginuid(kuid_ �{ � struct audit_buffer *ab; � uid_t uid, oldloginuid, loginuid; +struct tty_struct *tty;�
� if (!audit_enabled)
� return;kernel/auditsc.c +1
-0@@ -1983,14 +1984,17 @@ static void audit_log_set_loginuid(kuid_ � uid = from_kuid(&init_user_ns, task_uid(current)); � oldloginuid = from_kuid(&init_user_ns, koldloginuid); � loginuid = from_kuid(&init_user_ns, kloginuid), + tty =audit_get_tty (current);Quoted 4 lines
�
� ab =audit_log_start(NULL, GFP_KERNEL, AUDIT_LOGIN);
� if (!ab)
� return;This error path leaks the tty ref. Fixed upstream by:
Quoted 5 lines
commit
76a658c20efd541a62838d9ff68ce94170d7a549Author: Richard Guy Briggs <[email protected]> Date: Tue Jun 28 12:06:58 2016 -0400audit: move calcs after alloc and check when logging set loginuid
Thanks, now queued up.
greg k-h
Greg Kroah-Hartman
maintainerPATCH 25/72 tty: provide tty_name() even without CONFIG_TTY
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
commit 188e3c5cd2b672620291e64a21f1598fe91e40b6 upstream.
The audit subsystem just started printing the name of the tty, but that causes a build failure when CONFIG_TTY is disabled:
kernel/built-in.o: In function `audit_log_task_info':
memremap.c:(.text+0x5e34c): undefined reference to tty_name' kernel/built-in.o: In function audit_set_loginuid':
memremap.c:(.text+0x63b34): undefined reference to `tty_name'
This adds tty_name() to the list of functions that are provided as trivial stubs in that configuration.
--- include/linux/tty.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
include/linux/tty.h +3 -1
@@ -372,6 +372,7 @@ extern void proc_clear_tty(struct task_sextern struct tty_struct *get_current_tty (void );/* tty_io.c */ extern int __init tty_init (void ); +extern const char *tty_name (const struct tty_struct *tty);#else static inline void console_init (void ) { }
@@ -392,6 +393,8 @@ static inline struct tty_struct *get_cur/* tty_io.c */ static inline int __init tty_init (void ) {return 0 ; } +static inline const char *tty_name (const struct tty_struct *tty) +{return "(none)" ; }#endif extern void tty_write_flush (struct tty_struct *);
@@ -420,7 +423,6 @@ static inline struct tty_struct *tty_kreextern int tty_paranoia_check (struct tty_struct *tty,struct inode *inode,const char *routine); -extern const char *tty_name (const struct tty_struct *tty);extern void tty_wait_until_sent (struct tty_struct *tty,long timeout);extern int __tty_check_change (struct tty_struct *tty,int sig);extern int tty_check_change (struct tty_struct *tty);
Greg Kroah-Hartman
maintainerPATCH 26/72 netfilter: ctnetlink: Make some parameters integer to avoid enum mismatch
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Kaehlcke <[email protected]>
commit a2b7cbdd2559aff06cebc28a7150f81c307a90d3 upstream.
Not all parameters passed to ctnetlink_parse_tuple() and ctnetlink_exp_dump_tuple() match the enum type in the signatures of these functions. Since this is intended change the argument type of to be an unsigned integer value.
--- net/netfilter/nf_conntrack_netlink.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
net/netfilter/nf_conntrack_netlink.c +3 -4
@@ -999,9 +999,8 @@ static const struct nla_policy tuple_nlastatic int ctnetlink_parse_tuple (const struct nlattr *const cda[], -struct nf_conntrack_tuple *tuple, -enum ctattr_type type,u_int8_t l3num, -struct nf_conntrack_zone *zone) +struct nf_conntrack_tuple *tuple,u32 type, +u_int8_t l3num,struct nf_conntrack_zone *zone) {struct nlattr *tb[CTA_TUPLE_MAX +1 ];int err;
@@ -2416,7 +2415,7 @@ static struct nfnl_ct_hook ctnetlink_glustatic inline int ctnetlink_exp_dump_tuple (struct sk_buff *skb,const struct nf_conntrack_tuple *tuple, -enum ctattr_expect type) +u32 type) {struct nlattr *nest_parms;
Greg Kroah-Hartman
maintainerPATCH 27/72 selinux: Remove redundant check for unknown labeling behavior
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Kaehlcke <[email protected]>
commit 270e8573145a26de924e2dc644596332d400445b upstream.
The check is already performed in ocontext_read() when the policy is loaded. Removing the array also fixes the following warning when building with clang:
security/selinux/hooks.c:338:20: error: variable 'labeling_behaviors'
is not needed and will not be emitted [-Werror,-Wunneeded-internal-declaration]
--- security/selinux/hooks.c | 16 ---------------- 1 file changed, 16 deletions(-)
security/selinux/hooks.c +0 -16
@@ -333,18 +333,6 @@ static void superblock_free_security(strkfree (sbsec); } -/* The file system's label must be initialized prior to use. */ - -static const char *labeling_behaviors[7 ] = { -"uses xattr" , -"uses transition SIDs" , -"uses task SIDs" , -"uses genfs_contexts" , -"not configured for labeling" , -"uses mountpoint labeling" , -"uses native labeling" , -}; -static int inode_doinit_with_dentry (struct inode *inode,struct dentry *opt_dentry);static inline int inode_doinit (struct inode *inode)
@@ -456,10 +444,6 @@ static int sb_finish_set_opts(struct sup } } -if (sbsec->behavior >ARRAY_SIZE (labeling_behaviors)) -printk (KERN_ERR "SELinux: initialized (dev %s, type %s), unknown behavior\n" , - sb->s_id, sb->s_type->name); - sbsec->flags |=SE_SBINITIALIZED ;if (selinux_is_sblabel_mnt (sb)) sbsec->flags |=SBLABEL_MNT ;
Greg Kroah-Hartman
maintainerPATCH 28/72 arm64: avoid overflow in VA_START and PAGE_OFFSET
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nick Desaulniers <[email protected]>
commit 82cd588052815eb4146f9f7c5347ca5e32c56360 upstream.
The bitmask used to define these values produces overflow, as seen by this compiler warning:
arch/arm64/kernel/head.S:47:8: warning:
integer overflow in preprocessor expression
#elif (PAGE_OFFSET & 0x1fffff) != 0
^~~~~~~~~~~
arch/arm64/include/asm/memory.h:52:46: note:
expanded from macro 'PAGE_OFFSET'
#define PAGE_OFFSET (UL(0xffffffffffffffff) << (VA_BITS -
1))
~~~~~~~~~~~~~~~~~~ ^
It would be preferrable to use GENMASK_ULL() instead, but it's not set up to be used from assembly (the UL() macro token pastes UL suffixes when not included in assembly sources).
--- arch/arm64/include/asm/memory.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
arch/arm64/include/asm/memory.h +4 -2
@@ -49,8 +49,10 @@* and PAGE_OFFSET - it must be within 128MB of the kernel text. */ #define VA_BITS (CONFIG_ARM64_VA_BITS) -#define VA_START (UL(0xffffffffffffffff) << VA_BITS) -#define PAGE_OFFSET (UL(0xffffffffffffffff) << (VA_BITS - 1)) +#define VA_START (UL(0xffffffffffffffff) - \ + (UL(1) << VA_BITS) + 1) +#define PAGE_OFFSET (UL(0xffffffffffffffff) - \ + (UL(1) << (VA_BITS - 1)) + 1)#define MODULES_END (PAGE_OFFSET)#define MODULES_VADDR (MODULES_END - SZ_64M)#define PCI_IO_END (MODULES_VADDR - SZ_2M)
Greg Kroah-Hartman
maintainerPATCH 29/72 xfrm_user: uncoditionally validate esn replay attribute struct
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Florian Westphal <[email protected]>
commit d97ca5d714a5334aecadadf696875da40f1fbf3e upstream.
The sanity test added in ecd7918745234 can be bypassed, validation only occurs if XFRM_STATE_ESN flag is set, but rest of code doesn't care and just checks if the attribute itself is present.
So always validate. Alternative is to reject if we have the attribute without the flag but that would change abi.
--- net/xfrm/xfrm_user.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-)
net/xfrm/xfrm_user.c +8 -13
@@ -121,22 +121,17 @@ static inline int verify_replay(struct xstruct nlattr *rt = attrs[XFRMA_REPLAY_ESN_VAL ];struct xfrm_replay_state_esn *rs; -if (p->flags &XFRM_STATE_ESN ) { -if (!rt) -return -EINVAL ; - - rs =nla_data (rt); +if (!rt) +return (p->flags &XFRM_STATE_ESN ) ? -EINVAL :0 ; -if (rs->bmp_len >XFRMA_REPLAY_ESN_MAX /sizeof (rs->bmp[0 ]) /8 ) -return -EINVAL ; + rs =nla_data (rt); -if (nla_len (rt) <xfrm_replay_state_esn_len (rs) && -nla_len (rt) !=sizeof (*rs)) -return -EINVAL ; - } +if (rs->bmp_len >XFRMA_REPLAY_ESN_MAX /sizeof (rs->bmp[0 ]) /8 ) +return -EINVAL ; -if (!rt) -return 0 ; +if (nla_len (rt) <xfrm_replay_state_esn_len (rs) && +nla_len (rt) !=sizeof (*rs)) +return -EINVAL ;/* As only ESP and AH support ESN feature. */ if ((p->id.proto !=IPPROTO_ESP ) && (p->id.proto !=IPPROTO_AH ))
Greg Kroah-Hartman
maintainerPATCH 30/72 RDMA/ucma: Check AF family prior resolving address
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Leon Romanovsky <[email protected]>
commit 2975d5de6428ff6d9317e9948f0968f7d42e5d74 upstream.
Garbage supplied by user will cause to UCMA module provide zero memory size for memcpy(), because it wasn't checked, it will produce unpredictable results in rdma_resolve_addr().
[ 42.873814] BUG: KASAN: null-ptr-deref in rdma_resolve_addr+0xc8/0xfb0 [ 42.874816] Write of size 28 at addr 00000000000000a0 by task resaddr/1044 [ 42.876765] [ 42.876960] CPU: 1 PID: 1044 Comm: resaddr Not tainted 4.16.0-rc1-00057-gaa56a5293d7e #34 [ 42.877840] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.11.0-0-g63451fca13-prebuilt.qemu-project.org 04/01/2014 [ 42.879691] Call Trace: [ 42.880236] dump_stack+0x5c/0x77 [ 42.880664] kasan_report+0x163/0x380 [ 42.881354] ? rdma_resolve_addr+0xc8/0xfb0 [ 42.881864] memcpy+0x34/0x50 [ 42.882692] rdma_resolve_addr+0xc8/0xfb0 [ 42.883366] ? deref_stack_reg+0x88/0xd0 [ 42.883856] ? vsnprintf+0x31a/0x770 [ 42.884686] ? rdma_bind_addr+0xc40/0xc40 [ 42.885327] ? num_to_str+0x130/0x130 [ 42.885773] ? deref_stack_reg+0x88/0xd0 [ 42.886217] ? __read_once_size_nocheck.constprop.6+0x10/0x10 [ 42.887698] ? unwind_get_return_address_ptr+0x50/0x50 [ 42.888302] ? replace_slot+0x147/0x170 [ 42.889176] ? delete_node+0x12c/0x340 [ 42.890223] ? __radix_tree_lookup+0xa9/0x160 [ 42.891196] ? ucma_resolve_ip+0xb7/0x110 [ 42.891917] ucma_resolve_ip+0xb7/0x110 [ 42.893003] ? ucma_resolve_addr+0x190/0x190 [ 42.893531] ? _copy_from_user+0x5e/0x90 [ 42.894204] ucma_write+0x174/0x1f0 [ 42.895162] ? ucma_resolve_route+0xf0/0xf0 [ 42.896309] ? dequeue_task_fair+0x67e/0xd90 [ 42.897192] ? put_prev_entity+0x7d/0x170 [ 42.897870] ? ring_buffer_record_is_on+0xd/0x20 [ 42.898439] ? tracing_record_taskinfo_skip+0x20/0x50 [ 42.899686] __vfs_write+0xc4/0x350 [ 42.900142] ? kernel_read+0xa0/0xa0 [ 42.900602] ? firmware_map_remove+0xdf/0xdf [ 42.901135] ? do_task_dead+0x5d/0x60 [ 42.901598] ? do_exit+0xcc6/0x1220 [ 42.902789] ? __fget+0xa8/0xf0 [ 42.903190] vfs_write+0xf7/0x280 [ 42.903600] SyS_write+0xa1/0x120 [ 42.904206] ? SyS_read+0x120/0x120 [ 42.905710] ? compat_start_thread+0x60/0x60 [ 42.906423] ? SyS_read+0x120/0x120 [ 42.908716] do_syscall_64+0xeb/0x250 [ 42.910760] entry_SYSCALL_64_after_hwframe+0x21/0x86 [ 42.912735] RIP: 0033:0x7f138b0afe99 [ 42.914734] RSP: 002b:00007f138b799e98 EFLAGS: 00000287 ORIG_RAX: 0000000000000001 [ 42.917134] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f138b0afe99 [ 42.919487] RDX: 000000000000002e RSI: 0000000020000c40 RDI: 0000000000000004 [ 42.922393] RBP: 00007f138b799ec0 R08: 00007f138b79a700 R09: 0000000000000000 [ 42.925266] R10: 00007f138b79a700 R11: 0000000000000287 R12: 00007f138b799fc0 [ 42.927570] R13: 0000000000000000 R14: 00007ffdbae757c0 R15: 00007f138b79a9c0 [ 42.930047] [ 42.932681] Disabling lock debugging due to kernel taint [ 42.934795] BUG: unable to handle kernel NULL pointer dereference at 00000000000000a0 [ 42.936939] IP: memcpy_erms+0x6/0x10 [ 42.938864] PGD 80000001bea92067 P4D 80000001bea92067 PUD 1bea96067 PMD 0 [ 42.941576] Oops: 0002 [#1] SMP KASAN PTI [ 42.943952] CPU: 1 PID: 1044 Comm: resaddr Tainted: G B 4.16.0-rc1-00057-gaa56a5293d7e #34 [ 42.946964] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.11.0-0-g63451fca13-prebuilt.qemu-project.org 04/01/2014 [ 42.952336] RIP: 0010:memcpy_erms+0x6/0x10 [ 42.954707] RSP: 0018:ffff8801c8b479c8 EFLAGS: 00010286 [ 42.957227] RAX: 00000000000000a0 RBX: ffff8801c8b47ba0 RCX: 000000000000001c [ 42.960543] RDX: 000000000000001c RSI: ffff8801c8b47bbc RDI: 00000000000000a0 [ 42.963867] RBP: ffff8801c8b47b60 R08: 0000000000000000 R09: ffffed0039168ed1 [ 42.967303] R10: 0000000000000001 R11: ffffed0039168ed0 R12: ffff8801c8b47bbc [ 42.970685] R13: 00000000000000a0 R14: 1ffff10039168f4a R15: 0000000000000000 [ 42.973631] FS: 00007f138b79a700(0000) GS:ffff8801e5d00000(0000) knlGS:0000000000000000 [ 42.976831] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 42.979239] CR2: 00000000000000a0 CR3: 00000001be908002 CR4: 00000000003606a0 [ 42.982060] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 42.984877] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 42.988033] Call Trace: [ 42.990487] rdma_resolve_addr+0xc8/0xfb0 [ 42.993202] ? deref_stack_reg+0x88/0xd0 [ 42.996055] ? vsnprintf+0x31a/0x770 [ 42.998707] ? rdma_bind_addr+0xc40/0xc40 [ 43.000985] ? num_to_str+0x130/0x130 [ 43.003410] ? deref_stack_reg+0x88/0xd0 [ 43.006302] ? __read_once_size_nocheck.constprop.6+0x10/0x10 [ 43.008780] ? unwind_get_return_address_ptr+0x50/0x50 [ 43.011178] ? replace_slot+0x147/0x170 [ 43.013517] ? delete_node+0x12c/0x340 [ 43.016019] ? __radix_tree_lookup+0xa9/0x160 [ 43.018755] ? ucma_resolve_ip+0xb7/0x110 [ 43.021270] ucma_resolve_ip+0xb7/0x110 [ 43.023968] ? ucma_resolve_addr+0x190/0x190 [ 43.026312] ? _copy_from_user+0x5e/0x90 [ 43.029384] ucma_write+0x174/0x1f0 [ 43.031861] ? ucma_resolve_route+0xf0/0xf0 [ 43.034782] ? dequeue_task_fair+0x67e/0xd90 [ 43.037483] ? put_prev_entity+0x7d/0x170 [ 43.040215] ? ring_buffer_record_is_on+0xd/0x20 [ 43.042990] ? tracing_record_taskinfo_skip+0x20/0x50 [ 43.045595] __vfs_write+0xc4/0x350 [ 43.048624] ? kernel_read+0xa0/0xa0 [ 43.051604] ? firmware_map_remove+0xdf/0xdf [ 43.055379] ? do_task_dead+0x5d/0x60 [ 43.058000] ? do_exit+0xcc6/0x1220 [ 43.060783] ? __fget+0xa8/0xf0 [ 43.063133] vfs_write+0xf7/0x280 [ 43.065677] SyS_write+0xa1/0x120 [ 43.068647] ? SyS_read+0x120/0x120 [ 43.071179] ? compat_start_thread+0x60/0x60 [ 43.074025] ? SyS_read+0x120/0x120 [ 43.076705] do_syscall_64+0xeb/0x250 [ 43.079006] entry_SYSCALL_64_after_hwframe+0x21/0x86 [ 43.081606] RIP: 0033:0x7f138b0afe99 [ 43.083679] RSP: 002b:00007f138b799e98 EFLAGS: 00000287 ORIG_RAX: 0000000000000001 [ 43.086802] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f138b0afe99 [ 43.089989] RDX: 000000000000002e RSI: 0000000020000c40 RDI: 0000000000000004 [ 43.092866] RBP: 00007f138b799ec0 R08: 00007f138b79a700 R09: 0000000000000000 [ 43.096233] R10: 00007f138b79a700 R11: 0000000000000287 R12: 00007f138b799fc0 [ 43.098913] R13: 0000000000000000 R14: 00007ffdbae757c0 R15: 00007f138b79a9c0 [ 43.101809] Code: 90 90 90 90 90 eb 1e 0f 1f 00 48 89 f8 48 89 d1 48 c1 e9 03 83 e2 07 f3 48 a5 89 d1 f3 a4 c3 66 0f 1f 44 00 00 48 89 f8 48 89 d1 <f3> a4 c3 0f 1f 80 00 00 00 00 48 89 f8 48 83 fa 20 72 7e 40 38 [ 43.107950] RIP: memcpy_erms+0x6/0x10 RSP: ffff8801c8b479c8
--- drivers/infiniband/core/ucma.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
drivers/infiniband/core/ucma.c +7 -3
@@ -661,19 +661,23 @@ static ssize_t ucma_resolve_ip(struct uc int in_len, int out_len) {struct rdma_ucm_resolve_ip cmd; +struct sockaddr *src, *dst;struct ucma_context *ctx;int ret;if (copy_from_user (&cmd, inbuf,sizeof (cmd)))return -EFAULT ; + src = (struct sockaddr *) &cmd.src_addr; + dst = (struct sockaddr *) &cmd.dst_addr; +if (!rdma_addr_size (src) || !rdma_addr_size (dst)) +return -EINVAL ; + ctx =ucma_get_ctx (file, cmd.id);if (IS_ERR (ctx))return PTR_ERR (ctx); - ret =rdma_resolve_addr (ctx->cm_id, (struct sockaddr *) &cmd.src_addr, - (struct sockaddr *) &cmd.dst_addr, - cmd.timeout_ms); + ret =rdma_resolve_addr (ctx->cm_id, src, dst, cmd.timeout_ms);ucma_put_ctx (ctx);return ret; }
Greg Kroah-Hartman
maintainerPATCH 31/72 RDMA/ucma: Fix use-after-free access in ucma_close
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Leon Romanovsky <[email protected]>
commit ed65a4dc22083e73bac599ded6a262318cad7baf upstream.
The error in ucma_create_id() left ctx in the list of contexts belong to ucma file descriptor. The attempt to close this file descriptor causes to use-after-free accesses while iterating over such list.
--- drivers/infiniband/core/ucma.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/infiniband/core/ucma.c +3 -0
@@ -494,6 +494,9 @@ err1:mutex_lock (&mut);idr_remove (&ctx_idr, ctx->id);mutex_unlock (&mut); +mutex_lock (&file->mut); +list_del (&ctx->list); +mutex_unlock (&file->mut);kfree (ctx);return ret; }
Greg Kroah-Hartman
maintainerPATCH 32/72 RDMA/ucma: Ensure that CM_ID exists prior to access it
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Leon Romanovsky <[email protected]>
commit e8980d67d6017c8eee8f9c35f782c4bd68e004c9 upstream.
Prior to access UCMA commands, the context should be initialized and connected to CM_ID with ucma_create_id(). In case user skips this step, he can provide non-valid ctx without CM_ID and cause to multiple NULL dereferences.
Also there are situations where the create_id can be raced with other user access, ensure that the context is only shared to other threads once it is fully initialized to avoid the races.
[ 109.088108] BUG: unable to handle kernel NULL pointer dereference at 0000000000000020 [ 109.090315] IP: ucma_connect+0x138/0x1d0 [ 109.092595] PGD 80000001dc02d067 P4D 80000001dc02d067 PUD 1da9ef067 PMD 0 [ 109.095384] Oops: 0000 [#1] SMP KASAN PTI [ 109.097834] CPU: 0 PID: 663 Comm: uclose Tainted: G B 4.16.0-rc1-00062-g2975d5de6428 #45 [ 109.100816] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.11.0-0-g63451fca13-prebuilt.qemu-project.org 04/01/2014 [ 109.105943] RIP: 0010:ucma_connect+0x138/0x1d0 [ 109.108850] RSP: 0018:ffff8801c8567a80 EFLAGS: 00010246 [ 109.111484] RAX: 0000000000000000 RBX: 1ffff100390acf50 RCX: ffffffff9d7812e2 [ 109.114496] RDX: 1ffffffff3f507a5 RSI: 0000000000000297 RDI: 0000000000000297 [ 109.117490] RBP: ffff8801daa15600 R08: 0000000000000000 R09: ffffed00390aceeb [ 109.120429] R10: 0000000000000001 R11: ffffed00390aceea R12: 0000000000000000 [ 109.123318] R13: 0000000000000120 R14: ffff8801de6459c0 R15: 0000000000000118 [ 109.126221] FS: 00007fabb68d6700(0000) GS:ffff8801e5c00000(0000) knlGS:0000000000000000 [ 109.129468] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 109.132523] CR2: 0000000000000020 CR3: 00000001d45d8003 CR4: 00000000003606b0 [ 109.135573] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 109.138716] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 109.142057] Call Trace: [ 109.144160] ? ucma_listen+0x110/0x110 [ 109.146386] ? wake_up_q+0x59/0x90 [ 109.148853] ? futex_wake+0x10b/0x2a0 [ 109.151297] ? save_stack+0x89/0xb0 [ 109.153489] ? _copy_from_user+0x5e/0x90 [ 109.155500] ucma_write+0x174/0x1f0 [ 109.157933] ? ucma_resolve_route+0xf0/0xf0 [ 109.160389] ? __mod_node_page_state+0x1d/0x80 [ 109.162706] __vfs_write+0xc4/0x350 [ 109.164911] ? kernel_read+0xa0/0xa0 [ 109.167121] ? path_openat+0x1b10/0x1b10 [ 109.169355] ? fsnotify+0x899/0x8f0 [ 109.171567] ? fsnotify_unmount_inodes+0x170/0x170 [ 109.174145] ? __fget+0xa8/0xf0 [ 109.177110] vfs_write+0xf7/0x280 [ 109.179532] SyS_write+0xa1/0x120 [ 109.181885] ? SyS_read+0x120/0x120 [ 109.184482] ? compat_start_thread+0x60/0x60 [ 109.187124] ? SyS_read+0x120/0x120 [ 109.189548] do_syscall_64+0xeb/0x250 [ 109.192178] entry_SYSCALL_64_after_hwframe+0x21/0x86 [ 109.194725] RIP: 0033:0x7fabb61ebe99 [ 109.197040] RSP: 002b:00007fabb68d5e98 EFLAGS: 00000202 ORIG_RAX: 0000000000000001 [ 109.200294] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007fabb61ebe99 [ 109.203399] RDX: 0000000000000120 RSI: 00000000200001c0 RDI: 0000000000000004 [ 109.206548] RBP: 00007fabb68d5ec0 R08: 0000000000000000 R09: 0000000000000000 [ 109.209902] R10: 0000000000000000 R11: 0000000000000202 R12: 00007fabb68d5fc0 [ 109.213327] R13: 0000000000000000 R14: 00007fff40ab2430 R15: 00007fabb68d69c0 [ 109.216613] Code: 88 44 24 2c 0f b6 84 24 6e 01 00 00 88 44 24 2d 0f b6 84 24 69 01 00 00 88 44 24 2e 8b 44 24 60 89 44 24 30 e8 da f6 06 ff 31 c0 <66> 41 83 7c 24 20 1b 75 04 8b 44 24 64 48 8d 74 24 20 4c 89 e7 [ 109.223602] RIP: ucma_connect+0x138/0x1d0 RSP: ffff8801c8567a80 [ 109.226256] CR2: 0000000000000020
--- drivers/infiniband/core/ucma.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)
drivers/infiniband/core/ucma.c +9 -6
@@ -131,7 +131,7 @@ static inline struct ucma_context *_ucma ctx =idr_find (&ctx_idr, id);if (!ctx) ctx =ERR_PTR (-ENOENT ); -else if (ctx->file != file) +else if (ctx->file != file || !ctx->cm_id) ctx =ERR_PTR (-EINVAL );return ctx; }
@@ -453,6 +453,7 @@ static ssize_t ucma_create_id(struct ucmstruct rdma_ucm_create_id cmd;struct rdma_ucm_create_id_resp resp;struct ucma_context *ctx; +struct rdma_cm_id *cm_id;enum ib_qp_type qp_type;int ret;
@@ -473,10 +474,10 @@ static ssize_t ucma_create_id(struct ucmreturn -ENOMEM ; ctx->uid = cmd.uid; - ctx->cm_id =rdma_create_id (current->nsproxy->net_ns, - ucma_event_handler, ctx, cmd.ps, qp_type); -if (IS_ERR (ctx->cm_id)) { - ret =PTR_ERR (ctx->cm_id); + cm_id =rdma_create_id (current->nsproxy->net_ns, + ucma_event_handler, ctx, cmd.ps, qp_type); +if (IS_ERR (cm_id)) { + ret =PTR_ERR (cm_id); goto err1; }
@@ -486,10 +487,12 @@ static ssize_t ucma_create_id(struct ucm ret = -EFAULT ; goto err2; } + + ctx->cm_id = cm_id;return 0 ; err2: -rdma_destroy_id (ctx->cm_id); +rdma_destroy_id (cm_id); err1:mutex_lock (&mut);idr_remove (&ctx_idr, ctx->id);
Greg Kroah-Hartman
maintainerPATCH 33/72 RDMA/ucma: Check that device is connected prior to access it
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Leon Romanovsky <[email protected]>
commit 4b658d1bbc16605330694bb3ef2570c465ef383d upstream.
Add missing check that device is connected prior to access it.
[ 55.358652] BUG: KASAN: null-ptr-deref in rdma_init_qp_attr+0x4a/0x2c0 [ 55.359389] Read of size 8 at addr 00000000000000b0 by task qp/618 [ 55.360255] [ 55.360432] CPU: 1 PID: 618 Comm: qp Not tainted 4.16.0-rc1-00071-gcaf61b1b8b88 #91 [ 55.361693] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.11.0-0-g63451fca13-prebuilt.qemu-project.org 04/01/2014 [ 55.363264] Call Trace: [ 55.363833] dump_stack+0x5c/0x77 [ 55.364215] kasan_report+0x163/0x380 [ 55.364610] ? rdma_init_qp_attr+0x4a/0x2c0 [ 55.365238] rdma_init_qp_attr+0x4a/0x2c0 [ 55.366410] ucma_init_qp_attr+0x111/0x200 [ 55.366846] ? ucma_notify+0xf0/0xf0 [ 55.367405] ? _get_random_bytes+0xea/0x1b0 [ 55.367846] ? urandom_read+0x2f0/0x2f0 [ 55.368436] ? kmem_cache_alloc_trace+0xd2/0x1e0 [ 55.369104] ? refcount_inc_not_zero+0x9/0x60 [ 55.369583] ? refcount_inc+0x5/0x30 [ 55.370155] ? rdma_create_id+0x215/0x240 [ 55.370937] ? _copy_to_user+0x4f/0x60 [ 55.371620] ? mem_cgroup_commit_charge+0x1f5/0x290 [ 55.372127] ? _copy_from_user+0x5e/0x90 [ 55.372720] ucma_write+0x174/0x1f0 [ 55.373090] ? ucma_close_id+0x40/0x40 [ 55.373805] ? __lru_cache_add+0xa8/0xd0 [ 55.374403] __vfs_write+0xc4/0x350 [ 55.374774] ? kernel_read+0xa0/0xa0 [ 55.375173] ? fsnotify+0x899/0x8f0 [ 55.375544] ? fsnotify_unmount_inodes+0x170/0x170 [ 55.376689] ? __fsnotify_update_child_dentry_flags+0x30/0x30 [ 55.377522] ? handle_mm_fault+0x174/0x320 [ 55.378169] vfs_write+0xf7/0x280 [ 55.378864] SyS_write+0xa1/0x120 [ 55.379270] ? SyS_read+0x120/0x120 [ 55.379643] ? mm_fault_error+0x180/0x180 [ 55.380071] ? task_work_run+0x7d/0xd0 [ 55.380910] ? __task_pid_nr_ns+0x120/0x140 [ 55.381366] ? SyS_read+0x120/0x120 [ 55.381739] do_syscall_64+0xeb/0x250 [ 55.382143] entry_SYSCALL_64_after_hwframe+0x21/0x86 [ 55.382841] RIP: 0033:0x7fc2ef803e99 [ 55.383227] RSP: 002b:00007fffcc5f3be8 EFLAGS: 00000217 ORIG_RAX: 0000000000000001 [ 55.384173] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007fc2ef803e99 [ 55.386145] RDX: 0000000000000057 RSI: 0000000020000080 RDI: 0000000000000003 [ 55.388418] RBP: 00007fffcc5f3c00 R08: 0000000000000000 R09: 0000000000000000 [ 55.390542] R10: 0000000000000000 R11: 0000000000000217 R12: 0000000000400480 [ 55.392916] R13: 00007fffcc5f3cf0 R14: 0000000000000000 R15: 0000000000000000 [ 55.521088] Code: e5 4d 1e ff 48 89 df 44 0f b6 b3 b8 01 00 00 e8 65 50 1e ff 4c 8b 2b 49 8d bd b0 00 00 00 e8 56 50 1e ff 41 0f b6 c6 48 c1 e0 04 <49> 03 85 b0 00 00 00 48 8d 78 08 48 89 04 24 e8 3a 4f 1e ff 48 [ 55.525980] RIP: rdma_init_qp_attr+0x52/0x2c0 RSP: ffff8801e2c2f9d8 [ 55.532648] CR2: 00000000000000b0 [ 55.534396] ---[ end trace 70cee64090251c0b ]---
--- drivers/infiniband/core/ucma.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/infiniband/core/ucma.c +5 -0
@@ -1155,6 +1155,11 @@ static ssize_t ucma_init_qp_attr(structif (IS_ERR (ctx))return PTR_ERR (ctx); +if (!ctx->cm_id->device) { + ret = -EINVAL ; + goto out; + } + resp.qp_attr_mask =0 ;memset (&qp_attr,0 ,sizeof qp_attr); qp_attr.qp_state = cmd.qp_state;
Greg Kroah-Hartman
maintainerPATCH 34/72 RDMA/ucma: Check that device exists prior to accessing it
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Leon Romanovsky <[email protected]>
commit c8d3bcbfc5eab3f01cf373d039af725f3b488813 upstream.
Ensure that device exists prior to accessing its properties.
--- drivers/infiniband/core/ucma.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/infiniband/core/ucma.c +4 -2
@@ -1316,7 +1316,7 @@ static ssize_t ucma_notify(struct ucma_f {struct rdma_ucm_notify cmd;struct ucma_context *ctx; -int ret; +int ret = -EINVAL ;if (copy_from_user (&cmd, inbuf,sizeof (cmd)))return -EFAULT ;
@@ -1325,7 +1325,9 @@ static ssize_t ucma_notify(struct ucma_fif (IS_ERR (ctx))return PTR_ERR (ctx); - ret =rdma_notify (ctx->cm_id, (enum ib_event_type ) cmd.event); +if (ctx->cm_id->device) + ret =rdma_notify (ctx->cm_id, (enum ib_event_type )cmd.event); +ucma_put_ctx (ctx);return ret; }
Greg Kroah-Hartman
maintainerPATCH 35/72 RDMA/ucma: Dont allow join attempts for unsupported AF family
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Leon Romanovsky <[email protected]>
commit 0c81ffc60d5280991773d17e84bda605387148b1 upstream.
Users can provide garbage while calling to ucma_join_ip_multicast(), it will indirectly cause to rdma_addr_size() return 0, making the call to ucma_process_join(), which had the right checks, but it is better to check the input as early as possible.
The following crash from syzkaller revealed it.
kernel BUG at lib/string.c:1052!
invalid opcode: 0000 [#1] SMP KASAN Dumping ftrace buffer:
(ftrace buffer empty)
Modules linked in: CPU: 0 PID: 4113 Comm: syz-executor0 Not tainted 4.16.0-rc5+ #261 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 RIP: 0010:fortify_panic+0x13/0x20 lib/string.c:1051 RSP: 0018:ffff8801ca81f8f0 EFLAGS: 00010286 RAX: 0000000000000022 RBX: 1ffff10039503f23 RCX: 0000000000000000 RDX: 0000000000000022 RSI: 1ffff10039503ed3 RDI: ffffed0039503f12 RBP: ffff8801ca81f8f0 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000006 R11: 0000000000000000 R12: ffff8801ca81f998 R13: ffff8801ca81f938 R14: ffff8801ca81fa58 R15: 000000000000fa00 FS: 0000000000000000(0000) GS:ffff8801db200000(0063) knlGS:000000000a12a900 CS: 0010 DS: 002b ES: 002b CR0: 0000000080050033 CR2: 0000000008138024 CR3: 00000001cbb58004 CR4: 00000000001606f0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: memcpy include/linux/string.h:344 [inline] ucma_join_ip_multicast+0x36b/0x3b0 drivers/infiniband/core/ucma.c:1421 ucma_write+0x2d6/0x3d0 drivers/infiniband/core/ucma.c:1633 __vfs_write+0xef/0x970 fs/read_write.c:480 vfs_write+0x189/0x510 fs/read_write.c:544 SYSC_write fs/read_write.c:589 [inline] SyS_write+0xef/0x220 fs/read_write.c:581 do_syscall_32_irqs_on arch/x86/entry/common.c:330 [inline] do_fast_syscall_32+0x3ec/0xf9f arch/x86/entry/common.c:392 entry_SYSENTER_compat+0x70/0x7f arch/x86/entry/entry_64_compat.S:139 RIP: 0023:0xf7f9ec99 RSP: 002b:00000000ff8172cc EFLAGS: 00000282 ORIG_RAX: 0000000000000004 RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 0000000020000100 RDX: 0000000000000063 RSI: 0000000000000000 RDI: 0000000000000000 RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000 R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000 Code: 08 5b 41 5c 41 5d 41 5e 41 5f 5d c3 0f 0b 48 89 df e8 42 2c e3 fb eb de 55 48 89 fe 48 c7 c7 80 75 98 86 48 89 e5 e8 85 95 94 fb <0f> 0b 90 90 90 90 90 90 90 90 90 90 90 55 48 89 e5 41 57 41 56 RIP: fortify_panic+0x13/0x20 lib/string.c:1051 RSP: ffff8801ca81f8f0
--- drivers/infiniband/core/ucma.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/infiniband/core/ucma.c +7 -1
@@ -1345,7 +1345,7 @@ static ssize_t ucma_process_join(structreturn -ENOSPC ; addr = (struct sockaddr *) &cmd->addr; -if (cmd->reserved || !cmd->addr_size || (cmd->addr_size !=rdma_addr_size (addr))) +if (cmd->reserved || (cmd->addr_size !=rdma_addr_size (addr)))return -EINVAL ; ctx =ucma_get_ctx (file, cmd->id);
@@ -1405,6 +1405,9 @@ static ssize_t ucma_join_ip_multicast(st join_cmd.uid = cmd.uid; join_cmd.id = cmd.id; join_cmd.addr_size =rdma_addr_size ((struct sockaddr *) &cmd.addr); +if (!join_cmd.addr_size) +return -EINVAL ; + join_cmd.reserved =0 ;memcpy (&join_cmd.addr, &cmd.addr, join_cmd.addr_size);
@@ -1420,6 +1423,9 @@ static ssize_t ucma_join_multicast(strucif (copy_from_user (&cmd, inbuf,sizeof (cmd)))return -EFAULT ; +if (!rdma_addr_size ((struct sockaddr *)&cmd.addr)) +return -EINVAL ; +return ucma_process_join (file, &cmd, out_len); }
Greg Kroah-Hartman
maintainerPATCH 36/72 RDMA/ucma: Introduce safer rdma_addr_size() variants
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Roland Dreier <[email protected]>
commit 84652aefb347297aa08e91e283adf7b18f77c2d5 upstream.
There are several places in the ucma ABI where userspace can pass in a sockaddr but set the address family to AF_IB. When that happens, rdma_addr_size() will return a size bigger than sizeof struct sockaddr_in6, and the ucma kernel code might end up copying past the end of a buffer not sized for a struct sockaddr_ib.
Fix this by introducing new variants
int rdma_addr_size_in6(struct sockaddr_in6 *addr);
int rdma_addr_size_kss(struct __kernel_sockaddr_storage *addr);that are type-safe for the types used in the ucma ABI and return 0 if the size computed is bigger than the size of the type passed in. We can use these new variants to check what size userspace has passed in before copying any addresses.
--- drivers/infiniband/core/addr.c | 16 ++++++++++++++++ drivers/infiniband/core/ucma.c | 34 +++++++++++++++++----------------- include/rdma/ib_addr.h | 2 ++ 3 files changed, 35 insertions(+), 17 deletions(-)
drivers/infiniband/core/addr.c +16 -0
@@ -86,6 +86,22 @@ int rdma_addr_size(struct sockaddr *addr }EXPORT_SYMBOL (rdma_addr_size); +int rdma_addr_size_in6 (struct sockaddr_in6 *addr) +{ +int ret =rdma_addr_size ((struct sockaddr *) addr); + +return ret <=sizeof (*addr) ? ret :0 ; +} +EXPORT_SYMBOL (rdma_addr_size_in6); + +int rdma_addr_size_kss (struct __kernel_sockaddr_storage *addr) +{ +int ret =rdma_addr_size ((struct sockaddr *) addr); + +return ret <=sizeof (*addr) ? ret :0 ; +} +EXPORT_SYMBOL (rdma_addr_size_kss); +static struct rdma_addr_client self;void rdma_addr_register_client (struct rdma_addr_client *client)
drivers/infiniband/core/ucma.c +17 -17
@@ -629,6 +629,9 @@ static ssize_t ucma_bind_ip(struct ucma_if (copy_from_user (&cmd, inbuf,sizeof (cmd)))return -EFAULT ; +if (!rdma_addr_size_in6 (&cmd.addr)) +return -EINVAL ; + ctx =ucma_get_ctx (file, cmd.id);if (IS_ERR (ctx))return PTR_ERR (ctx);
@@ -642,22 +645,21 @@ static ssize_t ucma_bind(struct ucma_fil int in_len, int out_len) {struct rdma_ucm_bind cmd; -struct sockaddr *addr;struct ucma_context *ctx;int ret;if (copy_from_user (&cmd, inbuf,sizeof (cmd)))return -EFAULT ; - addr = (struct sockaddr *) &cmd.addr; -if (cmd.reserved || !cmd.addr_size || (cmd.addr_size !=rdma_addr_size (addr))) +if (cmd.reserved || !cmd.addr_size || + cmd.addr_size !=rdma_addr_size_kss (&cmd.addr))return -EINVAL ; ctx =ucma_get_ctx (file, cmd.id);if (IS_ERR (ctx))return PTR_ERR (ctx); - ret =rdma_bind_addr (ctx->cm_id, addr); + ret =rdma_bind_addr (ctx->cm_id, (struct sockaddr *) &cmd.addr);ucma_put_ctx (ctx);return ret; }
@@ -667,23 +669,22 @@ static ssize_t ucma_resolve_ip(struct uc int in_len, int out_len) {struct rdma_ucm_resolve_ip cmd; -struct sockaddr *src, *dst;struct ucma_context *ctx;int ret;if (copy_from_user (&cmd, inbuf,sizeof (cmd)))return -EFAULT ; - src = (struct sockaddr *) &cmd.src_addr; - dst = (struct sockaddr *) &cmd.dst_addr; -if (!rdma_addr_size (src) || !rdma_addr_size (dst)) +if (!rdma_addr_size_in6 (&cmd.src_addr) || + !rdma_addr_size_in6 (&cmd.dst_addr))return -EINVAL ; ctx =ucma_get_ctx (file, cmd.id);if (IS_ERR (ctx))return PTR_ERR (ctx); - ret =rdma_resolve_addr (ctx->cm_id, src, dst, cmd.timeout_ms); + ret =rdma_resolve_addr (ctx->cm_id, (struct sockaddr *) &cmd.src_addr, + (struct sockaddr *) &cmd.dst_addr, cmd.timeout_ms);ucma_put_ctx (ctx);return ret; }
@@ -693,24 +694,23 @@ static ssize_t ucma_resolve_addr(struct int in_len, int out_len) {struct rdma_ucm_resolve_addr cmd; -struct sockaddr *src, *dst;struct ucma_context *ctx;int ret;if (copy_from_user (&cmd, inbuf,sizeof (cmd)))return -EFAULT ; - src = (struct sockaddr *) &cmd.src_addr; - dst = (struct sockaddr *) &cmd.dst_addr; -if (cmd.reserved || (cmd.src_size && (cmd.src_size !=rdma_addr_size (src))) || - !cmd.dst_size || (cmd.dst_size !=rdma_addr_size (dst))) +if (cmd.reserved || + (cmd.src_size && (cmd.src_size !=rdma_addr_size_kss (&cmd.src_addr))) || + !cmd.dst_size || (cmd.dst_size !=rdma_addr_size_kss (&cmd.dst_addr)))return -EINVAL ; ctx =ucma_get_ctx (file, cmd.id);if (IS_ERR (ctx))return PTR_ERR (ctx); - ret =rdma_resolve_addr (ctx->cm_id, src, dst, cmd.timeout_ms); + ret =rdma_resolve_addr (ctx->cm_id, (struct sockaddr *) &cmd.src_addr, + (struct sockaddr *) &cmd.dst_addr, cmd.timeout_ms);ucma_put_ctx (ctx);return ret; }
@@ -1404,7 +1404,7 @@ static ssize_t ucma_join_ip_multicast(st join_cmd.response = cmd.response; join_cmd.uid = cmd.uid; join_cmd.id = cmd.id; - join_cmd.addr_size =rdma_addr_size ((struct sockaddr *) &cmd.addr); + join_cmd.addr_size =rdma_addr_size_in6 (&cmd.addr);if (!join_cmd.addr_size)return -EINVAL ;
@@ -1423,7 +1423,7 @@ static ssize_t ucma_join_multicast(strucif (copy_from_user (&cmd, inbuf,sizeof (cmd)))return -EFAULT ; -if (!rdma_addr_size ((struct sockaddr *)&cmd.addr)) +if (!rdma_addr_size_kss (&cmd.addr))return -EINVAL ;return ucma_process_join (file, &cmd, out_len);
include/rdma/ib_addr.h +2 -0
@@ -123,6 +123,8 @@ int rdma_copy_addr(struct rdma_dev_addr const unsigned char *dst_dev_addr);int rdma_addr_size (struct sockaddr *addr); +int rdma_addr_size_in6 (struct sockaddr_in6 *addr); +int rdma_addr_size_kss (struct __kernel_sockaddr_storage *addr);int rdma_addr_find_smac_by_sgid (union ib_gid *sgid,u8 *smac,u16 *vlan_id); int rdma_addr_find_dmac_by_grh(const union ib_gid *sgid, const union ib_gid *dgid,
Greg Kroah-Hartman
maintainerPATCH 37/72 net: xfrm: use preempt-safe this_cpu_read() in ipcomp_alloc_tfms()
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Hackmann <[email protected]>
commit 0dcd7876029b58770f769cbb7b484e88e4a305e5 upstream.
f7c83bcbfaf5 ("net: xfrm: use __this_cpu_read per-cpu helper") added a __this_cpu_read() call inside ipcomp_alloc_tfms().
At the time, __this_cpu_read() required the caller to either not care about races or to handle preemption/interrupt issues. 3.15 tightened the rules around some per-cpu operations, and now __this_cpu_read() should never be used in a preemptible context. On 3.15 and later, we need to use this_cpu_read() instead.
syzkaller reported this leading to the following kernel BUG while fuzzing sendmsg:
BUG: using __this_cpu_read() in preemptible [00000000] code: repro/3101 caller is ipcomp_init_state+0x185/0x990 CPU: 3 PID: 3101 Comm: repro Not tainted 4.16.0-rc4-00123-g86f84779d8e9 #154 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1 04/01/2014 Call Trace: dump_stack+0xb9/0x115 check_preemption_disabled+0x1cb/0x1f0 ipcomp_init_state+0x185/0x990 ? __xfrm_init_state+0x876/0xc20 ? lock_downgrade+0x5e0/0x5e0 ipcomp4_init_state+0xaa/0x7c0 __xfrm_init_state+0x3eb/0xc20 xfrm_init_state+0x19/0x60 pfkey_add+0x20df/0x36f0 ? pfkey_broadcast+0x3dd/0x600 ? pfkey_sock_destruct+0x340/0x340 ? pfkey_seq_stop+0x80/0x80 ? __skb_clone+0x236/0x750 ? kmem_cache_alloc+0x1f6/0x260 ? pfkey_sock_destruct+0x340/0x340 ? pfkey_process+0x62a/0x6f0 pfkey_process+0x62a/0x6f0 ? pfkey_send_new_mapping+0x11c0/0x11c0 ? mutex_lock_io_nested+0x1390/0x1390 pfkey_sendmsg+0x383/0x750 ? dump_sp+0x430/0x430 sock_sendmsg+0xc0/0x100 ___sys_sendmsg+0x6c8/0x8b0 ? copy_msghdr_from_user+0x3b0/0x3b0 ? pagevec_lru_move_fn+0x144/0x1f0 ? find_held_lock+0x32/0x1c0 ? do_huge_pmd_anonymous_page+0xc43/0x11e0 ? lock_downgrade+0x5e0/0x5e0 ? get_kernel_page+0xb0/0xb0 ? _raw_spin_unlock+0x29/0x40 ? do_huge_pmd_anonymous_page+0x400/0x11e0 ? __handle_mm_fault+0x553/0x2460 ? __fget_light+0x163/0x1f0 ? __sys_sendmsg+0xc7/0x170 __sys_sendmsg+0xc7/0x170 ? SyS_shutdown+0x1a0/0x1a0 ? __do_page_fault+0x5a0/0xca0 ? lock_downgrade+0x5e0/0x5e0 SyS_sendmsg+0x27/0x40 ? __sys_sendmsg+0x170/0x170 do_syscall_64+0x19f/0x640 entry_SYSCALL_64_after_hwframe+0x42/0xb7 RIP: 0033:0x7f0ee73dfb79 RSP: 002b:00007ffe14fc15a8 EFLAGS: 00000207 ORIG_RAX: 000000000000002e RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f0ee73dfb79 RDX: 0000000000000000 RSI: 00000000208befc8 RDI: 0000000000000004 RBP: 00007ffe14fc15b0 R08: 00007ffe14fc15c0 R09: 00007ffe14fc15c0 R10: 0000000000000000 R11: 0000000000000207 R12: 0000000000400440 R13: 00007ffe14fc16b0 R14: 0000000000000000 R15: 0000000000000000
--- net/xfrm/xfrm_ipcomp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/xfrm/xfrm_ipcomp.c +1 -1
@@ -283,7 +283,7 @@ static struct crypto_comp * __percpu *ipstruct crypto_comp *tfm;/* This can be any valid CPU ID so we don't need locking. */ - tfm =__this_cpu_read (*pos->tfms); + tfm =this_cpu_read (*pos->tfms);if (!strcmp (crypto_comp_name (tfm), alg_name)) { pos->users++;
Greg Kroah-Hartman
maintainerPATCH 38/72 xfrm: Refuse to insert 32 bit userspace socket policies on 64 bit systems
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steffen Klassert <[email protected]>
commit 19d7df69fdb2636856dc8919de72fc1bf8f79598 upstream.
We don't have a compat layer for xfrm, so userspace and kernel structures have different sizes in this case. This results in a broken configuration, so refuse to configure socket policies when trying to insert from 32 bit userspace as we do it already with policies inserted via netlink.
--- net/xfrm/xfrm_state.c | 5 +++++ 1 file changed, 5 insertions(+)
net/xfrm/xfrm_state.c +5 -0
@@ -1845,6 +1845,11 @@ int xfrm_user_policy(struct sock *sk, instruct xfrm_mgr *km;struct xfrm_policy *pol =NULL ; +#ifdef CONFIG_COMPAT +if (is_compat_task ()) +return -EOPNOTSUPP ; +#endif +if (!optval && !optlen) {xfrm_sk_policy_insert (sk,XFRM_POLICY_IN ,NULL );xfrm_sk_policy_insert (sk,XFRM_POLICY_OUT ,NULL );
Greg Kroah-Hartman
maintainerPATCH 39/72 netfilter: bridge: ebt_among: add more missing match size checks
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Florian Westphal <[email protected]>
commit c8d70a700a5b486bfa8e5a7d33d805389f6e59f9 upstream.
ebt_among is special, it has a dynamic match size and is exempt from the central size checks.
commit c4585a2823edf ("bridge: ebt_among: add missing match size checks") added validation for pool size, but missed fact that the macros ebt_among_wh_src/dst can already return out-of-bound result because they do not check value of wh_src/dst_ofs (an offset) vs. the size of the match that userspace gave to us.
v2:
check that offset has correct alignment.
Paolo Abeni points out that we should also check that src/dst wormhash arrays do not overlap, and src + length lines up with start of dst (or vice versa).
v3: compact wormhash_sizes_valid() part
NB: Fixes tag is intentionally wrong, this bug exists from day one when match was added for 2.6 kernel. Tag is there so stable maintainers will notice this one too.
Tested with same rules from the earlier patch.
--- net/bridge/netfilter/ebt_among.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+)
net/bridge/netfilter/ebt_among.c +34 -0
@@ -177,6 +177,28 @@ static bool poolsize_invalid(const strucreturn w && w->poolsize >= (INT_MAX /sizeof (struct ebt_mac_wormhash_tuple )); } +static bool wormhash_offset_invalid (int off,unsigned int len) +{ +if (off ==0 )/* not present */ +return false; + +if (off < (int )sizeof (struct ebt_among_info ) || + off % __alignof__(struct ebt_mac_wormhash )) +return true; + + off +=sizeof (struct ebt_mac_wormhash ); + +return off > len; +} + +static bool wormhash_sizes_valid (const struct ebt_mac_wormhash *wh,int a,int b) +{ +if (a ==0 ) + a =sizeof (struct ebt_among_info ); + +return ebt_mac_wormhash_size (wh) + a == b; +} +static int ebt_among_mt_check (const struct xt_mtchk_param *par) {const struct ebt_among_info *info = par->matchinfo;
@@ -189,6 +211,10 @@ static int ebt_among_mt_check(const struif (expected_length > em->match_size)return -EINVAL ; +if (wormhash_offset_invalid (info->wh_dst_ofs, em->match_size) || +wormhash_offset_invalid (info->wh_src_ofs, em->match_size)) +return -EINVAL ; + wh_dst =ebt_among_wh_dst (info);if (poolsize_invalid (wh_dst))return -EINVAL ;
@@ -201,6 +227,14 @@ static int ebt_among_mt_check(const struif (poolsize_invalid (wh_src))return -EINVAL ; +if (info->wh_src_ofs < info->wh_dst_ofs) { +if (!wormhash_sizes_valid (wh_src, info->wh_src_ofs, info->wh_dst_ofs)) +return -EINVAL ; + }else { +if (!wormhash_sizes_valid (wh_dst, info->wh_dst_ofs, info->wh_src_ofs)) +return -EINVAL ; + } + expected_length +=ebt_mac_wormhash_size (wh_src);if (em->match_size !=EBT_ALIGN (expected_length)) {
Greg Kroah-Hartman
maintainerPATCH 40/72 netfilter: x_tables: add and use xt_check_proc_name
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Florian Westphal <[email protected]>
commit b1d0a5d0cba4597c0394997b2d5fced3e3841b4e upstream.
recent and hashlimit both create /proc files, but only check that name is 0 terminated.
This can trigger WARN() from procfs when name is "" or "/". Add helper for this and then use it for both.
--- include/linux/netfilter/x_tables.h | 2 ++ net/netfilter/x_tables.c | 30 ++++++++++++++++++++++++++++++ net/netfilter/xt_hashlimit.c | 5 +++-- net/netfilter/xt_recent.c | 6 +++--- 4 files changed, 38 insertions(+), 5 deletions(-)
include/linux/netfilter/x_tables.h +2 -0
@@ -247,6 +247,8 @@ unsigned int *xt_alloc_entry_offsets(unsbool xt_find_jump_offset (const unsigned int *offsets,unsigned int target,unsigned int size); +int xt_check_proc_name (const char *name,unsigned int size); +int xt_check_match (struct xt_mtchk_param *,unsigned int size,u_int8_t proto,bool inv_proto); int xt_check_target(struct xt_tgchk_param *, unsigned int size, u_int8_t proto,
net/netfilter/x_tables.c +30 -0
@@ -366,6 +366,36 @@ textify_hooks(char *buf, size_t size, unreturn buf; } +/** +* xt_check_proc_name - check that name is suitable for /proc file creation +* +* @name: file name candidate +* @size: length of buffer +* +* some x_tables modules wish to create a file in /proc. +* This function makes sure that the name is suitable for this +* purpose, it checks that name is NUL terminated and isn't a 'special' +* name, like "..". +* +* returns negative number on error or 0 if name is useable. +*/ +int xt_check_proc_name (const char *name,unsigned int size) +{ +if (name[0 ] =='\0' ) +return -EINVAL ; + +if (strnlen (name, size) == size) +return -ENAMETOOLONG ; + +if (strcmp (name,"." ) ==0 || +strcmp (name,".." ) ==0 || +strchr (name,'/' )) +return -EINVAL ; + +return 0 ; +} +EXPORT_SYMBOL (xt_check_proc_name); +int xt_check_match (struct xt_mtchk_param *par,unsigned int size,u_int8_t proto,bool inv_proto) {
net/netfilter/xt_hashlimit.c +3 -2
@@ -668,8 +668,9 @@ static int hashlimit_mt_check(const struif (info->cfg.gc_interval ==0 || info->cfg.expire ==0 )return -EINVAL ; -if (info->name[sizeof (info->name)-1 ] !='\0' ) -return -EINVAL ; + ret =xt_check_proc_name (info->name,sizeof (info->name)); +if (ret) +return ret;if (par->family ==NFPROTO_IPV4 ) {if (info->cfg.srcmask >32 || info->cfg.dstmask >32 )return -EINVAL ;
net/netfilter/xt_recent.c +3 -3
@@ -364,9 +364,9 @@ static int recent_mt_check(const struct info->hit_count, XT_RECENT_MAX_NSTAMPS - 1);return -EINVAL ; } -if (info->name[0 ] =='\0' || -strnlen (info->name,XT_RECENT_NAME_LEN ) ==XT_RECENT_NAME_LEN ) -return -EINVAL ; + ret =xt_check_proc_name (info->name,sizeof (info->name)); +if (ret) +return ret;if (ip_pkt_list_tot && info->hit_count < ip_pkt_list_tot) nstamp_mask =roundup_pow_of_two (ip_pkt_list_tot) -1 ;
Greg Kroah-Hartman
maintainerPATCH 41/72 Bluetooth: Fix missing encryption refresh on Security Request
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Szymon Janc <[email protected]>
commit 64e759f58f128730b97a3c3a26d283c075ad7c86 upstream.
If Security Request is received on connection that is already encrypted with sufficient security master should perform encryption key refresh procedure instead of just ignoring Slave Security Request (Core Spec 5.0 Vol 3 Part H 2.4.6).
Quoted 1 line
ACL Data RX: Handle 3585 flags
0x02dlen 6
SMP: Security Request (0x0b) len 1
Authentication requirement: Bonding, No MITM, SC, No Keypresses (0x09)
< HCI Command: LE Start Encryption (0x08|0x0019) plen 28
Handle: 3585
Random number: 0x0000000000000000
Encrypted diversifier: 0x0000
Long term key: 44264272a5c426a9e868f034cf0e69f3Quoted 1 line
HCI Event: Command Status (
0x0f) plen 4
LE Start Encryption (0x08|0x0019) ncmd 1
Status: Success (0x00)Quoted 1 line
HCI Event: Encryption Key Refresh Complete (
0x30) plen 3
Status: Success (0x00)
Handle: 3585--- net/bluetooth/smp.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
net/bluetooth/smp.c +7 -1
@@ -2251,8 +2251,14 @@ static u8 smp_cmd_security_req(struct l2else sec_level =authreq_to_seclevel (auth); -if (smp_sufficient_security (hcon, sec_level,SMP_USE_LTK )) +if (smp_sufficient_security (hcon, sec_level,SMP_USE_LTK )) { +/* If link is already encrypted with sufficient security we +* still need refresh encryption as per Core Spec 5.0 Vol 3, +* Part H 2.4.6 +*/ +smp_ltk_encrypt (conn, hcon->sec_level);return 0 ; + }if (sec_level > hcon->pending_sec_level) hcon->pending_sec_level = sec_level;
Greg Kroah-Hartman
maintainerPATCH 42/72 llist: clang: introduce member_address_is_nonnull()
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexander Potapenko <[email protected]>
commit beaec533fc2701a28a4d667f67c9f59c6e4e0d13 upstream.
Currently llist_for_each_entry() and llist_for_each_entry_safe() iterate until &pos->member != NULL. But when building the kernel with Clang, the compiler assumes &pos->member cannot be NULL if the member's offset is greater than 0 (which would be equivalent to the object being non-contiguous in memory). Therefore the loop condition is always true, and the loops become infinite.
To work around this, introduce the member_address_is_nonnull() macro, which casts object pointer to uintptr_t, thus letting the member pointer to be NULL.
--- include/linux/llist.h | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-)
include/linux/llist.h +19 -2
@@ -88,6 +88,23 @@ static inline void init_llist_head(struccontainer_of (ptr, type, member)/** +* member_address_is_nonnull - check whether the member address is not NULL +* @ptr: the object pointer (struct type * that contains the llist_node) +* @member: the name of the llist_node within the struct. +* +* This macro is conceptually the same as +* &ptr->member != NULL +* but it works around the fact that compilers can decide that taking a member +* address is never a NULL pointer. +* +* Real objects that start at a high address and have a member at NULL are +* unlikely to exist, but such pointers may be returned e.g. by the +* container_of() macro. + */ +#define member_address_is_nonnull (ptr, member) \ + ((uintptr_t)(ptr) + offsetof(typeof(*(ptr)), member) != 0) + +/** * llist_for_each - iterate over some deleted entries of a lock-less list * @pos: the &struct llist_node to use as a loop cursor * @node: the first entry of deleted list entries
@@ -121,7 +138,7 @@ static inline void init_llist_head(struc*/ #define llist_for_each_entry (pos, node, member) \ for ((pos) = llist_entry((node), typeof(*(pos)), member); \ - &(pos)->member != NULL; \ + member_address_is_nonnull(pos, member); \ (pos) = llist_entry((pos)->member.next, typeof(*(pos)), member))/**
@@ -143,7 +160,7 @@ static inline void init_llist_head(struc*/ #define llist_for_each_entry_safe (pos, n, node, member) \ for (pos = llist_entry((node), typeof(*pos), member); \ - &pos->member != NULL && \ + member_address_is_nonnull(pos, member) && \ (n = llist_entry(pos->member.next, typeof(*n), member), true); \ pos = n)
Greg Kroah-Hartman
maintainerPATCH 43/72 scsi: virtio_scsi: always read VPD pages for multiqueue too
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Paolo Bonzini <[email protected]>
commit a680f1d463aeaeb00d22af257a56e111967c2f18 upstream.
Multi-queue virtio-scsi uses a different scsi_host_template struct. Add the .device_alloc field there, too.
--- drivers/scsi/virtio_scsi.c | 1 + 1 file changed, 1 insertion(+)
drivers/scsi/virtio_scsi.c +1 -0
@@ -819,6 +819,7 @@ static struct scsi_host_template virtscs .eh_abort_handler = virtscsi_abort, .eh_device_reset_handler = virtscsi_device_reset, + .slave_alloc = virtscsi_device_alloc, .can_queue = 1024, .dma_boundary = UINT_MAX, .use_clustering = ENABLE_CLUSTERING,
Greg Kroah-Hartman
maintainerPATCH 44/72 usb: dwc2: Improve gadget state disconnection handling
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Stultz <[email protected]>
commit d2471d4a24dfbff5e463d382e2c6fec7d7e25a09 upstream.
In the earlier commit dad3f793f20f ("usb: dwc2: Make sure we disconnect the gadget state"), I was trying to fix up the fact that we somehow weren't disconnecting the gadget state, so that when the OTG port was plugged in the second time we would get warnings about the state tracking being wrong.
(This seems to be due to a quirk of the HiKey board where we do not ever get any otg interrupts, particularly the session end detected signal. Instead we only see status change interrupt.)
The fix there was somewhat simple, as it just made sure to call dwc2_hsotg_disconnect() before we connected things up in OTG mode, ensuring the state handling didn't throw errors.
But in looking at a different issue I was seeing with UDC state handling, I realized that it would be much better to call dwc2_hsotg_disconnect when we get the state change signal moving to host mode.
Thus, this patch removes the earlier disconnect call I added and moves it (and the needed locking) to the host mode transition.
--- drivers/usb/dwc2/hcd.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
drivers/usb/dwc2/hcd.c +5 -2
@@ -1385,7 +1385,6 @@ static void dwc2_conn_id_status_change(sdwc2_core_init (hsotg, false,-1 );dwc2_enable_global_interrupts (hsotg);spin_lock_irqsave (&hsotg->lock, flags); -dwc2_hsotg_disconnect (hsotg);dwc2_hsotg_core_init_disconnected (hsotg, false);spin_unlock_irqrestore (&hsotg->lock, flags);dwc2_hsotg_core_connect (hsotg);
@@ -1403,8 +1402,12 @@ static void dwc2_conn_id_status_change(sif (count >250 )dev_err (hsotg->dev,"Connection id status change timed out\n" ); - hsotg->op_state =OTG_STATE_A_HOST ; +spin_lock_irqsave (&hsotg->lock, flags); +dwc2_hsotg_disconnect (hsotg); +spin_unlock_irqrestore (&hsotg->lock, flags); + + hsotg->op_state =OTG_STATE_A_HOST ;/* Initialize the Core for Host mode */ dwc2_core_init (hsotg, false,-1 );dwc2_enable_global_interrupts (hsotg);
Greg Kroah-Hartman
maintainerPATCH 45/72 USB: serial: ftdi_sio: add RT Systems VX-8 cable
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Major Hayden <[email protected]>
commit 9608e5c0f079390473b484ef92334dfd3431bb89 upstream.
This patch adds a device ID for the RT Systems cable used to program Yaesu VX-8R/VX-8DR handheld radios. It uses the main FTDI VID instead of the common RT Systems VID.
--- drivers/usb/serial/ftdi_sio.c | 1 + drivers/usb/serial/ftdi_sio_ids.h | 3 +++ 2 files changed, 4 insertions(+)
drivers/usb/serial/ftdi_sio.c +1 -0
@@ -773,6 +773,7 @@ static const struct usb_device_id id_tab .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk }, { USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) }, { USB_DEVICE(NOVITUS_VID, NOVITUS_BONO_E_PID) }, + { USB_DEVICE(FTDI_VID, RTSYSTEMS_USB_VX8_PID) }, { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_S03_PID) }, { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_59_PID) }, { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_USB_57A_PID) },
drivers/usb/serial/ftdi_sio_ids.h +3 -0
@@ -922,6 +922,9 @@/* * RT Systems programming cables for various ham radios */ +/* This device uses the VID of FTDI */ +#define RTSYSTEMS_USB_VX8_PID 0x9e50/* USB-VX8 USB to 7 pin modular plug for Yaesu VX-8 radio */ +#define RTSYSTEMS_VID 0x2100/* Vendor ID */ #define RTSYSTEMS_USB_S03_PID 0x9001/* RTS-03 USB to Serial Adapter */ #define RTSYSTEMS_USB_59_PID 0x9e50/* USB-59 USB to 8 pin plug */
Greg Kroah-Hartman
maintainerPATCH 46/72 USB: serial: ftdi_sio: add support for Harman FirmwareHubEmulator
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Clemens Werther <[email protected]>
commit 6555ad13a01952c16485c82a52ad1f3e07e34b3a upstream.
Add device id for Harman FirmwareHubEmulator to make the device auto-detectable by the driver.
--- drivers/usb/serial/ftdi_sio.c | 1 + drivers/usb/serial/ftdi_sio_ids.h | 6 ++++++ 2 files changed, 7 insertions(+)
drivers/usb/serial/ftdi_sio.c +1 -0
@@ -936,6 +936,7 @@ static const struct usb_device_id id_tab { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LS_LOGBOOK_PID) }, { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_HS_LOGBOOK_PID) }, { USB_DEVICE(FTDI_VID, FTDI_CINTERION_MC55I_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_FHE_PID) }, { USB_DEVICE(FTDI_VID, FTDI_DOTEC_PID) }, { USB_DEVICE(QIHARDWARE_VID, MILKYMISTONE_JTAGSERIAL_PID), .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
drivers/usb/serial/ftdi_sio_ids.h +6 -0
@@ -1444,6 +1444,12 @@#define FTDI_CINTERION_MC55I_PID 0xA951/* +* Product: FirmwareHubEmulator +* Manufacturer: Harman Becker Automotive Systems +*/ +#define FTDI_FHE_PID 0xA9A0 + +/* * Product: Comet Caller ID decoder * Manufacturer: Crucible Technologies */
Greg Kroah-Hartman
maintainerPATCH 47/72 USB: serial: cp210x: add ELDAT Easywave RX09 id
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johan Hovold <[email protected]>
commit 1f1e82f74c0947e40144688c9e36abe4b3999f49 upstream.
Add device id for ELDAT Easywave RX09 tranceiver.
--- drivers/usb/serial/cp210x.c | 1 + 1 file changed, 1 insertion(+)
drivers/usb/serial/cp210x.c +1 -0
@@ -151,6 +151,7 @@ static const struct usb_device_id id_tab { USB_DEVICE(0x12B8, 0xEC62) }, /* Link G4+ ECU */ { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */ { USB_DEVICE(0x1555, 0x0004) }, /* Owen AC4 USB-RS485 Converter */ + { USB_DEVICE(0x155A, 0x1006) }, /* ELDAT Easywave RX09 */ { USB_DEVICE(0x166A, 0x0201) }, /* Clipsal 5500PACA C-Bus Pascal Automation Controller */ { USB_DEVICE(0x166A, 0x0301) }, /* Clipsal 5800PC C-Bus Wireless PC Interface */ { USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */
Greg Kroah-Hartman
maintainerPATCH 48/72 mei: remove dev_err message on an unsupported ioctl
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Colin Ian King <[email protected]>
commit bb0829a741792b56c908d7745bc0b2b540293bcc upstream.
Currently the driver spams the kernel log on unsupported ioctls which is unnecessary as the ioctl returns -ENOIOCTLCMD to indicate this anyway. I suspect this was originally for debugging purposes but it really is not required so remove it.
--- drivers/misc/mei/main.c | 1 - 1 file changed, 1 deletion(-)
drivers/misc/mei/main.c +0 -1
@@ -571,7 +571,6 @@ static long mei_ioctl(struct file *file,break ;default : -dev_err (dev->dev,": unsupported ioctl %d.\n" , cmd); rets = -ENOIOCTLCMD ; }
Greg Kroah-Hartman
maintainerPATCH 49/72 media: usbtv: prevent double free in error case
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Oliver Neukum <[email protected]>
commit 50e7044535537b2a54c7ab798cd34c7f6d900bd2 upstream.
Quoting the original report:
It looks like there is a double-free vulnerability in Linux usbtv driver on an error path of usbtv_probe function. When audio registration fails, usbtv_video_free function ends up freeing usbtv data structure, which gets freed the second time under usbtv_video_fail label.
usbtv_audio_fail:
usbtv_video_free(usbtv); =>
v4l2_device_put(&usbtv->v4l2_dev);
=> v4l2_device_put
=> kref_put
=> v4l2_device_release => usbtv_release (CALLBACK)
=> kfree(usbtv) (1st time)
usbtv_video_fail:
usb_set_intfdata(intf, NULL);
usb_put_dev(usbtv->udev);
kfree(usbtv); (2nd time)So, as we have refcounting, use it
--- drivers/media/usb/usbtv/usbtv-core.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/media/usb/usbtv/usbtv-core.c +2 -0
@@ -95,6 +95,8 @@ static int usbtv_probe(struct usb_interfreturn 0 ; usbtv_audio_fail: +/* we must not free at this point */ +usb_get_dev (usbtv->udev);usbtv_video_free (usbtv); usbtv_video_fail:
Re: [PATCH 4.4 49/72] media: usbtv: prevent double free in error case
Quoted 7 lines · Greg Kroah-Hartman
4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Oliver Neukum <[email protected]>
commit
50e7044535537b2a54c7ab798cd34c7f6d900bd2upstream.
[...]
drivers/media/usb/usbtv/usbtv-core.c static int usbtv_probe(struct usb_interf · line 99
Quoted 8 lines
drivers/media/usb/usbtv/usbtv-core.c +0
-0@@ -95,6 +95,8 @@ static int usbtv_probe(struct usb_interf > return 0;
usbtv_audio_fail:drivers/media/usb/usbtv/usbtv-core.c +2
-0+/* we must not free at this point */ +usb_get_dev (usbtv->udev);
Shouldn't this bump the V4L2 device's reference count, i.e.:
v4l2_device_get(&usbtv->v4l2_dev);
?
Ben.
Quoted 6 lines
usbtv_video_free(usbtv);
usbtv_video_fail:
Signature · 2 lines
Ben Hutchings Software Developer, Codethink Ltd.
Re: [PATCH 4.4 49/72] media: usbtv: prevent double free in error case
Am Montag, den 14.05.2018, 18:41 +0100 schrieb Ben Hutchings:
Quoted 5 lines
Shouldn't this bump the V4L2 device's reference count, i.e.:
v4l2_device_get(&usbtv->v4l2_dev);
<censored>
You are right. Mixing refcounting sucks. I am preparing a patch.
Regards
Oliver
Greg Kroah-Hartman
maintainerPATCH 50/72 parport_pc: Add support for WCH CH382L PCI-E single parallel port card.
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexander Gerasiov <[email protected]>
commit 823f7923833c6cc2b16e601546d607dcfb368004 upstream.
WCH CH382L is a PCI-E adapter with 1 parallel port. It is similair to CH382 but serial ports are not soldered on board. Detected as
Serial controller: Device 1c00:3050 (rev 10) (prog-if 05 [16850])
--- drivers/parport/parport_pc.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/parport/parport_pc.c +4 -0
@@ -2646,6 +2646,7 @@ enum parport_pc_pci_cards { netmos_9901, netmos_9865, quatech_sppxp100, + wch_ch382l, };
@@ -2708,6 +2709,7 @@ static struct parport_pc_pci { /* netmos_9901 */ { 1, { { 0, -1 }, } }, /* netmos_9865 */ { 1, { { 0, -1 }, } }, /* quatech_sppxp100 */ { 1, { { 0, 1 }, } }, + /* wch_ch382l */ { 1, { { 2, -1 }, } }, }; static const struct pci_device_id parport_pc_pci_tbl[] = {
@@ -2797,6 +2799,8 @@ static const struct pci_device_id parpor/* Quatech SPPXP-100 Parallel port PCI ExpressCard */ {PCI_VENDOR_ID_QUATECH ,PCI_DEVICE_ID_QUATECH_SPPXP_100 , PCI_ANY_ID, PCI_ANY_ID, 0, 0, quatech_sppxp100 }, +/* WCH CH382L PCI-E single parallel port card */ + { 0x1c00, 0x3050, 0x1c00, 0x3050, 0, 0, wch_ch382l }, { 0, } /* terminate list */ };MODULE_DEVICE_TABLE (pci, parport_pc_pci_tbl);
Greg Kroah-Hartman
maintainerPATCH 51/72 crypto: ahash - Fix early termination in hash walk
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Herbert Xu <[email protected]>
commit 900a081f6912a8985dc15380ec912752cb66025a upstream.
When we have an unaligned SG list entry where there is no leftover aligned data, the hash walk code will incorrectly return zero as if the entire SG list has been processed.
This patch fixes it by moving onto the next page instead.
--- crypto/ahash.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
crypto/ahash.c +4 -3
@@ -91,13 +91,14 @@ int crypto_hash_walk_done(struct crypto_if (nbytes && walk->offset & alignmask && !err) { walk->offset =ALIGN (walk->offset, alignmask +1 ); - walk->data += walk->offset; - nbytes =min (nbytes, ((unsigned int )(PAGE_SIZE )) - walk->offset); walk->entrylen -= nbytes; -return nbytes; +if (nbytes) { + walk->data += walk->offset; +return nbytes; + } }if (walk->flags &CRYPTO_ALG_ASYNC )
Greg Kroah-Hartman
maintainerPATCH 52/72 crypto: x86/cast5-avx - fix ECB encryption when long sg follows short one
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Biggers <[email protected]>
commit 8f461b1e02ed546fbd0f11611138da67fd85a30f upstream.
With ecb-cast5-avx, if a 128+ byte scatterlist element followed a shorter one, then the algorithm accidentally encrypted/decrypted only 8 bytes instead of the expected 128 bytes. Fix it by setting the encryption/decryption 'fn' correctly.
--- arch/x86/crypto/cast5_avx_glue.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
arch/x86/crypto/cast5_avx_glue.c +1 -2
@@ -66,8 +66,6 @@ static int ecb_crypt(struct blkcipher_devoid (*fn)(struct cast5_ctx *ctx,u8 *dst,const u8 *src);int err; - fn = (enc) ? cast5_ecb_enc_16way : cast5_ecb_dec_16way; - err =blkcipher_walk_virt (desc, walk); desc->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP ;
@@ -79,6 +77,7 @@ static int ecb_crypt(struct blkcipher_de/* Process multi-block batch */ if (nbytes >= bsize *CAST5_PARALLEL_BLOCKS ) { + fn = (enc) ? cast5_ecb_enc_16way : cast5_ecb_dec_16way; do { fn(ctx, wdst, wsrc);
Greg Kroah-Hartman
maintainerPATCH 53/72 fs/proc: Stop trying to report thread stacks
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andy Lutomirski <[email protected]>
commit b18cb64ead400c01bf1580eeba330ace51f8087d upstream.
This reverts more of:
b76437579d13 ("procfs: mark thread stack correctly in proc/<pid>/maps")
... which was partially reverted by:
65376df58217 ("proc: revert /proc/<pid>/maps [stack:TID] annotation")
Originally, /proc/PID/task/TID/maps was the same as /proc/TID/maps.
In current kernels, /proc/PID/maps (or /proc/TID/maps even for threads) shows "[stack]" for VMAs in the mm's stack address range.
In contrast, /proc/PID/task/TID/maps uses KSTK_ESP to guess the target thread's stack's VMA. This is racy, probably returns garbage and, on arches with CONFIG_TASK_INFO_IN_THREAD=y, is also crash-prone:KSTK_ESP is not safe to use on tasks that aren't known to be running ordinary process-context kernel code.
This patch removes the difference and just shows "[stack]" for VMAs in the mm's stack range. This is IMO much more sensible -- the actual "stack" address really is treated specially by the VM code, and the current thread stack isn't even well-defined for programs that frequently switch stacks on their own.
--- Documentation/filesystems/proc.txt | 26 -------------------------- fs/proc/task_mmu.c | 29 ++++++++++------------------- fs/proc/task_nommu.c | 26 +++++++++----------------- 3 files changed, 19 insertions(+), 62 deletions(-)
Documentation/filesystems/proc.txt +0 -26
@@ -383,32 +383,6 @@ is not associated with a file: or if empty, the mapping is anonymous. -The /proc/PID/task/TID/maps is a view of the virtual memory from the viewpoint -of the individual tasks of a process. In this file you will see a mapping marked -as [stack] if that task sees it as a stack. Hence, for the example above, the -task-level map, i.e. /proc/PID/task/TID/maps for thread 1001 will look like this: - -08048000-08049000 r-xp 00000000 03:00 8312 /opt/test -08049000-0804a000 rw-p 00001000 03:00 8312 /opt/test -0804a000-0806b000 rw-p 00000000 00:00 0 [heap] -a7cb1000-a7cb2000 ---p 00000000 00:00 0 -a7cb2000-a7eb2000 rw-p 00000000 00:00 0 -a7eb2000-a7eb3000 ---p 00000000 00:00 0 -a7eb3000-a7ed5000 rw-p 00000000 00:00 0 [stack] -a7ed5000-a8008000 r-xp 00000000 03:00 4222 /lib/libc.so.6 -a8008000-a800a000 r--p 00133000 03:00 4222 /lib/libc.so.6 -a800a000-a800b000 rw-p 00135000 03:00 4222 /lib/libc.so.6 -a800b000-a800e000 rw-p 00000000 00:00 0 -a800e000-a8022000 r-xp 00000000 03:00 14462 /lib/libpthread.so.0 -a8022000-a8023000 r--p 00013000 03:00 14462 /lib/libpthread.so.0 -a8023000-a8024000 rw-p 00014000 03:00 14462 /lib/libpthread.so.0 -a8024000-a8027000 rw-p 00000000 00:00 0 -a8027000-a8043000 r-xp 00000000 03:00 8317 /lib/ld-linux.so.2 -a8043000-a8044000 r--p 0001b000 03:00 8317 /lib/ld-linux.so.2 -a8044000-a8045000 rw-p 0001c000 03:00 8317 /lib/ld-linux.so.2 -aff35000-aff4a000 rw-p 00000000 00:00 0 -ffffe000-fffff000 r-xp 00000000 00:00 0 [vdso] - The /proc/PID/smaps is an extension based on maps, showing the memory consumption for each of the process's mappings. For each of mappings there is a series of lines such as the following:
fs/proc/task_mmu.c +10 -19
@@ -253,24 +253,15 @@ static int do_maps_open(struct inode *in* /proc/PID/maps that is the stack of the main task. */ static int is_stack (struct proc_maps_private *priv, -struct vm_area_struct *vma,int is_pid) +struct vm_area_struct *vma) { -int stack =0 ; - -if (is_pid) { - stack = vma->vm_start <= vma->vm_mm->start_stack && - vma->vm_end >= vma->vm_mm->start_stack; - }else { -struct inode *inode = priv->inode; -struct task_struct *task; - -rcu_read_lock (); - task =pid_task (proc_pid (inode),PIDTYPE_PID ); -if (task) - stack =vma_is_stack_for_task (vma, task); -rcu_read_unlock (); - } -return stack; +/* +* We make no effort to guess what a given thread considers to be +* its "stack". It's not even well-defined for programs written +* languages like Go. +*/ +return vma->vm_start <= vma->vm_mm->start_stack && + vma->vm_end >= vma->vm_mm->start_stack; } static void
@@ -337,7 +328,7 @@ show_map_vma(struct seq_file *m, struct goto done; } -if (is_stack (priv, vma, is_pid)) +if (is_stack (priv, vma)) name ="[stack]" ; }
@@ -1560,7 +1551,7 @@ static int show_numa_map(struct seq_fileseq_file_path (m, file,"\n\t= " ); }else if (vma->vm_start <= mm->brk && vma->vm_end >= mm->start_brk) {seq_puts (m," heap" ); - }else if (is_stack (proc_priv, vma, is_pid)) { + }else if (is_stack (proc_priv, vma)) {seq_puts (m," stack" ); }
fs/proc/task_nommu.c +9 -17
@@ -124,25 +124,17 @@ unsigned long task_statm(struct mm_struc }static int is_stack (struct proc_maps_private *priv, -struct vm_area_struct *vma,int is_pid) +struct vm_area_struct *vma) {struct mm_struct *mm = vma->vm_mm; -int stack =0 ; -if (is_pid) { - stack = vma->vm_start <= mm->start_stack && - vma->vm_end >= mm->start_stack; - }else { -struct inode *inode = priv->inode; -struct task_struct *task; - -rcu_read_lock (); - task =pid_task (proc_pid (inode),PIDTYPE_PID ); -if (task) - stack =vma_is_stack_for_task (vma, task); -rcu_read_unlock (); - } -return stack; +/* +* We make no effort to guess what a given thread considers to be +* its "stack". It's not even well-defined for programs written +* languages like Go. +*/ +return vma->vm_start <= mm->start_stack && + vma->vm_end >= mm->start_stack; }/*
@@ -184,7 +176,7 @@ static int nommu_vma_show(struct seq_filif (file) {seq_pad (m,' ' );seq_file_path (m, file,"" ); - }else if (mm &&is_stack (priv, vma, is_pid)) { + }else if (mm &&is_stack (priv, vma)) {seq_pad (m,' ' );seq_printf (m,"[stack]" ); }
Greg Kroah-Hartman
maintainerPATCH 54/72 staging: comedi: ni_mio_common: ack ai fifo error interrupts.
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Frank Mori Hess <[email protected]>
commit e1d9fc04c41840a4688ef6ce90b6dcca157ea4d7 upstream.
Ack ai fifo error interrupts in interrupt handler to clear interrupt after fifo overflow. It should prevent lock-ups after the ai fifo overflows.
--- drivers/staging/comedi/drivers/ni_mio_common.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/staging/comedi/drivers/ni_mio_common.c +2 -0
@@ -1348,6 +1348,8 @@ static void ack_a_interrupt(struct comed ack |=NISTC_INTA_ACK_AI_START ;if (a_status &NISTC_AI_STATUS1_STOP ) ack |=NISTC_INTA_ACK_AI_STOP ; +if (a_status &NISTC_AI_STATUS1_OVER ) + ack |=NISTC_INTA_ACK_AI_ERR ;if (ack)ni_stc_writew (dev, ack,NISTC_INTA_ACK_REG ); }
Greg Kroah-Hartman
maintainerPATCH 55/72 Input: i8042 - add Lenovo ThinkPad L460 to i8042 reset list
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dennis Wassenberg <[email protected]>
commit b56af54ac78c54a519d82813836f305d7f76ef27 upstream.
Reset i8042 before probing because of insufficient BIOS initialisation of the i8042 serial controller. This makes Synaptics touchpad detection possible. Without resetting the Synaptics touchpad is not detected because there are always NACK messages from AUX port.
--- drivers/input/serio/i8042-x86ia64io.h | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/input/serio/i8042-x86ia64io.h +7 -0
@@ -693,6 +693,13 @@ static const struct dmi_system_id __init }, }, { +/* Lenovo ThinkPad L460 */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"LENOVO" ), + DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad L460"), + }, + }, + {/* Clevo P650RS, 650RP6, Sager NP8152-S, and others */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
Greg Kroah-Hartman
maintainerPATCH 56/72 Input: i8042 - enable MUX on Sony VAIO VGN-CS series to fix touchpad
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ondrej Zary <[email protected]>
commit 04bb1719c4de94700056241d4c0fe3c1413f5aff upstream.
The touch sensor buttons on Sony VAIO VGN-CS series laptops (e.g. VGN-CS31S) are a separate PS/2 device. As the MUX is disabled for all VAIO machines by the nomux blacklist, the data from touch sensor buttons and touchpad are combined. The protocol used by the buttons is probably similar to the touchpad protocol (both are Synaptics) so both devices get enabled. The controller combines the data, creating a mess which results in random button clicks, touchpad stopping working and lost sync error messages:
psmouse serio1: TouchPad at isa0060/serio1/input0 lost sync at byte 4 psmouse serio1: TouchPad at isa0060/serio1/input0 lost sync at byte 1 psmouse serio1: TouchPad at isa0060/serio1/input0 lost sync at byte 1 psmouse serio1: TouchPad at isa0060/serio1/input0 lost sync at byte 1 psmouse serio1: TouchPad at isa0060/serio1/input0 lost sync at byte 1 psmouse serio1: issuing reconnect request
Add a new i8042_dmi_forcemux_table whitelist with VGN-CS. With MUX enabled, touch sensor buttons are detected as separate device (and left disabled as there's currently no driver), fixing all touchpad problems.
--- drivers/input/serio/i8042-x86ia64io.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
drivers/input/serio/i8042-x86ia64io.h +17 -0
@@ -530,6 +530,20 @@ static const struct dmi_system_id __init { } }; +static const struct dmi_system_id i8042_dmi_forcemux_table[]__initconst = { + { +/* +* Sony Vaio VGN-CS series require MUX or the touch sensor +* buttons will disturb touchpad operation +*/ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Sony Corporation" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"VGN-CS" ), + }, + }, + { } +}; +/* * On some Asus laptops, just running self tests cause problems. */
@@ -1230,6 +1244,9 @@ static int __init i8042_platform_init(voif (dmi_check_system (i8042_dmi_nomux_table)) i8042_nomux = true; +if (dmi_check_system (i8042_dmi_forcemux_table)) + i8042_nomux = false; +if (dmi_check_system (i8042_dmi_notimeout_table)) i8042_notimeout = true;
Greg Kroah-Hartman
maintainerPATCH 57/72 vt: change SGR 21 to follow the standards
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mike Frysinger <[email protected]>
commit 65d9982d7e523a1a8e7c9af012da0d166f72fc56 upstream.
ECMA-48 [1] (aka ISO 6429) has defined SGR 21 as "doubly underlined" since at least March 1984. The Linux kernel has treated it as SGR 22 "normal intensity" since it was added in Linux-0.96b in June 1992. Before that, it was simply ignored. Other terminal emulators have either ignored it, or treat it as double underline now. xterm for example added support in its 304 release (May 2014) [2] where it was previously ignoring it.
Changing this behavior shouldn't be an issue:
- It isn't a named capability in ncurses's terminfo database, so no script is using libtinfo/libcurses to look this up, or using tput to query & output the right sequence.
- Any script assuming SGR 21 will reset intensity in all terminals already do not work correctly on non-Linux VTs (including running under screen/tmux/etc...).
- If someone has written a script that only runs in the Linux VT, and they're using SGR 21 (instead of SGR 22), the output should still be readable.
imo it's important to change this as the Linux VT's non-conformance is sometimes used as an argument for other terminal emulators to not implement SGR 21 at all, or do so incorrectly.
[1]: https://www.ecma-international.org/publications/standards/Ecma-048.htm
[2]: https://github.com/ThomasDickey/xterm-snapshots/commit/2fd29cb98d214cb536bcafbee00bc73b3f1eeb9d
--- drivers/tty/vt/vt.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/tty/vt/vt.c +5 -1
@@ -1312,6 +1312,11 @@ static void csi_m(struct vc_data *vc)case 3 : vc->vc_italic =1 ;break ; +case 21 : +/* +* No console drivers support double underline, so +* convert it to a single underline. +*/ case 4 : vc->vc_underline =1 ;break ;
@@ -1348,7 +1353,6 @@ static void csi_m(struct vc_data *vc) vc->vc_disp_ctrl =1 ; vc->vc_toggle_meta =1 ;break ; -case 21 :case 22 : vc->vc_intensity =1 ;break ;
Greg Kroah-Hartman
maintainerPATCH 58/72 Documentation: pinctrl: palmas: Add ti,palmas-powerhold-override property definition
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Keerthy <[email protected]>
commit 0ea66f76ba17a4b229caaadd77de694111b21769 upstream.
GPIO7 is configured in POWERHOLD mode which has higher priority over DEV_ON bit and keeps the PMIC supplies on even after the DEV_ON bit is turned off. This property enables driver to over ride the POWERHOLD value to GPIO7 so as to turn off the PMIC in power off scenarios.
--- Documentation/devicetree/bindings/pinctrl/pinctrl-palmas.txt | 9 +++++++++ 1 file changed, 9 insertions(+)
Documentation/devicetree/bindings/pinctrl/pinctrl-palmas.txt +9 -0
@@ -35,6 +35,15 @@ Optional properties: - ti,palmas-enable-dvfs2: Enable DVFS2. Configure pins for DVFS2 mode. Selection primary or secondary function associated to GPADC_START and SYSEN2 pin/pad for DVFS2 interface +- ti,palmas-override-powerhold: This is applicable for PMICs for which + GPIO7 is configured in POWERHOLD mode which has higher priority + over DEV_ON bit and keeps the PMIC supplies on even after the DEV_ON + bit is turned off. This property enables driver to over ride the + POWERHOLD value to GPIO7 so as to turn off the PMIC in power off + scenarios. So for GPIO7 if ti,palmas-override-powerhold is set + then the GPIO_7 field should never be muxed to anything else. + It should be set to POWERHOLD by default and only in case of + power off scenarios the driver will over ride the mux value. This binding uses the following generic properties as defined in pinctrl-bindings.txt:
Greg Kroah-Hartman
maintainerPATCH 59/72 ARM: dts: dra7: Add power hold and power controller properties to palmas
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Keerthy <[email protected]>
commit 7c62de5f3fc92291decc0dac5f36949bdc3fb575 upstream.
Add power hold and power controller properties to palmas node. This is needed to shutdown pmic correctly on boards with powerhold set.
--- arch/arm/boot/dts/dra7-evm.dts | 2 ++ 1 file changed, 2 insertions(+)
arch/arm/boot/dts/dra7-evm.dts +2 -0
@@ -410,6 +410,8 @@ tps659038: tps659038@58 { compatible = "ti,tps659038"; reg = <0x58>; + ti,palmas-override-powerhold; + ti,system-power-controller; tps659038_pmic { compatible = "ti,tps659038-pmic";
Greg Kroah-Hartman
maintainerPATCH 60/72 ARM: dts: am57xx-beagle-x15-common: Add overide powerhold property
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Keerthy <[email protected]>
commit 1f166499ce006b3770a3166122eda64e160736ab upstream.
The PMICs have POWERHOLD set by default which prevents PMIC shutdown even on DEV_CTRL On bit set to 0 as the Powerhold has higher priority. So to enable pmic power off this property lets one over ride the default value and enable pmic power off.
--- arch/arm/boot/dts/am57xx-beagle-x15.dts | 1 + 1 file changed, 1 insertion(+)
arch/arm/boot/dts/am57xx-beagle-x15.dts +1 -0
@@ -411,6 +411,7 @@ interrupt-controller; ti,system-power-controller; + ti,palmas-override-powerhold; tps659038_pmic { compatible = "ti,tps659038-pmic";
Greg Kroah-Hartman
maintainerPATCH 61/72 md/raid10: reset the first at the end of loop
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Guoqing Jiang <[email protected]>
commit 6f287ca6046edd34ed83aafb7f9033c9c2e809e2 upstream.
We need to set "first = 0' at the end of rdev_for_each loop, so we can get the array's min_offset_diff correctly otherwise min_offset_diff just means the last rdev's offset diff.
[only the first chunk, due to b506335e5d2b ("md/raid10: skip spare disk as 'first' disk") being already applied - gregkh]
--- drivers/md/raid10.c | 1 + 1 file changed, 1 insertion(+)
drivers/md/raid10.c +1 -0
@@ -3638,6 +3638,7 @@ static int run(struct mddev *mddev)if (blk_queue_discard (bdev_get_queue (rdev->bdev))) discard_supported = true; + first =0 ; }if (mddev->queue) {
Greg Kroah-Hartman
maintainerPATCH 62/72 net: hns: Fix ethtool private flags
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Brugger <[email protected]>
commit d61d263c8d82db7c4404a29ebc29674b1c0c05c9 upstream.
The driver implementation returns support for private flags, while no private flags are present. When asked for the number of private flags it returns the number of statistic flag names.
Fix this by returning EOPNOTSUPP for not implemented ethtool flags.
--- drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c | 2 +- drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c | 2 +- drivers/net/ethernet/hisilicon/hns/hns_dsaf_rcb.c | 2 +- drivers/net/ethernet/hisilicon/hns/hns_ethtool.c | 4 +++- 4 files changed, 6 insertions(+), 4 deletions(-)
drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c +1 -1
@@ -648,7 +648,7 @@ static void hns_gmac_get_strings(u32 strstatic int hns_gmac_get_sset_count (int stringset) { -if (stringset ==ETH_SS_STATS || stringset ==ETH_SS_PRIV_FLAGS ) +if (stringset ==ETH_SS_STATS )return ARRAY_SIZE (g_gmac_stats_string);return 0 ;
drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c +1 -1
@@ -384,7 +384,7 @@ void hns_ppe_update_stats(struct hns_ppeint hns_ppe_get_sset_count (int stringset) { -if (stringset ==ETH_SS_STATS || stringset ==ETH_SS_PRIV_FLAGS ) +if (stringset ==ETH_SS_STATS )return ETH_PPE_STATIC_NUM ;return 0 ; }
drivers/net/ethernet/hisilicon/hns/hns_dsaf_rcb.c +1 -1
@@ -807,7 +807,7 @@ void hns_rcb_get_stats(struct hnae_queue*/ int hns_rcb_get_ring_sset_count (int stringset) { -if (stringset ==ETH_SS_STATS || stringset ==ETH_SS_PRIV_FLAGS ) +if (stringset ==ETH_SS_STATS )return HNS_RING_STATIC_REG_NUM ;return 0 ;
drivers/net/ethernet/hisilicon/hns/hns_ethtool.c +3 -1
@@ -1000,8 +1000,10 @@ int hns_get_sset_count(struct net_device cnt--;return cnt; - }else { + }else if (stringset ==ETH_SS_STATS ) {return (HNS_NET_STATS_CNT + ops->get_sset_count (h, stringset)); + }else { +return -EOPNOTSUPP ; } }
Greg Kroah-Hartman
maintainerPATCH 63/72 nospec: Move array_index_nospec() parameter checking into separate macro
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Will Deacon <[email protected]>
commit 8fa80c503b484ddc1abbd10c7cb2ab81f3824a50 upstream.
For architectures providing their own implementation of array_index_mask_nospec() in asm/barrier.h, attempting to use WARN_ONCE() to complain about out-of-range parameters using WARN_ON() results in a mess of mutually-dependent include files.
Rather than unpick the dependencies, simply have the core code in nospec.h perform the checking for us.
--- include/linux/nospec.h | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-)
include/linux/nospec.h +21 -15
@@ -21,20 +21,6 @@ static inline unsigned long array_index_ unsigned long size) {/* -* Warn developers about inappropriate array_index_nospec() usage. -* -* Even if the CPU speculates past the WARN_ONCE branch, the -* sign bit of @index is taken into account when generating the -* mask. -* -* This warning is compiled out when the compiler can infer that -* @index and @size are less than LONG_MAX. -*/ -if (WARN_ONCE (index >LONG_MAX || size >LONG_MAX , -"array_index_nospec() limited to range of [0, LONG_MAX]\n" )) -return 0 ; - -/* * Always calculate and emit the mask even if the compiler * thinks the mask is not needed. The compiler does not take * into account the value of @index under speculation.
@@ -45,6 +31,26 @@ static inline unsigned long array_index_#endif /* +* Warn developers about inappropriate array_index_nospec() usage. +* +* Even if the CPU speculates past the WARN_ONCE branch, the +* sign bit of @index is taken into account when generating the +* mask. +* +* This warning is compiled out when the compiler can infer that +* @index and @size are less than LONG_MAX. +*/ +#define array_index_mask_nospec_check (index, size) \ +({ \ + if (WARN_ONCE(index > LONG_MAX || size > LONG_MAX, \ + "array_index_nospec() limited to range of [0, LONG_MAX]\n")) \ + _mask = 0; \ + else \ + _mask = array_index_mask_nospec(index, size); \ + _mask; \ +}) + +/* * array_index_nospec - sanitize an array index after a bounds check * * For a code sequence like:
@@ -62,7 +68,7 @@ static inline unsigned long array_index_ ({ \ typeof(index) _i = (index); \ typeof(size) _s = (size); \ - unsigned long _mask = array_index_mask_nospec(_i, _s); \ + unsigned long _mask = array_index_mask_nospec_check(_i, _s); \ \ BUILD_BUG_ON(sizeof(_i) > sizeof(long)); \ BUILD_BUG_ON(sizeof(_s) > sizeof(long)); \
Greg Kroah-Hartman
maintainerPATCH 64/72 nospec: Kill array_index_nospec_mask_check()
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Williams <[email protected]>
commit 1d91c1d2c80cb70e2e553845e278b87a960c04da upstream.
There are multiple problems with the dynamic sanity checking in array_index_nospec_mask_check():
* It causes unnecessary overhead in the 32-bit case since integer sized @index values will no longer cause the check to be compiled away like in the 64-bit case.
* In the 32-bit case it may trigger with user controllable input when the expectation is that should only trigger during development of new kernel enabling.
* The macro reuses the input parameter in multiple locations which is broken if someone passes an expression like 'index++' to array_index_nospec().
--- include/linux/nospec.h | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-)
include/linux/nospec.h +1 -21
@@ -31,26 +31,6 @@ static inline unsigned long array_index_#endif /* -* Warn developers about inappropriate array_index_nospec() usage. -* -* Even if the CPU speculates past the WARN_ONCE branch, the -* sign bit of @index is taken into account when generating the -* mask. -* -* This warning is compiled out when the compiler can infer that -* @index and @size are less than LONG_MAX. -*/ -#define array_index_mask_nospec_check (index, size) \ -({ \ - if (WARN_ONCE(index > LONG_MAX || size > LONG_MAX, \ - "array_index_nospec() limited to range of [0, LONG_MAX]\n")) \ - _mask = 0; \ - else \ - _mask = array_index_mask_nospec(index, size); \ - _mask; \ -}) - -/* * array_index_nospec - sanitize an array index after a bounds check * * For a code sequence like:
@@ -68,7 +48,7 @@ static inline unsigned long array_index_ ({ \ typeof(index) _i = (index); \ typeof(size) _s = (size); \ - unsigned long _mask = array_index_mask_nospec_check(_i, _s); \ + unsigned long _mask = array_index_mask_nospec(_i, _s); \ \ BUILD_BUG_ON(sizeof(_i) > sizeof(long)); \ BUILD_BUG_ON(sizeof(_s) > sizeof(long)); \
Greg Kroah-Hartman
maintainerPATCH 65/72 Revert "PCI/MSI: Stop disabling MSI/MSI-X in pci_device_shutdown()"
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit 4fbe422076d36615ec6fe8648d1aecfa460bc67d which was commit fda78d7a0ead144f4b2cdb582dcba47911f4952c upstream.
The dependancy tree is just too messy here, just drop it from this kernel as it's not really needed here.
--- drivers/pci/pci-driver.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/pci/pci-driver.c +2 -0
@@ -463,6 +463,8 @@ static void pci_device_shutdown(struct dif (drv && drv->shutdown) drv->shutdown (pci_dev); +pci_msi_shutdown (pci_dev); +pci_msix_shutdown (pci_dev);#ifdef CONFIG_KEXEC_CORE /*
Greg Kroah-Hartman
maintainerPATCH 66/72 Revert "ARM: dts: am335x-pepper: Fix the audio CODECs reset pin"
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit 59df934af72fe74a64be6a0d8dba21375a5482bc which was comit e153db03c6b7a035c797bcdf35262586f003ee93 upstream.
It requires a driver that was not merged until 4.16, so remove it from this stable tree as it is pointless.
--- arch/arm/boot/dts/am335x-pepper.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/am335x-pepper.dts +1 -1
@@ -139,7 +139,7 @@ &audio_codec { status = "okay"; - reset-gpios = <&gpio1 16 GPIO_ACTIVE_LOW>; + gpio-reset = <&gpio1 16 GPIO_ACTIVE_LOW>; AVDD-supply = <&ldo3_reg>; IOVDD-supply = <&ldo3_reg>; DRVDD-supply = <&ldo3_reg>;
Greg Kroah-Hartman
maintainerPATCH 67/72 Revert "ARM: dts: omap3-n900: Fix the audio CODECs reset pin"
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit ffa0a8252863189f0bc92d46c34588df3699f8f8 which was commit 7be4b5dc7ffa9499ac6ef33a5ffa9ff43f9b7057 upstream.
It requires a driver that was not merged until 4.16, so remove it from this stable tree as it is pointless.
--- arch/arm/boot/dts/omap3-n900.dts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/boot/dts/omap3-n900.dts +2 -2
@@ -488,7 +488,7 @@ tlv320aic3x: tlv320aic3x@18 { compatible = "ti,tlv320aic3x"; reg = <0x18>; - reset-gpios = <&gpio2 28 GPIO_ACTIVE_LOW>; /* 60 */ + gpio-reset = <&gpio2 28 GPIO_ACTIVE_HIGH>; /* 60 */ ai3x-gpio-func = < 0 /* AIC3X_GPIO1_FUNC_DISABLED */ 5 /* AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT */
@@ -505,7 +505,7 @@ tlv320aic3x_aux: tlv320aic3x@19 { compatible = "ti,tlv320aic3x"; reg = <0x19>; - reset-gpios = <&gpio2 28 GPIO_ACTIVE_LOW>; /* 60 */ + gpio-reset = <&gpio2 28 GPIO_ACTIVE_HIGH>; /* 60 */ AVDD-supply = <&vmmc2>; DRVDD-supply = <&vmmc2>;
Greg Kroah-Hartman
maintainerPATCH 68/72 Revert "cpufreq: Fix governor module removal race"
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit 3f7dfb7fcf98a7e73dee018c4a68537ce7fec646 which was commit a8b149d32b663c1a4105273295184b78f53d33cf upstream.
The backport was not correct, so just drop it entirely.
--- drivers/cpufreq/cpufreq.c | 6 ------ 1 file changed, 6 deletions(-)
drivers/cpufreq/cpufreq.c +0 -6
@@ -551,8 +551,6 @@ static int cpufreq_parse_governor(char * *governor = t; err =0 ; } -if (t && !try_module_get (t->owner)) - t =NULL ;mutex_unlock (&cpufreq_governor_mutex); }
@@ -671,10 +669,6 @@ static ssize_t store_scaling_governor(streturn -EINVAL ; ret =cpufreq_set_policy (policy, &new_policy); - -if (new_policy.governor) -module_put (new_policy.governor->owner); -return ret ? ret : count; }
Greg Kroah-Hartman
maintainerPATCH 69/72 Revert "mtip32xx: use runtime tag to initialize command header"
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit 9bf9e352ed51d4cdee107675609ba12b42d00c5b which was commit a4e84aae8139aca9fbfbced1f45c51ca81b57488 upstream.
Ben writes:
MQ IO schedulers were introduced in 4.11, so this shouldn't be needed in older branches. It also causes a performance regression (fixed upstream). Please revert this for 4.4 and 4.9.
So let's revert it!
--- drivers/block/mtip32xx/mtip32xx.c | 36 ++++++++++++------------------------ 1 file changed, 12 insertions(+), 24 deletions(-)
drivers/block/mtip32xx/mtip32xx.c +12 -24
@@ -169,25 +169,6 @@ static bool mtip_check_surprise_removal(return false;/* device present */ } -/* we have to use runtime tag to setup command header */ -static void mtip_init_cmd_header (struct request *rq) -{ -struct driver_data *dd = rq->q->queuedata; -struct mtip_cmd *cmd =blk_mq_rq_to_pdu (rq); -u32 host_cap_64 =readl (dd->mmio +HOST_CAP ) &HOST_CAP_64 ; - -/* Point the command headers at the command tables. */ - cmd->command_header = dd->port->command_list + - (sizeof (struct mtip_cmd_hdr ) * rq->tag); - cmd->command_header_dma = dd->port->command_list_dma + - (sizeof (struct mtip_cmd_hdr ) * rq->tag); - -if (host_cap_64) - cmd->command_header->ctbau = __force_bit2int cpu_to_le32((cmd->command_dma >> 16) >> 16); - - cmd->command_header->ctba = __force_bit2int cpu_to_le32(cmd->command_dma & 0xFFFFFFFF); -} -static struct mtip_cmd *mtip_get_int_command (struct driver_data *dd) {struct request *rq;
@@ -199,9 +180,6 @@ static struct mtip_cmd *mtip_get_int_comif (IS_ERR (rq))return NULL ; -/* Internal cmd isn't submitted via .queue_rq */ -mtip_init_cmd_header (rq); -return blk_mq_rq_to_pdu (rq); }
@@ -3840,8 +3818,6 @@ static int mtip_queue_rq(struct blk_mq_hstruct request *rq = bd->rq;int ret; -mtip_init_cmd_header (rq); -if (unlikely (mtip_check_unal_depth (hctx, rq)))return BLK_MQ_RQ_QUEUE_BUSY ;
@@ -3873,6 +3849,7 @@ static int mtip_init_cmd(void *data, str {struct driver_data *dd = data;struct mtip_cmd *cmd =blk_mq_rq_to_pdu (rq); +u32 host_cap_64 =readl (dd->mmio +HOST_CAP ) &HOST_CAP_64 ;/* * For flush requests, request_idx starts at the end of the
@@ -3889,6 +3866,17 @@ static int mtip_init_cmd(void *data, strmemset (cmd->command,0 ,CMD_DMA_ALLOC_SZ ); +/* Point the command headers at the command tables. */ + cmd->command_header = dd->port->command_list + + (sizeof (struct mtip_cmd_hdr ) * request_idx); + cmd->command_header_dma = dd->port->command_list_dma + + (sizeof (struct mtip_cmd_hdr ) * request_idx); + +if (host_cap_64) + cmd->command_header->ctbau = __force_bit2int cpu_to_le32((cmd->command_dma >> 16) >> 16); + + cmd->command_header->ctba = __force_bit2int cpu_to_le32(cmd->command_dma & 0xFFFFFFFF); +sg_init_table (cmd->sg,MTIP_MAX_SG );return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 70/72 spi: davinci: fix up dma_mapping_error() incorrect patch
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
commit 11dd9e2c480324b46118ff708ea2ca8d7022539b, which is commit c5a2a394835f473ae23931eda5066d3771d7b2f8 upstream had an error in it.
Ben writes:
The '!' needs to be deleted. This appears to have been fixed upstream by:
commit 8aedbf580d21121d2a032e4c8ea12d8d2d85e275
Author: Fabien Parent <[email protected]>
Date: Thu Feb 23 19:01:56 2017 +0100
spi: davinci: Use SPI framework to handle DMA mapping
which is not suitable for stable.
So I'm just fixing this up directly.
--- drivers/spi/spi-davinci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/spi/spi-davinci.c +1 -1
@@ -651,7 +651,7 @@ static int davinci_spi_bufs(struct spi_d buf = t->rx_buf; t->rx_dma =dma_map_single (&spi->dev, buf, t->len,DMA_FROM_DEVICE ); -if (dma_mapping_error (&spi->dev, !t->rx_dma)) { +if (dma_mapping_error (&spi->dev, t->rx_dma)) { ret = -EFAULT ; goto err_rx_map; }
Greg Kroah-Hartman
maintainerPATCH 71/72 net: cavium: liquidio: fix up "Avoid dma_unmap_single on uninitialized ndata"
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This fixes up commit 1d1cb762524f05cfb37994e0d36b7b4b5e957134 which was commit 8e6ce7ebeb34f0992f56de078c3744fb383657fa upstream.
Ben writes:
This goto should not have been changed, as no DMA mapping has been attempted at this point in the function.
This seems to have been fixed upstream by commit 6a885b60dad2 "liquidio:
Introduce new octeon2/3 header". I leave it to you to work out how it should be fixed in 4.4-stable.
Fix this up by hand, as the referenced patch isn't worthy of being backported.
--- drivers/net/ethernet/cavium/liquidio/lio_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/cavium/liquidio/lio_main.c +1 -1
@@ -2823,7 +2823,7 @@ static int liquidio_xmit(struct sk_buffif (!g) {netif_info (lio, tx_err, lio->netdev,"Transmit scatter gather: glist null!\n" ); - goto lio_xmit_dma_failed; + goto lio_xmit_failed; } cmdsetup.s.gather =1 ;
Greg Kroah-Hartman
maintainerPATCH 72/72 Revert "ip6_vti: adjust vti mtu according to mtu of lower device"
In reply to Greg Kroah-Hartman4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit 2fe832c678189d6b19b5ff282e7e70df79c1406b which is commit 53c81e95df1793933f87748d36070a721f6cb287 upstream.
Ben writes that there are a number of follow-on patches needed to fix this up, but they get complex to backport, and some custom fixes are needed, so let's just revert this and wait for a "real" set of patches to resolve this to be submitted if it is really needed.
--- net/ipv6/ip6_vti.c | 20 -------------------- 1 file changed, 20 deletions(-)
net/ipv6/ip6_vti.c +0 -20
@@ -614,7 +614,6 @@ static void vti6_link_config(struct ip6_tnl *t) {struct net_device *dev = t->dev;struct __ip6_tnl_parm *p = &t->parms; -struct net_device *tdev =NULL ;memcpy (dev->dev_addr, &p->laddr,sizeof (struct in6_addr ));memcpy (dev->broadcast, &p->raddr,sizeof (struct in6_addr ));
@@ -627,25 +626,6 @@ static void vti6_link_config(struct ip6_tnl *t) dev->flags |=IFF_POINTOPOINT ; else dev->flags &= ~IFF_POINTOPOINT; - -if (p->flags &IP6_TNL_F_CAP_XMIT ) { -int strict = (ipv6_addr_type (&p->raddr) & - (IPV6_ADDR_MULTICAST |IPV6_ADDR_LINKLOCAL )); -struct rt6_info *rt =rt6_lookup (t->net, - &p->raddr, &p->laddr, - p->link, strict); - -if (rt) - tdev = rt->dst.dev; -ip6_rt_put (rt); - } - -if (!tdev && p->link) - tdev =__dev_get_by_index (t->net, p->link); - -if (tdev) - dev->mtu =max_t (int, tdev->mtu - dev->hard_header_len, -IPV6_MIN_MTU ); }/**
Signature · 1 line
2.17.0
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.4.127 release. There are 72 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sun Apr 8 08:42:48 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.4.127-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.4.y
and the diffstat can be found below.thanks,
greg k-h
Merged, compiled, and flashed on my Pixel 2 XL and OnePlus 5.
No issues noticed in general usage or dmesg (I've been running the queue over the past few days to stay on top of any issues).
Thanks!
Nathan
Greg Kroah-Hartman
maintainerQuoted 17 lines · Nathan Chancellor
Quoted 16 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.4.127 release. There are 72 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sun Apr 8 08:42:48 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.4.127-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.4.y
and the diffstat can be found below.thanks,
Quoted 7 lines
Quoted 2 lines
greg k-h
Merged, compiled, and flashed on my Pixel 2 XL and OnePlus 5.
No issues noticed in general usage or dmesg (I've been running the queue over the past few days to stay on top of any issues).
Great, thanks for testing and letting me know.
greg k-h
stable-rc/linux-4.4.y boot: 49 boots: 0 failed, 47 passed with 2 untried/unknown (v4.4.126-73-g82bd29002c67)
stable-rc/linux-4.4.y boot: 49 boots: 0 failed, 47 passed with 2 untried/unknown (v4.4.126-73-g82bd29002c67)
Full Boot Summary: https://kernelci.org/boot/all/job/stable-rc/branch/linux-4.4.y/kernel/v4.4.126-73-g82bd29002c67/
Full Build Summary: https://kernelci.org/build/stable-rc/branch/linux-4.4.y/kernel/v4.4.126-73-g82bd29002c67/
Tree: stable-rc
Branch: linux-4.4.y
Git Describe: v4.4.126-73-g82bd29002c67
Git Commit: 82bd29002c6763e5558015c877c50373d1a14560
Git URL: http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Tested: 24 unique boards, 12 SoC families, 13 builds out of 178
---
For more info write to <[email protected]>
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.4.127 release. There are 72 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sun Apr 8 08:42:48 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.4.127-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.4.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.4.127 release. There are 72 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sun Apr 8 08:42:48 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.4.127-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.4.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm and x86_64.
Summary
------------------------------------------------------------------------
kernel: 4.4.127-rc1
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-4.4.y
git commit: 82bd29002c6763e5558015c877c50373d1a14560
git describe: v4.4.126-73-g82bd29002c67
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-4.4-oe/build/v4.4.126-73-g82bd29002c67
No regressions (compared to build v4.4.126-53-gdc9629474809)
Boards, architectures and test suites:
-------------------------------------
juno-r2 - arm64
* boot - pass: 20
* kselftest - skip: 29, pass: 34
* libhugetlbfs - skip: 1, pass: 90
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 53, pass: 28
* ltp-fcntl-locktests-tests - pass: 2
* ltp-filecaps-tests - pass: 2
* ltp-fs-tests - skip: 2, pass: 61
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - pass: 22
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-math-tests - pass: 11
* ltp-nptl-tests - pass: 2
* ltp-pty-tests - pass: 4
* ltp-sched-tests - skip: 4, pass: 10
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - skip: 152, pass: 998
* ltp-timers-tests - skip: 1, pass: 12
qemu_x86_64
* boot - pass: 22
* kselftest - skip: 33, pass: 47
* kselftest-vsyscall-mode-native - skip: 33, pass: 47
* kselftest-vsyscall-mode-none - skip: 33, pass: 47
* libhugetlbfs - skip: 1, pass: 90
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 17, pass: 64
* ltp-fcntl-locktests-tests - pass: 2
* ltp-filecaps-tests - pass: 2
* ltp-fs-tests - skip: 6, pass: 57
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - pass: 22
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-math-tests - pass: 11
* ltp-nptl-tests - pass: 2
* ltp-pty-tests - pass: 4
* ltp-sched-tests - skip: 1, pass: 13
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - skip: 149, pass: 1001
* ltp-timers-tests - skip: 1, pass: 12
x15 - arm
* boot - pass: 20
* kselftest - skip: 29, pass: 33
* libhugetlbfs - skip: 1, pass: 87
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 17, pass: 64
* ltp-fcntl-locktests-tests - pass: 2
* ltp-filecaps-tests - pass: 2
* ltp-fs-tests - skip: 2, pass: 61
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - skip: 2, pass: 20
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-math-tests - pass: 11
* ltp-nptl-tests - pass: 2
* ltp-pty-tests - pass: 4
* ltp-sched-tests - skip: 1, pass: 13
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - skip: 98, pass: 1052
* ltp-timers-tests - skip: 1, pass: 12
x86_64
* boot - pass: 22
* kselftest - skip: 31, fail: 1, pass: 48
* kselftest-vsyscall-mode-native - skip: 31, fail: 1, pass: 48
* kselftest-vsyscall-mode-none - skip: 31, fail: 2, pass: 46
* libhugetlbfs - skip: 1, pass: 90
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 17, pass: 64
* ltp-fcntl-locktests-tests - pass: 2
* ltp-filecaps-tests - pass: 2
* ltp-fs-tests - skip: 1, pass: 62
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - pass: 22
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-math-tests - pass: 11
* ltp-nptl-tests - pass: 2
* ltp-pty-tests - pass: 4
* ltp-sched-tests - skip: 5, pass: 9
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - skip: 120, pass: 1030
* ltp-timers-tests - skip: 1, pass: 12
Hikey test results,
Summary
------------------------------------------------------------------------
kernel: 4.4.127-rc1
git repo: https://git.linaro.org/lkft/arm64-stable-rc.git
git tag: 4.4.127-rc1-hikey-20180406-167
git commit: f9fe096cd3478d5e39d05b7c97cca9cf2beace79
git describe: 4.4.127-rc1-hikey-20180406-167
Test details: https://qa-reports.linaro.org/lkft/linaro-hikey-stable-rc-4.4-oe/build/4.4.127-rc1-hikey-20180406-167
No regressions (compared to build 4.4.127-rc1-hikey-20180405-166)
------------------------------------------------------------------------
Boards, architectures and test suites:
-------------------------------------
hi6220-hikey - arm64
* boot - pass: 20
* kselftest - skip: 32, pass: 31
* libhugetlbfs - skip: 1, pass: 90
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 53, pass: 28
* ltp-fcntl-locktests-tests - pass: 2
* ltp-filecaps-tests - pass: 2
* ltp-fs-tests - skip: 2, pass: 61
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - skip: 1, pass: 21
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-math-tests - pass: 11
* ltp-nptl-tests - pass: 2
* ltp-pty-tests - pass: 4
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - skip: 154, fail: 2, pass: 994
* ltp-timers-tests - skip: 1, pass: 12
--
Linaro QA (beta)
https://qa-reports.linaro.org