4.9.148-stable review
Subsystems (3)
Greg Kroah-Hartman
maintainercover 4.9.148-stable review
This is the start of the stable review cycle for the 4.9.148 release. There are 22 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 Dec 30 11:31:00 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.9.148-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.9.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 4.9.148-rc1
Gustavo A. R. Silva <[email protected]>
drm/ioctl: Fix Spectre v1 vulnerabilities
Ivan Delalande <[email protected]>
proc/sysctl: don't return ENOMEM on lookup when a table is unregistering
Sergey Senozhatsky <[email protected]>
panic: avoid deadlocks in re-entrant console drivers
Richard Weinberger <[email protected]>
ubifs: Handle re-linking of inodes correctly while recovery
Sebastian Andrzej Siewior <[email protected]>
x86/fpu: Disable bottom halves while loading FPU registers
Colin Ian King <[email protected]>
x86/mtrr: Don't copy uninitialized gentry fields back to userspace
Dexuan Cui <[email protected]>
Drivers: hv: vmbus: Return -EINVAL for the sys files for unopened channels
Christophe Leroy <[email protected]>
gpio: max7301: fix driver for use with CONFIG_VMAP_STACK
Russell King <[email protected]>
mmc: omap_hsmmc: fix DMA API warning
Ulf Hansson <[email protected]>
mmc: core: Use a minimum 1600ms timeout when enabling CACHE ctrl
Ulf Hansson <[email protected]>
mmc: core: Allow BKOPS and CACHE ctrl even if no HPI support
Ulf Hansson <[email protected]>
mmc: core: Reset HPI enabled state during re-init and in case of errors
Jörgen Storvist <[email protected]>
USB: serial: option: add Telit LN940 series
Jörgen Storvist <[email protected]>
USB: serial: option: add Fibocom NL668 series
Jörgen Storvist <[email protected]>
USB: serial: option: add Simcom SIM7500/SIM7600 (MBIM mode)
Tore Anderson <[email protected]>
USB: serial: option: add HP lt4132
Jörgen Storvist <[email protected]>
USB: serial: option: add GosunCn ZTE WeLink ME3630
Mathias Nyman <[email protected]>
xhci: Don't prevent USB2 bus suspend in state check intended for USB3 only
Hui Peng <[email protected]>
USB: hso: Fix OOB memory access in hso_probe/hso_get_config_data
Bart Van Assche <[email protected]>
ib_srpt: Fix a use-after-free in __srpt_close_all_ch()
Mikulas Patocka <[email protected]>
block: fix infinite loop if the device loses discard capability
Jens Axboe <[email protected]>
block: break discard submissions into the user defined size
-------------
Diffstat:
Makefile | 4 ++-- arch/x86/kernel/cpu/mtrr/if.c | 2 ++ arch/x86/kernel/fpu/signal.c | 4 ++-- block/blk-lib.c | 22 ++++++++++++++++++--- drivers/gpio/gpio-max7301.c | 12 +++--------- drivers/gpu/drm/drm_ioctl.c | 10 ++++++++-- drivers/hv/vmbus_drv.c | 20 +++++++++++++++++++ drivers/infiniband/ulp/srpt/ib_srpt.c | 4 ++-- drivers/mmc/core/mmc.c | 24 ++++++++++++++--------- drivers/mmc/host/omap_hsmmc.c | 12 +++++++++++- drivers/net/usb/hso.c | 18 +++++++++++++++-- drivers/usb/host/xhci-hub.c | 3 ++- drivers/usb/serial/option.c | 16 ++++++++++++++- fs/proc/proc_sysctl.c | 13 ++++++------ fs/ubifs/replay.c | 37 +++++++++++++++++++++++++++++++++++ kernel/panic.c | 6 +++++- 16 files changed, 165 insertions(+), 42 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/22 block: break discard submissions into the user defined size
4.9-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit af097f5d199e2aa3ab3ef777f0716e487b8f7b08 ]
Don't build discards bigger than what the user asked for, if the user decided to limit the size by writing to 'discard_max_bytes'.
--- block/blk-lib.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)
block/blk-lib.c +9 -3
@@ -63,10 +63,16 @@ int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,unsigned int req_sects;sector_t end_sect, tmp; -/* Make sure bi_size doesn't overflow */ - req_sects =min_t (sector_t, nr_sects,UINT_MAX >>9 ); +/* +* Issue in chunks of the user defined max discard setting, +* ensuring that bi_size doesn't overflow +*/ + req_sects =min_t (sector_t, nr_sects, + q->limits.max_discard_sectors); +if (req_sects >UINT_MAX >>9 ) + req_sects =UINT_MAX >>9 ; -/** +/* * If splitting a request, and the next starting sector would be * misaligned, stop the discard at the previous aligned sector. */
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 2/22 block: fix infinite loop if the device loses discard capability
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit b88aef36b87c9787a4db724923ec4f57dfd513f3 ]
If __blkdev_issue_discard is in progress and a device mapper device is reloaded with a table that doesn't support discard, q->limits.max_discard_sectors is set to zero. This results in infinite loop in __blkdev_issue_discard.
This patch checks if max_discard_sectors is zero and aborts with -EOPNOTSUPP.
--- block/blk-lib.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
block/blk-lib.c +10 -0
@@ -69,6 +69,8 @@ int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,*/ req_sects =min_t (sector_t, nr_sects, q->limits.max_discard_sectors); +if (!req_sects) + goto fail;if (req_sects >UINT_MAX >>9 ) req_sects =UINT_MAX >>9 ;
@@ -106,6 +108,14 @@ int __blkdev_issue_discard(struct block_device *bdev, sector_t sector, *biop = bio;return 0 ; + +fail: +if (bio) { +submit_bio_wait (bio); +bio_put (bio); + } + *biop =NULL ; +return -EOPNOTSUPP ; }EXPORT_SYMBOL (__blkdev_issue_discard);
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 3/22 ib_srpt: Fix a use-after-free in __srpt_close_all_ch()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 14d15c2b278011056482eb015dff89f9cbf2b841 ]
BUG: KASAN: use-after-free in srpt_set_enabled+0x1a9/0x1e0 [ib_srpt] Read of size 4 at addr ffff8801269d23f8 by task check/29726 CPU: 4 PID: 29726 Comm: check Not tainted 4.18.0-rc2-dbg+ #4 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.0.0-prebuilt.qemu-project.org 04/01/2014 Call Trace: dump_stack+0xa4/0xf5 print_address_description+0x6f/0x270 kasan_report+0x241/0x360 __asan_load4+0x78/0x80 srpt_set_enabled+0x1a9/0x1e0 [ib_srpt] srpt_tpg_enable_store+0xb8/0x120 [ib_srpt] configfs_write_file+0x14e/0x1d0 [configfs] __vfs_write+0xd2/0x3b0 vfs_write+0x101/0x270 ksys_write+0xab/0x120 __x64_sys_write+0x43/0x50 do_syscall_64+0x77/0x230 entry_SYSCALL_64_after_hwframe+0x49/0xbe RIP: 0033:0x7f235cfe6154
--- drivers/infiniband/ulp/srpt/ib_srpt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/infiniband/ulp/srpt/ib_srpt.c +2 -2
@@ -1763,8 +1763,8 @@ static void __srpt_close_all_ch(struct srpt_device *sdev)list_for_each_entry (ch, &sdev->rch_list, list) {if (srpt_disconnect_ch (ch) >=0 ) -pr_info ("Closing channel %s-%d because target %s has been disabled\n" , - ch->sess_name, ch->qp->qp_num, +pr_info ("Closing channel %s because target %s has been disabled\n" , + ch->sess_name, sdev->device->name);srpt_close_ch (ch); }
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 4/22 USB: hso: Fix OOB memory access in hso_probe/hso_get_config_data
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hui Peng <[email protected]>
commit 5146f95df782b0ac61abde36567e718692725c89 upstream.
The function hso_probe reads if_num from the USB device (as an u8) and uses it without a length check to index an array, resulting in an OOB memory read in hso_probe or hso_get_config_data.
Add a length check for both locations and updated hso_probe to bail on error.
This issue has been assigned CVE-2018-19985.
--- drivers/net/usb/hso.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-)
drivers/net/usb/hso.c +16 -2
@@ -2808,6 +2808,12 @@ static int hso_get_config_data(struct usreturn -EIO ; } +/* check if we have a valid interface */ +if (if_num >16 ) { +kfree (config_data); +return -EINVAL ; + } +switch (config_data[if_num]) {case 0x0 : result =0 ;
@@ -2878,10 +2884,18 @@ static int hso_probe(struct usb_interfac/* Get the interface/port specification from either driver_info or from * the device itself */ -if (id->driver_info) +if (id->driver_info) { +/* if_num is controlled by the device, driver_info is a 0 terminated +* array. Make sure, the access is in bounds! */ +for (i =0 ; i <= if_num; ++i) +if (((u32 *)(id->driver_info))[i] ==0 ) + goto exit; port_spec = ((u32 *)(id->driver_info))[if_num]; -else + }else { port_spec =hso_get_config_data (interface); +if (port_spec <0 ) + goto exit; + }/* Check if we need to switch to alt interfaces prior to port * configuration */
Greg Kroah-Hartman
maintainerPATCH 5/22 xhci: Dont prevent USB2 bus suspend in state check intended for USB3 only
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mathias Nyman <[email protected]>
commit 45f750c16cae3625014c14c77bd9005eda975d35 upstream.
The code to prevent a bus suspend if a USB3 port was still in link training also reacted to USB2 port polling state.
This caused bus suspend to busyloop in some cases.
USB2 polling state is different from USB3, and should not prevent bus suspend.
Limit the USB3 link training state check to USB3 root hub ports only. The origial commit went to stable so this need to be applied there as well
--- drivers/usb/host/xhci-hub.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/usb/host/xhci-hub.c +2 -1
@@ -1353,7 +1353,8 @@ int xhci_bus_suspend(struct usb_hcd *hcd portsc_buf[port_index] =0 ;/* Bail out if a USB3 port has a new device in link training */ -if ((t1 &PORT_PLS_MASK ) ==XDEV_POLLING ) { +if ((hcd->speed >=HCD_USB3 ) && + (t1 &PORT_PLS_MASK ) ==XDEV_POLLING ) { bus_state->bus_suspended =0 ;spin_unlock_irqrestore (&xhci->lock, flags);xhci_dbg (xhci,"Bus suspend bailout, port in polling\n" );
Greg Kroah-Hartman
maintainerPATCH 6/22 USB: serial: option: add GosunCn ZTE WeLink ME3630
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jörgen Storvist <[email protected]>
commit 70a7444c550a75584ffcfae95267058817eff6a7 upstream.
Added USB serial option driver support for GosunCn ZTE WeLink ME3630 series cellular modules for USB modes ECM/NCM and MBIM.
usb-devices output MBIM mode:
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 10 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=19d2 ProdID=0602 Rev=03.18 S: Manufacturer=Android S: Product=Android S: SerialNumber= C: #Ifs= 5 Cfg#= 1 Atr=a0 MxPwr=500mA I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option I: If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 3 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim I: If#= 4 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
usb-devices output ECM/NCM mode:
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 11 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=19d2 ProdID=1476 Rev=03.18 S: Manufacturer=Android S: Product=Android S: SerialNumber= C: #Ifs= 5 Cfg#= 1 Atr=a0 MxPwr=500mA I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option I: If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 3 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether I: If#= 4 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
--- drivers/usb/serial/option.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/usb/serial/option.c +2 -0
@@ -1327,6 +1327,7 @@ static const struct usb_device_id option .driver_info = RSVD(4) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0414, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0417, 0xff, 0xff, 0xff) }, + { USB_DEVICE_INTERFACE_CLASS(ZTE_VENDOR_ID, 0x0602, 0xff) }, /* GosunCn ZTE WeLink ME3630 (MBIM mode) */ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1008, 0xff, 0xff, 0xff), .driver_info = RSVD(4) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1010, 0xff, 0xff, 0xff),
@@ -1530,6 +1531,7 @@ static const struct usb_device_id option .driver_info = RSVD(2) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1428, 0xff, 0xff, 0xff), /* Telewell TW-LTE 4G v2 */ .driver_info = RSVD(2) }, + { USB_DEVICE_INTERFACE_CLASS(ZTE_VENDOR_ID, 0x1476, 0xff) }, /* GosunCn ZTE WeLink ME3630 (ECM/NCM mode) */ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1533, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1534, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1535, 0xff, 0xff, 0xff) },
Greg Kroah-Hartman
maintainerPATCH 7/22 USB: serial: option: add HP lt4132
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tore Anderson <[email protected]>
commit d57ec3c83b5153217a70b561d4fb6ed96f2f7a25 upstream.
The HP lt4132 is a rebranded Huawei ME906s-158 LTE modem.
The interface with protocol 0x16 is "CDC ECM & NCM" according to the *.inf files included with the Windows driver. Attaching the option driver to it doesn't result in a /dev/ttyUSB* device being created, so I've excluded it. Note that it is also excluded for corresponding Huawei-branded devices, cf. commit d544db293a44 ("USB: support new huawei devices in option.c").
T: Bus=01 Lev=01 Prnt=01 Port=02 Cnt=02 Dev#= 3 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=ff MxPS=64 #Cfgs= 3 P: Vendor=03f0 ProdID=a31d Rev=01.02 S: Manufacturer=HP Inc. S: Product=HP lt4132 LTE/HSPA+ 4G Module S: SerialNumber=0123456789ABCDEF C: #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=2mA I: If#=0x0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=06 Prot=10 Driver=option I: If#=0x1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=06 Prot=13 Driver=option I: If#=0x2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=06 Prot=12 Driver=option I: If#=0x3 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=06 Prot=16 Driver=(none) I: If#=0x4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=06 Prot=14 Driver=option I: If#=0x5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=06 Prot=1b Driver=option
T: Bus=01 Lev=01 Prnt=01 Port=02 Cnt=02 Dev#= 3 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=ff MxPS=64 #Cfgs= 3 P: Vendor=03f0 ProdID=a31d Rev=01.02 S: Manufacturer=HP Inc. S: Product=HP lt4132 LTE/HSPA+ 4G Module S: SerialNumber=0123456789ABCDEF C: #Ifs= 7 Cfg#= 2 Atr=a0 MxPwr=2mA I: If#=0x0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether I: If#=0x1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=06 Prot=00 Driver=cdc_ether I: If#=0x2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=06 Prot=10 Driver=option I: If#=0x3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=06 Prot=13 Driver=option I: If#=0x4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=06 Prot=12 Driver=option I: If#=0x5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=06 Prot=14 Driver=option I: If#=0x6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=06 Prot=1b Driver=option
T: Bus=01 Lev=01 Prnt=01 Port=02 Cnt=02 Dev#= 3 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=ff MxPS=64 #Cfgs= 3 P: Vendor=03f0 ProdID=a31d Rev=01.02 S: Manufacturer=HP Inc. S: Product=HP lt4132 LTE/HSPA+ 4G Module S: SerialNumber=0123456789ABCDEF C: #Ifs= 3 Cfg#= 3 Atr=a0 MxPwr=2mA I: If#=0x0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim I: If#=0x1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim I: If#=0x2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=06 Prot=14 Driver=option
--- drivers/usb/serial/option.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/usb/serial/option.c +6 -1
@@ -1943,7 +1943,12 @@ static const struct usb_device_id option { USB_DEVICE_AND_INTERFACE_INFO(WETELECOM_VENDOR_ID, WETELECOM_PRODUCT_WMD200, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(WETELECOM_VENDOR_ID, WETELECOM_PRODUCT_6802, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(WETELECOM_VENDOR_ID, WETELECOM_PRODUCT_WMD300, 0xff, 0xff, 0xff) }, - { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0x421d, 0xff, 0xff, 0xff) }, /* HP lt2523 (Novatel E371) */ + { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0x421d, 0xff, 0xff, 0xff) }, /* HP lt2523 (Novatel E371) */ + { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0xa31d, 0xff, 0x06, 0x10) }, /* HP lt4132 (Huawei ME906s-158) */ + { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0xa31d, 0xff, 0x06, 0x12) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0xa31d, 0xff, 0x06, 0x13) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0xa31d, 0xff, 0x06, 0x14) }, + { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0xa31d, 0xff, 0x06, 0x1b) }, { } /* Terminating entry */ };MODULE_DEVICE_TABLE (usb, option_ids);
Greg Kroah-Hartman
maintainerPATCH 8/22 USB: serial: option: add Simcom SIM7500/SIM7600 (MBIM mode)
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jörgen Storvist <[email protected]>
commit cc6730df08a291e51e145bc65e24ffb5e2f17ab6 upstream.
Added USB serial option driver support for Simcom SIM7500/SIM7600 series cellular modules exposing MBIM interface (VID 0x1e0e,PID 0x9003)
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 14 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1e0e ProdID=9003 Rev=03.18 S: Manufacturer=SimTech, Incorporated S: Product=SimTech, Incorporated S: SerialNumber=0123456789ABCDEF C: #Ifs= 7 Cfg#= 1 Atr=a0 MxPwr=500mA I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option I: If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 5 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim I: If#= 6 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
--- drivers/usb/serial/option.c | 1 + 1 file changed, 1 insertion(+)
drivers/usb/serial/option.c +1 -0
@@ -1759,6 +1759,7 @@ static const struct usb_device_id option { USB_DEVICE_AND_INTERFACE_INFO(ALINK_VENDOR_ID, ALINK_PRODUCT_3GU, 0xff, 0xff, 0xff) }, { USB_DEVICE(ALINK_VENDOR_ID, SIMCOM_PRODUCT_SIM7100E), .driver_info = RSVD(5) | RSVD(6) }, + { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9003, 0xff) }, /* Simcom SIM7500/SIM7600 MBIM mode */ { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200), .driver_info = NCTRL(0) | NCTRL(1) | RSVD(4) }, { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D),
Greg Kroah-Hartman
maintainerPATCH 9/22 USB: serial: option: add Fibocom NL668 series
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jörgen Storvist <[email protected]>
commit 30360224441ce89a98ed627861e735beb4010775 upstream.
Added USB serial option driver support for Fibocom NL668 series cellular modules. Reserved USB endpoints 4, 5 and 6 for network + ADB interfaces.
usb-devices output (QMI mode)
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 16 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1508 ProdID=1001 Rev=03.18 S: Manufacturer=Nodecom NL668 Modem S: Product=Nodecom NL668-CN Modem S: SerialNumber= C: #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=500mA I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option I: If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan I: If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
usb-devices output (ECM mode)
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 17 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1508 ProdID=1001 Rev=03.18 S: Manufacturer=Nodecom NL668 Modem S: Product=Nodecom NL668-CN Modem S: SerialNumber= C: #Ifs= 7 Cfg#= 1 Atr=a0 MxPwr=500mA I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option I: If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 4 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether I: If#= 5 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether I: If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
--- drivers/usb/serial/option.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/usb/serial/option.c +2 -0
@@ -1950,6 +1950,8 @@ static const struct usb_device_id option { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0xa31d, 0xff, 0x06, 0x13) }, { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0xa31d, 0xff, 0x06, 0x14) }, { USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0xa31d, 0xff, 0x06, 0x1b) }, + { USB_DEVICE(0x1508, 0x1001), /* Fibocom NL668 */ + .driver_info = RSVD(4) | RSVD(5) | RSVD(6) }, { } /* Terminating entry */ };MODULE_DEVICE_TABLE (usb, option_ids);
Greg Kroah-Hartman
maintainerPATCH 10/22 USB: serial: option: add Telit LN940 series
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jörgen Storvist <[email protected]>
commit 28a86092b1753b802ef7e3de8a4c4a69a9c1bb03 upstream.
Added USB serial option driver support for Telit LN940 series cellular modules. Covering both QMI and MBIM modes.
usb-devices output (0x1900):
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 21 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 P: Vendor=1bc7 ProdID=1900 Rev=03.10 S: Manufacturer=Telit S: Product=Telit LN940 Mobile Broadband S: SerialNumber=0123456789ABCDEF C: #Ifs= 5 Cfg#= 1 Atr=a0 MxPwr=500mA I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option I: If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
usb-devices output (0x1901):
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 20 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 P: Vendor=1bc7 ProdID=1901 Rev=03.10 S: Manufacturer=Telit S: Product=Telit LN940 Mobile Broadband S: SerialNumber=0123456789ABCDEF C: #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=500mA I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option I: If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option I: If#= 4 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim I: If#= 5 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
--- drivers/usb/serial/option.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/usb/serial/option.c +4 -0
@@ -1163,6 +1163,10 @@ static const struct usb_device_id option { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1213, 0xff) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920A4_1214), .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) }, + { USB_DEVICE(TELIT_VENDOR_ID, 0x1900), /* Telit LN940 (QMI) */ + .driver_info = NCTRL(0) | RSVD(1) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1901, 0xff), /* Telit LN940 (MBIM) */ + .driver_info = NCTRL(0) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0002, 0xff, 0xff, 0xff), .driver_info = RSVD(1) },
Greg Kroah-Hartman
maintainerPATCH 11/22 mmc: core: Reset HPI enabled state during re-init and in case of errors
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ulf Hansson <[email protected]>
commit a0741ba40a009f97c019ae7541dc61c1fdf41efb upstream.
During a re-initialization of the eMMC card, we may fail to re-enable HPI. In these cases, that isn't properly reflected in the card->ext_csd.hpi_en bit, as it keeps being set. This may cause following attempts to use HPI, even if's not enabled. Let's fix this!
--- drivers/mmc/core/mmc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/mmc/core/mmc.c +3 -1
@@ -1719,9 +1719,11 @@ static int mmc_init_card(struct mmc_hostif (err) {pr_warn ("%s: Enabling HPI failed\n" ,mmc_hostname (card->host)); + card->ext_csd.hpi_en =0 ; err =0 ; - }else + }else { card->ext_csd.hpi_en =1 ; + } }/*
Greg Kroah-Hartman
maintainerPATCH 12/22 mmc: core: Allow BKOPS and CACHE ctrl even if no HPI support
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ulf Hansson <[email protected]>
commit ba9f39a785a9977e72233000711ef1eb48203551 upstream.
In commit 5320226a0512 ("mmc: core: Disable HPI for certain Hynix eMMC cards"), then intent was to prevent HPI from being used for some eMMC cards, which didn't properly support it. However, that went too far, as even BKOPS and CACHE ctrl became prevented. Let's restore those parts and allow BKOPS and CACHE ctrl even if HPI isn't supported.
--- drivers/mmc/core/mmc.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/mmc/core/mmc.c +2 -4
@@ -522,8 +522,7 @@ static int mmc_decode_ext_csd(struct mmc card->cid.year +=16 ;/* check whether the eMMC card supports BKOPS */ -if (!mmc_card_broken_hpi (card) && - ext_csd[EXT_CSD_BKOPS_SUPPORT ] &0x1 ) { +if (ext_csd[EXT_CSD_BKOPS_SUPPORT ] &0x1 ) { card->ext_csd.bkops =1 ; card->ext_csd.man_bkops_en = (ext_csd[EXT_CSD_BKOPS_EN] &
@@ -1730,8 +1729,7 @@ static int mmc_init_card(struct mmc_host* If cache size is higher than 0, this indicates * the existence of cache and it can be turned on. */ -if (!mmc_card_broken_hpi (card) && - card->ext_csd.cache_size >0 ) { +if (card->ext_csd.cache_size >0 ) { err =mmc_switch (card,EXT_CSD_CMD_SET_NORMAL ,EXT_CSD_CACHE_CTRL ,1 , card->ext_csd.generic_cmd6_time);
Greg Kroah-Hartman
maintainerPATCH 13/22 mmc: core: Use a minimum 1600ms timeout when enabling CACHE ctrl
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ulf Hansson <[email protected]>
commit e3ae3401aa19432ee4943eb0bbc2ec704d07d793 upstream.
Some eMMCs from Micron have been reported to need ~800 ms timeout, while enabling the CACHE ctrl after running sudden power failure tests. The needed timeout is greater than what the card specifies as its generic CMD6 timeout, through the EXT_CSD register, hence the problem.
Normally we would introduce a card quirk to extend the timeout for these specific Micron cards. However, due to the rather complicated debug process needed to find out the error, let's simply use a minimum timeout of 1600ms, the double of what has been reported, for all cards when enabling CACHE ctrl.
--- drivers/mmc/core/mmc.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)
drivers/mmc/core/mmc.c +10 -4
@@ -27,6 +27,7 @@#include "sd_ops.h" #define DEFAULT_CMD6_TIMEOUT_MS 500 +#define MIN_CACHE_EN_TIMEOUT_MS 1600static const unsigned int tran_exp[] = {10000 ,100000 ,1000000 ,10000000 ,
@@ -1726,13 +1727,18 @@ static int mmc_init_card(struct mmc_host }/* -* If cache size is higher than 0, this indicates -* the existence of cache and it can be turned on. +* If cache size is higher than 0, this indicates the existence of cache +* and it can be turned on. Note that some eMMCs from Micron has been +* reported to need ~800 ms timeout, while enabling the cache after +* sudden power failure tests. Let's extend the timeout to a minimum of +* DEFAULT_CACHE_EN_TIMEOUT_MS and do it for all cards. */ if (card->ext_csd.cache_size >0 ) { +unsigned int timeout_ms =MIN_CACHE_EN_TIMEOUT_MS ; + + timeout_ms =max (card->ext_csd.generic_cmd6_time, timeout_ms); err =mmc_switch (card,EXT_CSD_CMD_SET_NORMAL , -EXT_CSD_CACHE_CTRL ,1 , - card->ext_csd.generic_cmd6_time); +EXT_CSD_CACHE_CTRL ,1 , timeout_ms);if (err && err != -EBADMSG ) goto free_card;
Greg Kroah-Hartman
maintainerPATCH 14/22 mmc: omap_hsmmc: fix DMA API warning
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Russell King <[email protected]>
commit 0b479790684192ab7024ce6a621f93f6d0a64d92 upstream.
While booting with rootfs on MMC, the following warning is encountered on OMAP4430:
omap-dma-engine 4a056000.dma-controller: DMA-API: mapping sg segment longer than device claims to support [len=69632] [max=65536]
This is because the DMA engine has a default maximum segment size of 64K but HSMMC sets:
mmc->max_blk_size = 512; /* Block Length at max can be 1024 */
mmc->max_blk_count = 0xFFFF; /* No. of Blocks is 16 bits */
mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;
mmc->max_seg_size = mmc->max_req_size;which ends up telling the block layer that we support a maximum segment size of 65535*512, which exceeds the advertised DMA engine capabilities.
Fix this by clamping the maximum segment size to the lower of the maximum request size and of the DMA engine device used for either DMA channel.
--- drivers/mmc/host/omap_hsmmc.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
drivers/mmc/host/omap_hsmmc.c +11 -1
@@ -2105,7 +2105,6 @@ static int omap_hsmmc_probe(struct platf mmc->max_blk_size =512 ;/* Block Length at max can be 1024 */ mmc->max_blk_count =0xFFFF ;/* No. of Blocks is 16 bits */ mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count; - mmc->max_seg_size = mmc->max_req_size; mmc->caps |=MMC_CAP_MMC_HIGHSPEED |MMC_CAP_SD_HIGHSPEED |MMC_CAP_WAIT_WHILE_BUSY |MMC_CAP_ERASE ;
@@ -2135,6 +2134,17 @@ static int omap_hsmmc_probe(struct platf goto err_irq; } +/* +* Limit the maximum segment size to the lower of the request size +* and the DMA engine device segment size limits. In reality, with +* 32-bit transfers, the DMA engine can do longer segments than this +* but there is no way to represent that in the DMA model - if we +* increase this figure here, we get warnings from the DMA API debug. +*/ + mmc->max_seg_size =min3 (mmc->max_req_size, +dma_get_max_seg_size (host->rx_chan->device->dev), +dma_get_max_seg_size (host->tx_chan->device->dev)); +/* Request IRQ for MMC operations */ ret =devm_request_irq (&pdev->dev, host->irq, omap_hsmmc_irq,0 ,mmc_hostname (mmc), host);
Greg Kroah-Hartman
maintainerPATCH 15/22 gpio: max7301: fix driver for use with CONFIG_VMAP_STACK
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe Leroy <[email protected]>
commit abf221d2f51b8ce7b9959a8953f880a8b0a1400d upstream.
spi_read() and spi_write() require DMA-safe memory. When CONFIG_VMAP_STACK is selected, those functions cannot be used with buffers on stack.
This patch replaces calls to spi_read() and spi_write() by spi_write_then_read() which doesn't require DMA-safe buffers.
--- drivers/gpio/gpio-max7301.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)
drivers/gpio/gpio-max7301.c +3 -9
@@ -25,7 +25,7 @@ static int max7301_spi_write(struct devistruct spi_device *spi =to_spi_device (dev);u16 word = ((reg &0x7F ) <<8 ) | (val &0xFF ); -return spi_write (spi, (const u8 *)&word,sizeof (word)); +return spi_write_then_read (spi, &word,sizeof (word),NULL ,0 ); }/* A read from the MAX7301 means two transfers; here, one message each */
@@ -37,14 +37,8 @@ static int max7301_spi_read(struct devicstruct spi_device *spi =to_spi_device (dev); word =0x8000 | (reg <<8 ); - ret =spi_write (spi, (const u8 *)&word,sizeof (word)); -if (ret) -return ret; -/* -* This relies on the fact, that a transfer with NULL tx_buf shifts out -* zero bytes (=NOOP for MAX7301) -*/ - ret =spi_read (spi, (u8 *)&word,sizeof (word)); + ret =spi_write_then_read (spi, &word,sizeof (word), &word, +sizeof (word));if (ret)return ret;return word &0xff ;
Greg Kroah-Hartman
maintainerPATCH 16/22 Drivers: hv: vmbus: Return -EINVAL for the sys files for unopened channels
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dexuan Cui <[email protected]>
commit fc96df16a1ce80cbb3c316ab7d4dc8cd5c2852ce upstream.
Before 98f4c651762c, we returned zeros for unopened channels. With 98f4c651762c, we started to return random on-stack values.
We'd better return -EINVAL instead.
--- drivers/hv/vmbus_drv.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
drivers/hv/vmbus_drv.c +20 -0
@@ -317,6 +317,8 @@ static ssize_t out_intr_mask_show(structif (!hv_dev->channel)return -ENODEV ; +if (hv_dev->channel->state !=CHANNEL_OPENED_STATE ) +return -EINVAL ;hv_ringbuffer_get_debuginfo (&hv_dev->channel->outbound, &outbound);return sprintf (buf,"%d\n" , outbound.current_interrupt_mask); }
@@ -330,6 +332,8 @@ static ssize_t out_read_index_show(strucif (!hv_dev->channel)return -ENODEV ; +if (hv_dev->channel->state !=CHANNEL_OPENED_STATE ) +return -EINVAL ;hv_ringbuffer_get_debuginfo (&hv_dev->channel->outbound, &outbound);return sprintf (buf,"%d\n" , outbound.current_read_index); }
@@ -344,6 +348,8 @@ static ssize_t out_write_index_show(struif (!hv_dev->channel)return -ENODEV ; +if (hv_dev->channel->state !=CHANNEL_OPENED_STATE ) +return -EINVAL ;hv_ringbuffer_get_debuginfo (&hv_dev->channel->outbound, &outbound);return sprintf (buf,"%d\n" , outbound.current_write_index); }
@@ -358,6 +364,8 @@ static ssize_t out_read_bytes_avail_showif (!hv_dev->channel)return -ENODEV ; +if (hv_dev->channel->state !=CHANNEL_OPENED_STATE ) +return -EINVAL ;hv_ringbuffer_get_debuginfo (&hv_dev->channel->outbound, &outbound);return sprintf (buf,"%d\n" , outbound.bytes_avail_toread); }
@@ -372,6 +380,8 @@ static ssize_t out_write_bytes_avail_shoif (!hv_dev->channel)return -ENODEV ; +if (hv_dev->channel->state !=CHANNEL_OPENED_STATE ) +return -EINVAL ;hv_ringbuffer_get_debuginfo (&hv_dev->channel->outbound, &outbound);return sprintf (buf,"%d\n" , outbound.bytes_avail_towrite); }
@@ -385,6 +395,8 @@ static ssize_t in_intr_mask_show(structif (!hv_dev->channel)return -ENODEV ; +if (hv_dev->channel->state !=CHANNEL_OPENED_STATE ) +return -EINVAL ;hv_ringbuffer_get_debuginfo (&hv_dev->channel->inbound, &inbound);return sprintf (buf,"%d\n" , inbound.current_interrupt_mask); }
@@ -398,6 +410,8 @@ static ssize_t in_read_index_show(structif (!hv_dev->channel)return -ENODEV ; +if (hv_dev->channel->state !=CHANNEL_OPENED_STATE ) +return -EINVAL ;hv_ringbuffer_get_debuginfo (&hv_dev->channel->inbound, &inbound);return sprintf (buf,"%d\n" , inbound.current_read_index); }
@@ -411,6 +425,8 @@ static ssize_t in_write_index_show(strucif (!hv_dev->channel)return -ENODEV ; +if (hv_dev->channel->state !=CHANNEL_OPENED_STATE ) +return -EINVAL ;hv_ringbuffer_get_debuginfo (&hv_dev->channel->inbound, &inbound);return sprintf (buf,"%d\n" , inbound.current_write_index); }
@@ -425,6 +441,8 @@ static ssize_t in_read_bytes_avail_show(if (!hv_dev->channel)return -ENODEV ; +if (hv_dev->channel->state !=CHANNEL_OPENED_STATE ) +return -EINVAL ;hv_ringbuffer_get_debuginfo (&hv_dev->channel->inbound, &inbound);return sprintf (buf,"%d\n" , inbound.bytes_avail_toread); }
@@ -439,6 +457,8 @@ static ssize_t in_write_bytes_avail_showif (!hv_dev->channel)return -ENODEV ; +if (hv_dev->channel->state !=CHANNEL_OPENED_STATE ) +return -EINVAL ;hv_ringbuffer_get_debuginfo (&hv_dev->channel->inbound, &inbound);return sprintf (buf,"%d\n" , inbound.bytes_avail_towrite); }
Greg Kroah-Hartman
maintainerPATCH 17/22 x86/mtrr: Dont copy uninitialized gentry fields back to userspace
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Colin Ian King <[email protected]>
commit 32043fa065b51e0b1433e48d118821c71b5cd65d upstream.
Currently the copy_to_user of data in the gentry struct is copying uninitiaized data in field _pad from the stack to userspace.
Fix this by explicitly memset'ing gentry to zero, this also will zero any compiler added padding fields that may be in struct (currently there are none).
Detected by CoverityScan, CID#200783 ("Uninitialized scalar variable")
--- arch/x86/kernel/cpu/mtrr/if.c | 2 ++ 1 file changed, 2 insertions(+)
arch/x86/kernel/cpu/mtrr/if.c +2 -0
@@ -172,6 +172,8 @@ mtrr_ioctl(struct file *file, unsigned istruct mtrr_gentry gentry;void __user *arg = (void __user *) __arg; +memset (&gentry,0 ,sizeof (gentry)); +switch (cmd) {case MTRRIOC_ADD_ENTRY :case MTRRIOC_SET_ENTRY :
Greg Kroah-Hartman
maintainerPATCH 18/22 x86/fpu: Disable bottom halves while loading FPU registers
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sebastian Andrzej Siewior <[email protected]>
commit 68239654acafe6aad5a3c1dc7237e60accfebc03 upstream.
The sequence
fpu->initialized = 1; /* step A */ preempt_disable(); /* step B */ fpu__restore(fpu); preempt_enable();
in __fpu__restore_sig() is racy in regard to a context switch.
For 32bit frames, __fpu__restore_sig() prepares the FPU state within fpu->state. To ensure that a context switch (switch_fpu_prepare() in particular) does not modify fpu->state it uses fpu__drop() which sets fpu->initialized to 0.
After fpu->initialized is cleared, the CPU's FPU state is not saved to fpu->state during a context switch. The new state is loaded via fpu__restore(). It gets loaded into fpu->state from userland and ensured it is sane. fpu->initialized is then set to 1 in order to avoid fpu__initialize() doing anything (overwrite the new state) which is part of fpu__restore().
A context switch between step A and B above would save CPU's current FPU registers to fpu->state and overwrite the newly prepared state. This looks like a tiny race window but the Kernel Test Robot reported this back in 2016 while we had lazy FPU support. Borislav Petkov made the link between that report and another patch that has been posted. Since the removal of the lazy FPU support, this race goes unnoticed because the warning has been removed.
Disable bottom halves around the restore sequence to avoid the race. BH need to be disabled because BH is allowed to run (even with preemption disabled) and might invoke kernel_fpu_begin() by doing IPsec.
[ bp: massage commit message a bit. ]
--- arch/x86/kernel/fpu/signal.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/x86/kernel/fpu/signal.c +2 -2
@@ -342,10 +342,10 @@ static int __fpu__restore_sig(void __usesanitize_restored_xstate (tsk, &env, xfeatures, fx_only); } +local_bh_disable (); fpu->fpstate_active =1 ; -preempt_disable ();fpu__restore (fpu); -preempt_enable (); +local_bh_enable ();return err; }else {
Re: [PATCH 4.9 18/22] x86/fpu: Disable bottom halves while loading FPU registers
Quoted 72 lines · Greg Kroah-Hartman
4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sebastian Andrzej Siewior <[email protected]>
commit
68239654acafe6aad5a3c1dc7237e60accfebc03upstream.The sequence
fpu->initialized = 1; /* step A */ preempt_disable(); /* step B */ fpu__restore(fpu); preempt_enable();in
__fpu__restore_sig()is racy in regard to a context switch.For 32bit frames,
__fpu__restore_sig()prepares the FPU state withinfpu->state. To ensure that a context switch (switch_fpu_prepare()in particular) does not modifyfpu->stateit usesfpu__drop()which setsfpu->initializedto 0.After
fpu->initializedis cleared, the CPU's FPU state is not saved tofpu->stateduring a context switch. The new state is loaded viafpu__restore(). It gets loaded intofpu->statefrom userland and ensured it is sane.fpu->initializedis then set to 1 in order to avoidfpu__initialize()doing anything (overwrite the new state) which is part offpu__restore().A context switch between step A and B above would save CPU's current FPU registers to
fpu->stateand overwrite the newly prepared state. This looks like a tiny race window but the Kernel Test Robot reported this back in 2016 while we had lazy FPU support. Borislav Petkov made the link between that report and another patch that has been posted. Since the removal of the lazy FPU support, this race goes unnoticed because the warning has been removed.Disable bottom halves around the restore sequence to avoid the race. BH need to be disabled because BH is allowed to run (even with preemption disabled) and might invoke
kernel_fpu_begin()by doing IPsec.[ bp: massage commit message a bit. ]
Signed-off-by Sebastian Andrzej Siewior <[email protected]>Signed-off-by Borislav Petkov <[email protected]>Acked-by Ingo Molnar <[email protected]>Acked-by Thomas Gleixner <[email protected]>Cc Andy Lutomirski <[email protected]>Cc Dave Hansen <[email protected]>Cc "H. Peter Anvin" <[email protected]>Cc "Jason A. Donenfeld" <[email protected]>Cc kvm ML <[email protected]>Cc Paolo Bonzini <[email protected]>Cc Radim Krčmář <[email protected]>Cc Rik van Riel <[email protected]>Cc x86-ml <[email protected]>Signed-off-by Sebastian Andrzej Siewior <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- arch/x86/kernel/fpu/signal.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)arch/x86/kernel/fpu/signal.c +0
-0@@ -342,10 +342,10 @@ static int __fpu__restore_sig(void __usesanitize_restored_xstate (tsk, &env, xfeatures, fx_only); }
arch/x86/kernel/fpu/signal.c static int __fpu__restore_sig(void __use · line 351
Quoted 10 lines
arch/x86/kernel/fpu/signal.c +2
-2+local_bh_disable (); fpu->fpstate_active =1 ; -preempt_disable ();fpu__restore (fpu); -preempt_enable (); +local_bh_enable ();return err; }else {
Any reason why the backport stopped back than at 4.9? I just debugged this out of a 4.4 kernel, and it is needed there as well. I'm happy to propose a backport, would just appreciate a hint if the BH protection is needed also there (my case was without BH).
Thanks,
Jan
Signature · 2 lines
Siemens AG, Corporate Technology, CT RDA IOT SES-DE Corporate Competence Center Embedded Linux
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#5010): https://lists.cip-project.org/g/cip-dev/message/5010
Mute This Topic: https://lists.cip-project.org/mt/75770466/4520388
Group Owner: [email protected]
Unsubscribe: https://lists.cip-project.org/g/cip-dev/leave/8129055/727948398/xyzzy [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-
Greg Kroah-Hartman
maintainerRe: [PATCH 4.9 18/22] x86/fpu: Disable bottom halves while loading FPU registers
Quoted 78 lines · Jan Kiszka
Quoted 77 lines · Greg Kroah-Hartman
4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sebastian Andrzej Siewior <[email protected]>
commit
68239654acafe6aad5a3c1dc7237e60accfebc03upstream.The sequence
fpu->initialized = 1; /* step A */ preempt_disable(); /* step B */ fpu__restore(fpu); preempt_enable();in
__fpu__restore_sig()is racy in regard to a context switch.For 32bit frames,
__fpu__restore_sig()prepares the FPU state withinfpu->state. To ensure that a context switch (switch_fpu_prepare()in particular) does not modifyfpu->stateit usesfpu__drop()which setsfpu->initializedto 0.After
fpu->initializedis cleared, the CPU's FPU state is not saved tofpu->stateduring a context switch. The new state is loaded viafpu__restore(). It gets loaded intofpu->statefrom userland and ensured it is sane.fpu->initializedis then set to 1 in order to avoidfpu__initialize()doing anything (overwrite the new state) which is part offpu__restore().A context switch between step A and B above would save CPU's current FPU registers to
fpu->stateand overwrite the newly prepared state. This looks like a tiny race window but the Kernel Test Robot reported this back in 2016 while we had lazy FPU support. Borislav Petkov made the link between that report and another patch that has been posted. Since the removal of the lazy FPU support, this race goes unnoticed because the warning has been removed.Disable bottom halves around the restore sequence to avoid the race. BH need to be disabled because BH is allowed to run (even with preemption disabled) and might invoke
kernel_fpu_begin()by doing IPsec.[ bp: massage commit message a bit. ]
Signed-off-by Sebastian Andrzej Siewior <[email protected]>Signed-off-by Borislav Petkov <[email protected]>Acked-by Ingo Molnar <[email protected]>Acked-by Thomas Gleixner <[email protected]>Cc Andy Lutomirski <[email protected]>Cc Dave Hansen <[email protected]>Cc "H. Peter Anvin" <[email protected]>Cc "Jason A. Donenfeld" <[email protected]>Cc kvm ML <[email protected]>Cc Paolo Bonzini <[email protected]>Cc Radim Krčmář <[email protected]>Cc Rik van Riel <[email protected]>Cc x86-ml <[email protected]>Signed-off-by Sebastian Andrzej Siewior <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- arch/x86/kernel/fpu/signal.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)arch/x86/kernel/fpu/signal.c +2
-2@@ -342,10 +342,10 @@ static int __fpu__restore_sig(void __usesanitize_restored_xstate (tsk, &env, xfeatures, fx_only); } +local_bh_disable (); fpu->fpstate_active =1 ; -preempt_disable ();fpu__restore (fpu); -preempt_enable (); +local_bh_enable ();return err;
Quoted 8 lines
arch/x86/kernel/fpu/signal.c static int __fpu__restore_sig(void __use · line 351
Quoted 3 lines
arch/x86/kernel/fpu/signal.c +0
-0}else {Any reason why the backport stopped back than at 4.9? I just debugged this out of a 4.4 kernel, and it is needed there as well. I'm happy to propose a backport, would just appreciate a hint if the BH protection is needed also there (my case was without BH).
You are asking about something we did back in 2018. I can't remember what I did last week :)
If you provide a backport that works, I'll be glad to take it. The current patch does not apply cleanly there at all.
thanks,
greg k-h
Sasha Levin
maintainerRe: [PATCH 4.9 18/22] x86/fpu: Disable bottom halves while loading FPU registers
Quoted 88 lines · Greg Kroah-Hartman
Quoted 78 lines · Jan Kiszka
Quoted 77 lines · Greg Kroah-Hartman
4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sebastian Andrzej Siewior <[email protected]>
commit
68239654acafe6aad5a3c1dc7237e60accfebc03upstream.The sequence
fpu->initialized = 1; /* step A */ preempt_disable(); /* step B */ fpu__restore(fpu); preempt_enable();in
__fpu__restore_sig()is racy in regard to a context switch.For 32bit frames,
__fpu__restore_sig()prepares the FPU state withinfpu->state. To ensure that a context switch (switch_fpu_prepare()in particular) does not modifyfpu->stateit usesfpu__drop()which setsfpu->initializedto 0.After
fpu->initializedis cleared, the CPU's FPU state is not saved tofpu->stateduring a context switch. The new state is loaded viafpu__restore(). It gets loaded intofpu->statefrom userland and ensured it is sane.fpu->initializedis then set to 1 in order to avoidfpu__initialize()doing anything (overwrite the new state) which is part offpu__restore().A context switch between step A and B above would save CPU's current FPU registers to
fpu->stateand overwrite the newly prepared state. This looks like a tiny race window but the Kernel Test Robot reported this back in 2016 while we had lazy FPU support. Borislav Petkov made the link between that report and another patch that has been posted. Since the removal of the lazy FPU support, this race goes unnoticed because the warning has been removed.Disable bottom halves around the restore sequence to avoid the race. BH need to be disabled because BH is allowed to run (even with preemption disabled) and might invoke
kernel_fpu_begin()by doing IPsec.[ bp: massage commit message a bit. ]
Signed-off-by Sebastian Andrzej Siewior <[email protected]>Signed-off-by Borislav Petkov <[email protected]>Acked-by Ingo Molnar <[email protected]>Acked-by Thomas Gleixner <[email protected]>Cc Andy Lutomirski <[email protected]>Cc Dave Hansen <[email protected]>Cc "H. Peter Anvin" <[email protected]>Cc "Jason A. Donenfeld" <[email protected]>Cc kvm ML <[email protected]>Cc Paolo Bonzini <[email protected]>Cc Radim Krčmář <[email protected]>Cc Rik van Riel <[email protected]>Cc x86-ml <[email protected]>Signed-off-by Sebastian Andrzej Siewior <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- arch/x86/kernel/fpu/signal.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)arch/x86/kernel/fpu/signal.c +2
-2@@ -342,10 +342,10 @@ static int __fpu__restore_sig(void __usesanitize_restored_xstate (tsk, &env, xfeatures, fx_only); } +local_bh_disable (); fpu->fpstate_active =1 ; -preempt_disable ();fpu__restore (fpu); -preempt_enable (); +local_bh_enable ();return err;Quoted 8 lines
arch/x86/kernel/fpu/signal.c static int __fpu__restore_sig(void __use · line 351
Quoted 3 lines
arch/x86/kernel/fpu/signal.c +0
-0}else {Any reason why the backport stopped back than at 4.9? I just debugged this out of a 4.4 kernel, and it is needed there as well. I'm happy to propose a backport, would just appreciate a hint if the BH protection is needed also there (my case was without BH).
Quoted 5 lines
You are asking about something we did back in 2018. I can't remember what I did last week :)
If you provide a backport that works, I'll be glad to take it. The current patch does not apply cleanly there at all.
The conflict was due to a missing rename back in 4.4: e4a81bfcaae1 ("x86/fpu: Rename fpu::fpstate_active to fpu::initialized").
I've fixed up the patch and queued it for 4.4, thanks for pointing it out Jan!
Signature · 2 lines
Thanks, Sasha
Greg Kroah-Hartman
maintainerPATCH 19/22 ubifs: Handle re-linking of inodes correctly while recovery
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
commit e58725d51fa8da9133f3f1c54170aa2e43056b91 upstream.
UBIFS's recovery code strictly assumes that a deleted inode will never come back, therefore it removes all data which belongs to that inode as soon it faces an inode with link count 0 in the replay list. Before O_TMPFILE this assumption was perfectly fine. With O_TMPFILE it can lead to data loss upon a power-cut.
Consider a journal with entries like:
0: inode X (nlink = 0) /* O_TMPFILE was created */
1: data for inode X /* Someone writes to the temp file */ 2: inode X (nlink = 0) /* inode was changed, xattr, chmod, … */ 3: inode X (nlink = 1) /* inode was re-linked via linkat() */
Upon replay of entry #2 UBIFS will drop all data that belongs to inode X, this will lead to an empty file after mounting.
As solution for this problem, scan the replay list for a re-link entry before dropping data.
--- fs/ubifs/replay.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+)
fs/ubifs/replay.c +37 -0
@@ -209,6 +209,38 @@ static int trun_remove_range(struct ubifs_info *c, struct replay_entry *r)return ubifs_tnc_remove_range (c, &min_key, &max_key); } +/** +* inode_still_linked - check whether inode in question will be re-linked. +* @c: UBIFS file-system description object +* @rino: replay entry to test +* +* O_TMPFILE files can be re-linked, this means link count goes from 0 to 1. +* This case needs special care, otherwise all references to the inode will +* be removed upon the first replay entry of an inode with link count 0 +* is found. +*/ +static bool inode_still_linked (struct ubifs_info *c,struct replay_entry *rino) +{ +struct replay_entry *r; + +ubifs_assert (rino->deletion); +ubifs_assert (key_type (c, &rino->key) ==UBIFS_INO_KEY ); + +/* +* Find the most recent entry for the inode behind @rino and check +* whether it is a deletion. +*/ +list_for_each_entry_reverse (r, &c->replay_list, list) { +ubifs_assert (r->sqnum >= rino->sqnum); +if (key_inum (c, &r->key) ==key_inum (c, &rino->key)) +return r->deletion ==0 ; + + } + +ubifs_assert (0 ); +return false; +} +/** * apply_replay_entry - apply a replay entry to the TNC. * @c: UBIFS file-system description object
@@ -239,6 +271,11 @@ static int apply_replay_entry(struct ubifs_info *c, struct replay_entry *r) {ino_t inum =key_inum (c, &r->key); +if (inode_still_linked (c, r)) { + err =0 ; +break ; + } + err =ubifs_tnc_remove_ino (c, inum);break ; }
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 20/22 panic: avoid deadlocks in re-entrant console drivers
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sergey Senozhatsky <[email protected]>
commit c7c3f05e341a9a2bd1a92993d4f996cfd6e7348e upstream.
Quoted 1 line
From printk()/serial console point of view
panic()is special, because
it may force CPU to re-enter printk() or/and serial console driver. Therefore, some of serial consoles drivers are re-entrant. E.g. 8250:
serial8250_console_write()
{
if (port->sysrq)
locked = 0;
else if (oops_in_progress)
locked = spin_trylock_irqsave(&port->lock, flags);
else
spin_lock_irqsave(&port->lock, flags);
...
}panic() does set oops_in_progress via bust_spinlocks(1), so in theory we should be able to re-enter serial console driver from panic():
CPU0 <NMI> uart_console_write() serial8250_console_write() // if (oops_in_progress) // spin_trylock_irqsave() call_console_drivers() console_unlock() console_flush_on_panic() bust_spinlocks(1) // oops_in_progress++ panic() <NMI/> spin_lock_irqsave(&port->lock, flags) // spin_lock_irqsave() serial8250_console_write() call_console_drivers() console_unlock() printk() ...
However, this does not happen and we deadlock in serial console on port->lock spinlock. And the problem is that console_flush_on_panic() called after bust_spinlocks(0):
void panic(const char *fmt, ...)
{
bust_spinlocks(1);
...
bust_spinlocks(0);
console_flush_on_panic();
...
}bust_spinlocks(0) decrements oops_in_progress, so oops_in_progress can go back to zero. Thus even re-entrant console drivers will simply spin on port->lock spinlock. Given that port->lock may already be locked either by a stopped CPU, or by the very same CPU we execute panic() on (for instance, NMI panic() on printing CPU) the system deadlocks and does not reboot.
Fix this by removing bust_spinlocks(0), so oops_in_progress is always set in panic() now and, thus, re-entrant console drivers will trylock the port->lock instead of spinning on it forever, when we call them from console_flush_on_panic().
--- kernel/panic.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
kernel/panic.c +5 -1
@@ -13,6 +13,7 @@#include <linux/kmsg_dump.h> #include <linux/kallsyms.h> #include <linux/notifier.h> +#include <linux/vt_kern.h> #include <linux/module.h> #include <linux/random.h> #include <linux/ftrace.h>
@@ -228,7 +229,10 @@ void panic(const char *fmt, ...)if (_crash_kexec_post_notifiers)__crash_kexec (NULL ); -bust_spinlocks (0 ); +#ifdef CONFIG_VT +unblank_screen (); +#endif +console_unblank ();/* * We may have ended up stopping the CPU holding the lock (in
Greg Kroah-Hartman
maintainerPATCH 21/22 proc/sysctl: dont return ENOMEM on lookup when a table is unregistering
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ivan Delalande <[email protected]>
commit ea5751ccd665a2fd1b24f9af81f6167f0718c5f6 upstream.
proc_sys_lookup can fail with ENOMEM instead of ENOENT when the corresponding sysctl table is being unregistered. In our case we see this upon opening /proc/sys/net/*/conf files while network interfaces are being deleted, which confuses our configuration daemon.
The problem was successfully reproduced and this fix tested on v4.9.122 and v4.20-rc6.
v2: return ERR_PTRs in all cases when proc_sys_make_inode fails instead of mixing them with NULL. Thanks Al Viro for the feedback.
--- fs/proc/proc_sysctl.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-)
fs/proc/proc_sysctl.c +6 -7
@@ -466,7 +466,7 @@ static struct inode *proc_sys_make_inode inode =new_inode (sb);if (!inode) - goto out; +return ERR_PTR (-ENOMEM ); inode->i_ino =get_next_ino ();
@@ -476,8 +476,7 @@ static struct inode *proc_sys_make_inodeif (unlikely (head->unregistering)) {spin_unlock (&sysctl_lock);iput (inode); - inode =NULL ; - goto out; +return ERR_PTR (-ENOENT ); } ei->sysctl = head; ei->sysctl_entry = table;
@@ -502,7 +501,6 @@ static struct inode *proc_sys_make_inodeif (root->set_ownership) root->set_ownership (head, table, &inode->i_uid, &inode->i_gid); -out:return inode; }
@@ -551,10 +549,11 @@ static struct dentry *proc_sys_lookup(st goto out; } - err =ERR_PTR (-ENOMEM ); inode =proc_sys_make_inode (dir->i_sb, h ? h : head, p); -if (!inode) +if (IS_ERR (inode)) { + err =ERR_CAST (inode); goto out; + } err =NULL ;d_set_d_op (dentry, &proc_sys_dentry_operations);
@@ -687,7 +686,7 @@ static bool proc_sys_fill_cache(struct freturn false;if (d_in_lookup (child)) { inode =proc_sys_make_inode (dir->d_sb, head, table); -if (!inode) { +if (IS_ERR (inode)) {d_lookup_done (child);dput (child);return false;
Greg Kroah-Hartman
maintainerPATCH 22/22 drm/ioctl: Fix Spectre v1 vulnerabilities
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gustavo A. R. Silva <[email protected]>
commit 505b5240329b922f21f91d5b5d1e535c805eca6d upstream.
nr is indirectly controlled by user-space, hence leading to a potential exploitation of the Spectre variant 1 vulnerability.
This issue was detected with the help of Smatch:
drivers/gpu/drm/drm_ioctl.c:805 drm_ioctl() warn: potential spectre issue 'dev->driver->ioctls' [r] drivers/gpu/drm/drm_ioctl.c:810 drm_ioctl() warn: potential spectre issue 'drm_ioctls' [r] (local cap) drivers/gpu/drm/drm_ioctl.c:892 drm_ioctl_flags() warn: potential spectre issue 'drm_ioctls' [r] (local cap)
Fix this by sanitizing nr before using it to index dev->driver->ioctls and drm_ioctls.
Notice that given that speculation windows are large, the policy is to kill the speculation on the first load and not worry if it can be completed with a dependent load/store [1].
[1] https://marc.info/?l=linux-kernel&m=152449131114778&w=2
--- drivers/gpu/drm/drm_ioctl.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
drivers/gpu/drm/drm_ioctl.c +8 -2
@@ -36,6 +36,7 @@#include <linux/pci.h> #include <linux/export.h> +#include <linux/nospec.h> /** * DOC: getunique and setversion story
@@ -668,13 +669,17 @@ long drm_ioctl(struct file *filp,if (is_driver_ioctl) {/* driver ioctl */ -if (nr -DRM_COMMAND_BASE >= dev->driver->num_ioctls) +unsigned int index = nr -DRM_COMMAND_BASE ; + +if (index >= dev->driver->num_ioctls) goto err_i1; - ioctl = &dev->driver->ioctls[nr -DRM_COMMAND_BASE ]; + index =array_index_nospec (index, dev->driver->num_ioctls); + ioctl = &dev->driver->ioctls[index]; }else {/* core ioctl */ if (nr >=DRM_CORE_IOCTL_COUNT ) goto err_i1; + nr =array_index_nospec (nr,DRM_CORE_IOCTL_COUNT ); ioctl = &drm_ioctls[nr]; }
@@ -770,6 +775,7 @@ bool drm_ioctl_flags(unsigned int nr, unif (nr >=DRM_CORE_IOCTL_COUNT )return false; + nr =array_index_nospec (nr,DRM_CORE_IOCTL_COUNT ); *flags = drm_ioctls[nr].flags;return true;
Quoted 4 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.148 release. There are 22 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.
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
Summary
------------------------------------------------------------------------
kernel: 4.9.148-rc1
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-4.9.y
git commit: 90e2ba75f3b479bb8fb03958c1882389aeb50c45
git describe: v4.9.147-23-g90e2ba75f3b4
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-4.9-oe/build/v4.9.147-23-g90e2ba75f3b4
No regressions (compared to build v4.9.146-62-gbbfc30f29cb3)
No fixes (compared to build v4.9.146-62-gbbfc30f29cb3)
Ran 21367 total tests in the following environments and test suites.
Environments
--------------
- dragonboard-410c - arm64
- hi6220-hikey - arm64
- i386
- juno-r2 - arm64
- qemu_arm
- qemu_arm64
- qemu_i386
- qemu_x86_64
- x15 - arm
- x86_64
Test Suites
-----------
* boot
* install-android-platform-tools-r2600
* kselftest
* libhugetlbfs
* ltp-cap_bounds-tests
* ltp-containers-tests
* ltp-cpuhotplug-tests
* ltp-cve-tests
* ltp-fcntl-locktests-tests
* ltp-filecaps-tests
* ltp-fs-tests
* ltp-fs_bind-tests
* ltp-fs_perms_simple-tests
* ltp-fsx-tests
* ltp-hugetlb-tests
* ltp-io-tests
* ltp-ipc-tests
* ltp-math-tests
* ltp-nptl-tests
* ltp-pty-tests
* ltp-sched-tests
* ltp-securebits-tests
* ltp-syscalls-tests
* ltp-timers-tests
* spectre-meltdown-checker-test
* ltp-open-posix-tests
* kselftest-vsyscall-mode-native
* kselftest-vsyscall-mode-none
Signature · 2 lines
Linaro LKFT https://lkft.linaro.org
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.148 release. There are 22 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 Dec 30 11:31:00 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.9.148-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.9.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test systems. No dmesg regressions.
thanks,
-- Shuah
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.148 release. There are 22 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 Dec 30 11:31:00 UTC 2018. Anything received after that time might be too late.
Build results:
total: 171 pass: 171 fail: 0 Qemu test results: total: 305 pass: 305 fail: 0
Details are available at https://kerneltests.org/builders/.
Guenter