4.9.276-rc1 review
Subsystems (4)
Greg Kroah-Hartman
maintainerPATCH 183/245 tracing: Do not reference char * as a string in histograms
In reply to Greg Kroah-HartmanFrom: Steven Rostedt (VMware) <[email protected]>
commit 704adfb5a9978462cd861f170201ae2b5e3d3a80 upstream.
The histogram logic was allowing events with char * pointers to be used as normal strings. But it was easy to crash the kernel with:
# echo 'hist:keys=filename' > events/syscalls/sys_enter_openat/trigger
And open some files, and boom!
BUG: unable to handle page fault for address: 00007f2ced0c3280 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page PGD 1173fa067 P4D 1173fa067 PUD 1171b6067 PMD 1171dd067 PTE 0 Oops: 0000 [#1] PREEMPT SMP CPU: 6 PID: 1810 Comm: cat Not tainted 5.13.0-rc5-test+ #61 Hardware name: Hewlett-Packard HP Compaq Pro 6300 SFF/339A, BIOS K01 v03.03 07/14/2016 RIP: 0010:strlen+0x0/0x20 Code: f6 82 80 2a 0b a9 20 74 11 0f b6 50 01 48 83 c0 01 f6 82 80 2a 0b
a9 20 75 ef c3 66 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 <80> 3f 00 74 10 48 89 f8 48 83 c0 01 80 38 00 75 f7 48 29 f8 c3
RSP: 0018:ffffbdbf81567b50 EFLAGS: 00010246
RAX: 0000000000000003 RBX: ffff93815cdb3800 RCX: ffff9382401a22d0
RDX: 0000000000000100 RSI: 0000000000000000 RDI: 00007f2ced0c3280
RBP: 0000000000000100 R08: ffff9382409ff074 R09: ffffbdbf81567c98
R10: ffff9382409ff074 R11: 0000000000000000 R12: ffff9382409ff074
R13: 0000000000000001 R14: ffff93815a744f00 R15: 00007f2ced0c3280
FS: 00007f2ced0f8580(0000) GS:ffff93825a800000(0000)
knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007f2ced0c3280 CR3: 0000000107069005 CR4: 00000000001706e0
Call Trace: event_hist_trigger+0x463/0x5f0 ? find_held_lock+0x32/0x90 ? sched_clock_cpu+0xe/0xd0 ? lock_release+0x155/0x440 ? kernel_init_free_pages+0x6d/0x90 ? preempt_count_sub+0x9b/0xd0 ? kernel_init_free_pages+0x6d/0x90 ? get_page_from_freelist+0x12c4/0x1680 ? __rb_reserve_next+0xe5/0x460 ? ring_buffer_lock_reserve+0x12a/0x3f0 event_triggers_call+0x52/0xe0 ftrace_syscall_enter+0x264/0x2c0 syscall_trace_enter.constprop.0+0x1ee/0x210 do_syscall_64+0x1c/0x80 entry_SYSCALL_64_after_hwframe+0x44/0xae
Where it triggered a fault on strlen(key) where key was the filename.
The reason is that filename is a char * to user space, and the histogram code just blindly dereferenced it, with obvious bad results.
I originally tried to use strncpy_from_user/kernel_nofault() but found that there's other places that its dereferenced and not worth the effort.
Just do not allow "char *" to act like strings.
--- kernel/trace/trace_events_hist.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
kernel/trace/trace_events_hist.c +3 -3
@@ -374,7 +374,9 @@ static struct hist_field *create_hist_fiif (WARN_ON_ONCE (!field)) goto out; -if (is_string_field (field)) { +/* Pointers to strings are just pointers and dangerous to dereference */ +if (is_string_field (field) && + (field->filter_type !=FILTER_PTR_STRING )) { flags |=HIST_FIELD_FL_STRING ;if (field->filter_type ==FILTER_STATIC_STRING )
@@ -863,8 +865,6 @@ static inline void add_to_key(char *comp field = key_field->field;if (field->filter_type ==FILTER_DYN_STRING ) size = *(u32 *)(rec + field->offset) >>16 ; -else if (field->filter_type ==FILTER_PTR_STRING ) - size =strlen (key);else if (field->filter_type ==FILTER_STATIC_STRING ) size = field->size;
Greg Kroah-Hartman
maintainerPATCH 184/245 fscrypt: dont ignore minor_hash when hash is 0
In reply to Greg Kroah-HartmanFrom: Eric Biggers <[email protected]>
commit 77f30bfcfcf484da7208affd6a9e63406420bf91 upstream.
When initializing a no-key name, fscrypt_fname_disk_to_usr() sets the minor_hash to 0 if the (major) hash is 0.
This doesn't make sense because 0 is a valid hash code, so we shouldn't ignore the filesystem-provided minor_hash in that case. Fix this by removing the special case for 'hash == 0'.
This is an old bug that appears to have originated when the encryption code in ext4 and f2fs was moved into fs/crypto/. The original ext4 and f2fs code passed the hash by pointer instead of by value. So 'if (hash)' actually made sense then, as it was checking whether a pointer was NULL. But now the hashes are passed by value, and filesystems just pass 0 for any hashes they don't have. There is no need to handle this any differently from the hashes actually being 0.
It is difficult to reproduce this bug, as it only made a difference in the case where a filename's 32-bit major hash happened to be 0. However, it probably had the largest chance of causing problems on ubifs, since ubifs uses minor_hash to do lookups of no-key names, in addition to using it as a readdir cookie. ext4 only uses minor_hash as a readdir cookie, and f2fs doesn't use minor_hash at all.
--- fs/crypto/fname.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
fs/crypto/fname.c +2 -6
@@ -294,12 +294,8 @@ int fscrypt_fname_disk_to_usr(struct ino oname->name);return 0 ; } -if (hash) { -memcpy (buf, &hash,4 ); -memcpy (buf +4 , &minor_hash,4 ); - }else { -memset (buf,0 ,8 ); - } +memcpy (buf, &hash,4 ); +memcpy (buf +4 , &minor_hash,4 );memcpy (buf +8 , iname->name + ((iname->len -17 ) & ~15 ),16 ); oname->name[0 ] ='_' ; oname->len =1 +digest_encode (buf,24 , oname->name +1 );
Greg Kroah-Hartman
maintainerPATCH 185/245 tty: serial: fsl_lpuart: fix the potential risk of division or modulo by zero
In reply to Greg Kroah-HartmanFrom: Sherry Sun <[email protected]>
[ Upstream commit fcb10ee27fb91b25b68d7745db9817ecea9f1038 ]
We should be very careful about the register values that will be used for division or modulo operations, althrough the possibility that the UARTBAUD register value is zero is very low, but we had better to deal with the "bad data" of hardware in advance to avoid division or modulo by zero leading to undefined kernel behavior.
--- drivers/tty/serial/fsl_lpuart.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/tty/serial/fsl_lpuart.c +3 -0
@@ -1766,6 +1766,9 @@ lpuart32_console_get_options(struct lpuart_port *sport, int *baud, bd =lpuart32_read (sport->port.membase +UARTBAUD ); bd &=UARTBAUD_SBR_MASK ; +if (!bd) +return ; + sbr = bd; uartclk =clk_get_rate (sport->clk);/*
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 186/245 misc/libmasm/module: Fix two use after free in ibmasm_init_one
In reply to Greg Kroah-HartmanFrom: Lv Yunlong <[email protected]>
[ Upstream commit 7272b591c4cb9327c43443f67b8fbae7657dd9ae ]
In ibmasm_init_one, it calls ibmasm_init_remote_input_dev(). Inside ibmasm_init_remote_input_dev, mouse_dev and keybd_dev are allocated by input_allocate_device(), and assigned to sp->remote.mouse_dev and sp->remote.keybd_dev respectively.
In the err_free_devices error branch of ibmasm_init_one, mouse_dev and keybd_dev are freed by input_free_device(), and return error. Then the execution runs into error_send_message error branch of ibmasm_init_one, where ibmasm_free_remote_input_dev(sp) is called to unregister the freed sp->remote.mouse_dev and sp->remote.keybd_dev.
My patch add a "error_init_remote" label to handle the error of ibmasm_init_remote_input_dev(), to avoid the uaf bugs.
--- drivers/misc/ibmasm/module.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/misc/ibmasm/module.c +3 -2
@@ -123,7 +123,7 @@ static int ibmasm_init_one(struct pci_dev *pdev, const struct pci_device_id *id) result =ibmasm_init_remote_input_dev (sp);if (result) {dev_err (sp->dev,"Failed to initialize remote queue\n" ); - goto error_send_message; + goto error_init_remote; } result =ibmasm_send_driver_vpd (sp);
@@ -143,8 +143,9 @@ static int ibmasm_init_one(struct pci_dev *pdev, const struct pci_device_id *id)return 0 ; error_send_message: -disable_sp_interrupts (sp->base_address);ibmasm_free_remote_input_dev (sp); +error_init_remote: +disable_sp_interrupts (sp->base_address);free_irq (sp->irq, (void *)sp); error_request_irq:iounmap (sp->base_address);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 187/245 Revert "ALSA: bebob/oxfw: fix Kconfig entry for Mackie d.2 Pro"
In reply to Greg Kroah-HartmanFrom: Takashi Sakamoto <[email protected]>
[ Upstream commit 5d6fb80a142b5994355ce675c517baba6089d199 ]
This reverts commit 0edabdfe89581669609eaac5f6a8d0ae6fe95e7f.
I've explained that optional FireWire card for d.2 is also built-in to d.2 Pro, however it's wrong. The optional card uses DM1000 ASIC and has 'Mackie DJ Mixer' in its model name of configuration ROM. On the other hand, built-in FireWire card for d.2 Pro and d.4 Pro uses OXFW971 ASIC and has 'd.Pro' in its model name according to manuals and user experiences. The former card is not the card for d.2 Pro. They are similar in appearance but different internally.
--- sound/firewire/Kconfig | 4 ++-- sound/firewire/bebob/bebob.c | 2 +- sound/firewire/oxfw/oxfw.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-)
sound/firewire/Kconfig +2 -2
@@ -36,7 +36,7 @@ config SND_OXFW * Mackie(Loud) Onyx-i series (former models) * Mackie(Loud) Onyx Satellite * Mackie(Loud) Tapco Link.Firewire - * Mackie(Loud) d.4 pro + * Mackie(Loud) d.2 pro/d.4 pro (built-in FireWire card with OXFW971 ASIC) * Mackie(Loud) U.420/U.420d * TASCAM FireOne * Stanton Controllers & Systems 1 Deck/Mixer
@@ -82,7 +82,7 @@ config SND_BEBOB * PreSonus FIREBOX/FIREPOD/FP10/Inspire1394 * BridgeCo RDAudio1/Audio5 * Mackie Onyx 1220/1620/1640 (FireWire I/O Card) - * Mackie d.2 (FireWire Option) and d.2 Pro + * Mackie d.2 (optional FireWire card with DM1000 ASIC) * Stanton FinalScratch 2 (ScratchAmp) * Tascam IF-FW/DM * Behringer XENIX UFX 1204/1604
sound/firewire/bebob/bebob.c +1 -1
@@ -414,7 +414,7 @@ static const struct ieee1394_device_id bebob_id_table[] = {SND_BEBOB_DEV_ENTRY (VEN_BRIDGECO ,0x00010049 , &spec_normal),/* Mackie, Onyx 1220/1620/1640 (Firewire I/O Card) */ SND_BEBOB_DEV_ENTRY (VEN_MACKIE2 ,0x00010065 , &spec_normal), -// Mackie, d.2 (Firewire option card) and d.2 Pro (the card is built-in). +// Mackie, d.2 (optional Firewire card with DM1000). SND_BEBOB_DEV_ENTRY (VEN_MACKIE1 ,0x00010067 , &spec_normal),/* Stanton, ScratchAmp */ SND_BEBOB_DEV_ENTRY(VEN_STANTON, 0x00000001, &spec_normal),
sound/firewire/oxfw/oxfw.c +1 -1
@@ -405,7 +405,7 @@ static const struct ieee1394_device_id oxfw_id_table[] = {* Onyx-i series (former models): 0x081216 * Mackie Onyx Satellite: 0x00200f * Tapco LINK.firewire 4x6: 0x000460 -* d.4 pro: Unknown +* d.2 pro/d.4 pro (built-in card): Unknown * U.420: Unknown * U.420d: Unknown */
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 188/245 scsi: lpfc: Fix "Unexpected timeout" error in direct attach topology
In reply to Greg Kroah-HartmanFrom: James Smart <[email protected]>
[ Upstream commit e30d55137edef47434c40d7570276a0846fe922c ]
An 'unexpected timeout' message may be seen in a point-2-point topology. The message occurs when a PLOGI is received before the driver is notified of FLOGI completion. The FLOGI completion failure causes discovery to be triggered for a second time. The discovery timer is restarted but no new discovery activity is initiated, thus the timeout message eventually appears.
In point-2-point, when discovery has progressed before the FLOGI completion is processed, it is not a failure. Add code to FLOGI completion to detect that discovery has progressed and exit the FLOGI handling (noop'ing it).
--- drivers/scsi/lpfc/lpfc_els.c | 9 +++++++++ 1 file changed, 9 insertions(+)
drivers/scsi/lpfc/lpfc_els.c +9 -0
@@ -1159,6 +1159,15 @@ stop_rr_fcf_flogi: phba->fcf.fcf_redisc_attempted =0 ;/* reset */ goto out; } + }else if (vport->port_state >LPFC_FLOGI && + vport->fc_flag &FC_PT2PT ) { +/* +* In a p2p topology, it is possible that discovery has +* already progressed, and this completion can be ignored. +* Recheck the indicated topology. +*/ +if (!sp->cmn.fPort) + goto out; } flogifail:
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 189/245 tty: serial: 8250: serial_cs: Fix a memory leak in error handling path
In reply to Greg Kroah-HartmanFrom: Christophe JAILLET <[email protected]>
[ Upstream commit fad92b11047a748c996ebd6cfb164a63814eeb2e ]
In the probe function, if the final 'serial_config()' fails, 'info' is leaking.
Add a resource handling path to free this memory.
--- drivers/tty/serial/8250/serial_cs.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)
drivers/tty/serial/8250/serial_cs.c +10 -1
@@ -305,6 +305,7 @@ static int serial_resume(struct pcmcia_device *link)static int serial_probe (struct pcmcia_device *link) {struct serial_info *info; +int ret;dev_dbg (&link->dev,"serial_attach()\n" );
@@ -319,7 +320,15 @@ static int serial_probe(struct pcmcia_device *link)if (do_sound) link->config_flags |=CONF_ENABLE_SPKR ; -return serial_config (link); + ret =serial_config (link); +if (ret) + goto free_info; + +return 0 ; + +free_info: +kfree (info); +return ret; }static void serial_detach (struct pcmcia_device *link)
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 190/245 fs/jfs: Fix missing error code in lmLogInit()
In reply to Greg Kroah-HartmanFrom: Jiapeng Chong <[email protected]>
[ Upstream commit 492109333c29e1bb16d8732e1d597b02e8e0bf2e ]
The error code is missing in this code scenario, add the error code '-EINVAL' to the return value 'rc.
Eliminate the follow smatch warning:
fs/jfs/jfs_logmgr.c:1327 lmLogInit() warn: missing error code 'rc'.
--- fs/jfs/jfs_logmgr.c | 1 + 1 file changed, 1 insertion(+)
fs/jfs/jfs_logmgr.c +1 -0
@@ -1338,6 +1338,7 @@ int lmLogInit(struct jfs_log * log) }else {if (memcmp (logsuper->uuid, log->uuid,16 )) {jfs_warn ("wrong uuid on JFS log device" ); + rc = -EINVAL ; goto errout20; } log->size =le32_to_cpu (logsuper->size);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 191/245 scsi: iscsi: Add iscsi_cls_conn refcount helpers
In reply to Greg Kroah-HartmanFrom: Mike Christie <[email protected]>
[ Upstream commit b1d19e8c92cfb0ded180ef3376c20e130414e067 ]
There are a couple places where we could free the iscsi_cls_conn while it's still in use. This adds some helpers to get/put a refcount on the struct and converts an exiting user. Subsequent commits will then use the helpers to fix 2 bugs in the eh code.
--- drivers/scsi/libiscsi.c | 7 ++----- drivers/scsi/scsi_transport_iscsi.c | 12 ++++++++++++ include/scsi/scsi_transport_iscsi.h | 2 ++ 3 files changed, 16 insertions(+), 5 deletions(-)
drivers/scsi/libiscsi.c +2 -5
@@ -1384,7 +1384,6 @@ void iscsi_session_failure(struct iscsi_session *session, enum iscsi_err err) {struct iscsi_conn *conn; -struct device *dev;spin_lock_bh (&session->frwd_lock); conn = session->leadconn;
@@ -1393,10 +1392,8 @@ void iscsi_session_failure(struct iscsi_session *session,return ; } - dev =get_device (&conn->cls_conn->dev); +iscsi_get_conn (conn->cls_conn);spin_unlock_bh (&session->frwd_lock); -if (!dev) -return ;/* * if the host is being removed bypass the connection * recovery initialization because we are going to kill
@@ -1406,7 +1403,7 @@ void iscsi_session_failure(struct iscsi_session *session,iscsi_conn_error_event (conn->cls_conn, err); elseiscsi_conn_failure (conn ,err ); -put_device (dev); +iscsi_put_conn (conn->cls_conn); }EXPORT_SYMBOL_GPL (iscsi_session_failure);
drivers/scsi/scsi_transport_iscsi.c +12 -0
@@ -2327,6 +2327,18 @@ int iscsi_destroy_conn(struct iscsi_cls_conn *conn) }EXPORT_SYMBOL_GPL (iscsi_destroy_conn); +void iscsi_put_conn (struct iscsi_cls_conn *conn) +{ +put_device (&conn->dev); +} +EXPORT_SYMBOL_GPL (iscsi_put_conn); + +void iscsi_get_conn (struct iscsi_cls_conn *conn) +{ +get_device (&conn->dev); +} +EXPORT_SYMBOL_GPL (iscsi_get_conn); +/* * iscsi interface functions */
include/scsi/scsi_transport_iscsi.h +2 -0
@@ -437,6 +437,8 @@ extern void iscsi_free_session(struct iscsi_cls_session *session);extern int iscsi_destroy_session (struct iscsi_cls_session *session);extern struct iscsi_cls_conn *iscsi_create_conn (struct iscsi_cls_session *sess,int dd_size,uint32_t cid); +extern void iscsi_put_conn (struct iscsi_cls_conn *conn); +extern void iscsi_get_conn (struct iscsi_cls_conn *conn);extern int iscsi_destroy_conn (struct iscsi_cls_conn *conn);extern void iscsi_unblock_session (struct iscsi_cls_session *session);extern void iscsi_block_session (struct iscsi_cls_session *session);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 192/245 mfd: da9052/stmpe: Add and modify MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Zou Wei <[email protected]>
[ Upstream commit 4700ef326556ed74aba188f12396740a8c1c21dd ]
This patch adds/modifies MODULE_DEVICE_TABLE definition which generates correct modalias for automatic loading of this driver when it is built as an external module.
--- drivers/mfd/da9052-i2c.c | 1 + drivers/mfd/stmpe-i2c.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-)
drivers/mfd/da9052-i2c.c +1 -0
@@ -118,6 +118,7 @@ static const struct i2c_device_id da9052_i2c_id[] = { {"da9053-bc", DA9053_BC}, {} }; +MODULE_DEVICE_TABLE (i2c, da9052_i2c_id);#ifdef CONFIG_OF static const struct of_device_id dialog_dt_ids[] = {
drivers/mfd/stmpe-i2c.c +1 -1
@@ -109,7 +109,7 @@ static const struct i2c_device_id stmpe_i2c_id[] = { { "stmpe2403", STMPE2403 }, { } }; -MODULE_DEVICE_TABLE(i2c, stmpe_id); +MODULE_DEVICE_TABLE(i2c, stmpe_i2c_id); static struct i2c_driver stmpe_i2c_driver = { .driver = {
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 193/245 s390/sclp_vt220: fix console name to match device
In reply to Greg Kroah-HartmanFrom: Valentin Vidic <[email protected]>
[ Upstream commit b7d91d230a119fdcc334d10c9889ce9c5e15118b ]
Console name reported in /proc/consoles:
ttyS1 -W- (EC p ) 4:65
does not match the char device name:
crw--w---- 1 root root 4, 65 May 17 12:18 /dev/ttysclp0
so debian-installer inside a QEMU s390x instance gets confused and fails to start with the following error:
steal-ctty: No such file or directory
--- arch/s390/kernel/setup.c | 2 +- drivers/s390/char/sclp_vt220.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
arch/s390/kernel/setup.c +1 -1
@@ -137,7 +137,7 @@ static void __init set_preferred_console(void)else if (CONSOLE_IS_3270 )add_preferred_console ("tty3270" ,0 ,NULL );else if (CONSOLE_IS_VT220 ) -add_preferred_console ("ttyS" ,1 ,NULL ); +add_preferred_console ("ttysclp" ,0 ,NULL );else if (CONSOLE_IS_HVC )add_preferred_console ("hvc" ,0 ,NULL ); }
drivers/s390/char/sclp_vt220.c +2 -2
@@ -34,8 +34,8 @@#define SCLP_VT220_MINOR 65#define SCLP_VT220_DRIVER_NAME "sclp_vt220"#define SCLP_VT220_DEVICE_NAME "ttysclp" -#define SCLP_VT220_CONSOLE_NAME "ttyS" -#define SCLP_VT220_CONSOLE_INDEX 1/* console=ttyS1 */ +#define SCLP_VT220_CONSOLE_NAME "ttysclp" +#define SCLP_VT220_CONSOLE_INDEX 0/* console=ttysclp0 */ /* Representation of a single write request */ struct sclp_vt220_request {
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 194/245 ALSA: sb: Fix potential double-free of CSP mixer elements
In reply to Greg Kroah-HartmanFrom: Takashi Iwai <[email protected]>
[ Upstream commit c305366a37441c2ac90b08711cb6f032b43672f2 ]
snd_sb_qsound_destroy() contains the calls of removing the previously created mixer controls, but it doesn't clear the pointers. As snd_sb_qsound_destroy() itself may be repeatedly called via ioctl, this could lead to double-free potentially.
Fix it by clearing the struct fields properly afterwards.
--- sound/isa/sb/sb16_csp.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
sound/isa/sb/sb16_csp.c +6 -2
@@ -1086,10 +1086,14 @@ static void snd_sb_qsound_destroy(struct snd_sb_csp * p) card = p->chip->card;down_write (&card->controls_rwsem); -if (p->qsound_switch) +if (p->qsound_switch) {snd_ctl_remove (card, p->qsound_switch); -if (p->qsound_space) + p->qsound_switch =NULL ; + } +if (p->qsound_space) {snd_ctl_remove (card, p->qsound_space); + p->qsound_space =NULL ; + }up_write (&card->controls_rwsem);/* cancel pending transfer of QSound parameters */
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 195/245 powerpc/ps3: Add dma_mask to ps3_dma_region
In reply to Greg Kroah-HartmanFrom: Geoff Levand <[email protected]>
[ Upstream commit 9733862e50fdba55e7f1554e4286fcc5302ff28e ]
Commit f959dcd6ddfd29235030e8026471ac1b022ad2b0 (dma-direct: Fix potential NULL pointer dereference) added a null check on the dma_mask pointer of the kernel's device structure.
Add a dma_mask variable to the ps3_dma_region structure and set the device structure's dma_mask pointer to point to this new variable.
Fixes runtime errors like these:
# WARNING: Fixes tag on line 10 doesn't match correct format # WARNING: Fixes tag on line 10 doesn't match correct format
ps3_system_bus_match:349: dev=8.0(sb_01), drv=8.0(ps3flash): match
WARNING: CPU: 0 PID: 1 at kernel/dma/mapping.c:151 .dma_map_page_attrs+0x34/0x1e0 ps3flash sb_01: ps3stor_setup:193: map DMA region failed
--- arch/powerpc/include/asm/ps3.h | 2 ++ arch/powerpc/platforms/ps3/mm.c | 12 ++++++++++++ 2 files changed, 14 insertions(+)
arch/powerpc/include/asm/ps3.h +2 -0
@@ -83,6 +83,7 @@ struct ps3_dma_region_ops;* @bus_addr: The 'translated' bus address of the region. * @len: The length in bytes of the region. * @offset: The offset from the start of memory of the region. +* @dma_mask: Device dma_mask. * @ioid: The IOID of the device who owns this region * @chunk_list: Opaque variable used by the ioc page manager. * @region_ops: struct ps3_dma_region_ops - dma region operations
@@ -97,6 +98,7 @@ struct ps3_dma_region {enum ps3_dma_region_type region_type;unsigned long len;unsigned long offset; +u64 dma_mask;/* driver variables (set by ps3_dma_region_create) */ unsigned long bus_addr;
arch/powerpc/platforms/ps3/mm.c +12 -0
@@ -18,6 +18,7 @@* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include <linux/dma-mapping.h> #include <linux/kernel.h> #include <linux/export.h> #include <linux/memblock.h>
@@ -1132,6 +1133,7 @@ int ps3_dma_region_init(struct ps3_system_bus_device *dev, enum ps3_dma_region_type region_type, void *addr, unsigned long len) { unsigned long lpar_addr; +int result; lpar_addr = addr ?ps3_mm_phys_to_lpar (__pa (addr)) :0 ;
@@ -1143,6 +1145,16 @@ int ps3_dma_region_init(struct ps3_system_bus_device *dev, r->offset -= map.r1.offset; r->len = len ? len :_ALIGN_UP (map.total,1 << r->page_size); + dev->core.dma_mask = &r->dma_mask; + + result =dma_set_mask_and_coherent (&dev->core,DMA_BIT_MASK (32 )); + +if (result <0 ) { +dev_err (&dev->core,"%s:%d: dma_set_mask_and_coherent failed: %d\n" , + __func__, __LINE__, result); +return result; + } +switch (dev->dev_type) {case PS3_DEVICE_TYPE_SB : r->region_ops = (USE_DYNAMIC_DMA )
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 196/245 gpio: zynq: Check return value of pm_runtime_get_sync
In reply to Greg Kroah-HartmanFrom: Srinivas Neeli <[email protected]>
[ Upstream commit a51b2fb94b04ab71e53a71b9fad03fa826941254 ]
Return value of "pm_runtime_get_sync" API was neither captured nor checked. Fixed it by capturing the return value and then checking for any warning.
Addresses-Coverity: "check_return"
--- drivers/gpio/gpio-zynq.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/gpio/gpio-zynq.c +4 -1
@@ -778,8 +778,11 @@ err_pm_dis:static int zynq_gpio_remove (struct platform_device *pdev) {struct zynq_gpio *gpio =platform_get_drvdata (pdev); +int ret; -pm_runtime_get_sync (&pdev->dev); + ret =pm_runtime_get_sync (&pdev->dev); +if (ret <0 ) +dev_warn (&pdev->dev,"pm_runtime_get_sync() Failed\n" );gpiochip_remove (&gpio->chip);clk_disable_unprepare (gpio->clk);device_set_wakeup_capable (&pdev->dev,0 );
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 197/245 ALSA: ppc: fix error return code in snd_pmac_probe()
In reply to Greg Kroah-HartmanFrom: Yang Yingliang <[email protected]>
[ Upstream commit 80b9c1be567c3c6bbe0d4b290af578e630485b5d ]
If snd_pmac_tumbler_init() or snd_pmac_tumbler_post_init() fails, snd_pmac_probe() need return error code.
--- sound/ppc/powermac.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
sound/ppc/powermac.c +5 -1
@@ -90,7 +90,11 @@ static int snd_pmac_probe(struct platform_device *devptr)sprintf (card->shortname,"PowerMac %s" , name_ext);sprintf (card->longname,"%s (Dev %d) Sub-frame %d" , card->shortname, chip->device_id, chip->subframe); -if (snd_pmac_tumbler_init (chip) <0 ||snd_pmac_tumbler_post_init () <0 ) + err =snd_pmac_tumbler_init (chip); +if (err <0 ) + goto __error; + err =snd_pmac_tumbler_post_init (); +if (err <0 ) goto __error;break ;case PMAC_AWACS :
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 198/245 selftests/powerpc: Fix "no_handler" EBB selftest
In reply to Greg Kroah-HartmanFrom: Athira Rajeev <[email protected]>
[ Upstream commit 45677c9aebe926192e59475b35a1ff35ff2d4217 ]
The "no_handler_test" in ebb selftests attempts to read the PMU registers twice via helper function "dump_ebb_state". First dump is just before closing of event and the second invocation is done after closing of the event. The original intention of second dump_ebb_state was to dump the state of registers at the end of the test when the counters are frozen. But this will be achieved with the first call itself since sample period is set to low value and PMU will be frozen by then. Hence patch removes the dump which was done before closing of the event.
--- tools/testing/selftests/powerpc/pmu/ebb/no_handler_test.c | 2 -- 1 file changed, 2 deletions(-)
tools/testing/selftests/powerpc/pmu/ebb/no_handler_test.c +0 -2
@@ -50,8 +50,6 @@ static int no_handler_test(void)event_close (&event); -dump_ebb_state (); -/* The real test is that we never took an EBB at 0x0 */ return 0 ;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 199/245 ASoC: soc-core: Fix the error return code in snd_soc_of_parse_audio_routing()
In reply to Greg Kroah-HartmanFrom: Zhen Lei <[email protected]>
[ Upstream commit 7d3865a10b9ff2669c531d5ddd60bf46b3d48f1e ]
When devm_kcalloc() fails, the error code -ENOMEM should be returned instead of -EINVAL.
--- sound/soc/soc-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/soc-core.c +1 -1
@@ -3644,7 +3644,7 @@ int snd_soc_of_parse_audio_routing(struct snd_soc_card *card,if (!routes) {dev_err (card->dev,"ASoC: Could not allocate DAPM route table\n" ); -return -EINVAL ; +return -ENOMEM ; }for (i =0 ; i < num_routes; i++) {
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 200/245 ALSA: bebob: add support for ToneWeal FW66
In reply to Greg Kroah-HartmanFrom: Takashi Sakamoto <[email protected]>
[ Upstream commit 50ebe56222bfa0911a932930f9229ee5995508d9 ]
A user of FFADO project reported the issue of ToneWeal FW66. As a result, the device is identified as one of applications of BeBoB solution.
I note that in the report the device returns contradictory result in plug discovery process for audio subunit. Fortunately ALSA BeBoB driver doesn't perform it thus it's likely to handle the device without issues.
I receive no reaction to test request for this patch yet, however it would be worth to add support for it.
daniel@gibbonmoon:/sys/bus/firewire/devices/fw1$ grep -r . * Binary file config_rom matches dev:244:1 guid:0x0023270002000000 hardware_version:0x000002 is_local:0 model:0x020002 model_name:FW66 power/runtime_active_time:0 power/runtime_active_kids:0 power/runtime_usage:0 power/runtime_status:unsupported power/async:disabled power/runtime_suspended_time:0 power/runtime_enabled:disabled power/control:auto subsystem/drivers_autoprobe:1 uevent:MAJOR=244 uevent:MINOR=1 uevent:DEVNAME=fw1 units:0x00a02d:0x010001 vendor:0x002327 vendor_name:ToneWeal fw1.0/uevent:MODALIAS=ieee1394:ven00002327mo00020002sp0000A02Dver00010001 fw1.0/power/runtime_active_time:0 fw1.0/power/runtime_active_kids:0 fw1.0/power/runtime_usage:0 fw1.0/power/runtime_status:unsupported fw1.0/power/async:disabled fw1.0/power/runtime_suspended_time:0 fw1.0/power/runtime_enabled:disabled fw1.0/power/control:auto fw1.0/model:0x020002 fw1.0/rom_index:15 fw1.0/specifier_id:0x00a02d fw1.0/model_name:FW66 fw1.0/version:0x010001 fw1.0/modalias:ieee1394:ven00002327mo00020002sp0000A02Dver00010001
Cc: Daniel Jozsef <[email protected]>
Reference: https://lore.kernel.org/alsa-devel/20200119164335.GA11974@workstation/
--- sound/firewire/Kconfig | 1 + sound/firewire/bebob/bebob.c | 3 +++ 2 files changed, 4 insertions(+)
sound/firewire/Kconfig +1 -0
@@ -108,6 +108,7 @@ config SND_BEBOB * M-Audio Ozonic/NRV10/ProfireLightBridge * M-Audio FireWire 1814/ProjectMix IO * Digidesign Mbox 2 Pro + * ToneWeal FW66 To compile this driver as a module, choose M here: the module will be called snd-bebob.
sound/firewire/bebob/bebob.c +3 -0
@@ -60,6 +60,7 @@ static DECLARE_BITMAP(devices_used, SNDRV_CARDS);#define VEN_MAUDIO1 0x00000d6c#define VEN_MAUDIO2 0x000007f5#define VEN_DIGIDESIGN 0x00a07e +#define OUI_SHOUYO 0x002327#define MODEL_FOCUSRITE_SAFFIRE_BOTH 0x00000000#define MODEL_MAUDIO_AUDIOPHILE_BOTH 0x00010060
@@ -513,6 +514,8 @@ static const struct ieee1394_device_id bebob_id_table[] = { &maudio_special_spec),/* Digidesign Mbox 2 Pro */ SND_BEBOB_DEV_ENTRY (VEN_DIGIDESIGN ,0x0000a9 , &spec_normal), +// Toneweal FW66. + SND_BEBOB_DEV_ENTRY(OUI_SHOUYO, 0x020002, &spec_normal),/* IDs are unknown but able to be supported */ /* Apogee, Mini-ME Firewire */ /* Apogee, Mini-DAC Firewire */
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 201/245 usb: gadget: f_hid: fix endianness issue with descriptors
In reply to Greg Kroah-HartmanFrom: Ruslan Bilovol <[email protected]>
[ Upstream commit 33cb46c4676d01956811b68a29157ea969a5df70 ]
Running sparse checker it shows warning message about incorrect endianness used for descriptor initialization:
| f_hid.c:91:43: warning: incorrect type in initializer (different base types) | f_hid.c:91:43: expected restricted __le16 [usertype] bcdHID | f_hid.c:91:43: got int
Fixing issue with cpu_to_le16() macro, however this is not a real issue as the value is the same both endians.
--- drivers/usb/gadget/function/f_hid.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/gadget/function/f_hid.c +1 -1
@@ -91,7 +91,7 @@ static struct usb_interface_descriptor hidg_interface_desc = {static struct hid_descriptor hidg_desc = { .bLength =sizeof hidg_desc, .bDescriptorType =HID_DT_HID , - .bcdHID =0x0101 , + .bcdHID =cpu_to_le16 (0x0101 ), .bCountryCode =0x00 , .bNumDescriptors =0x1 ,/*.desc[0].bDescriptorType = DYNAMIC */
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 202/245 usb: gadget: hid: fix error return code in hid_bind()
In reply to Greg Kroah-HartmanFrom: Yang Yingliang <[email protected]>
[ Upstream commit 88693f770bb09c196b1eb5f06a484a254ecb9924 ]
Fix to return a negative error code from the error handling case instead of 0.
--- drivers/usb/gadget/legacy/hid.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/usb/gadget/legacy/hid.c +3 -1
@@ -175,8 +175,10 @@ static int hid_bind(struct usb_composite_dev *cdev)struct usb_descriptor_header *usb_desc; usb_desc =usb_otg_descriptor_alloc (gadget); -if (!usb_desc) +if (!usb_desc) { + status = -ENOMEM ; goto put; + }usb_otg_descriptor_init (gadget, usb_desc); otg_desc[0 ] = usb_desc; otg_desc[1 ] =NULL ;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 203/245 powerpc/boot: Fixup device-tree on little endian
In reply to Greg Kroah-HartmanFrom: Benjamin Herrenschmidt <[email protected]>
[ Upstream commit c93f80849bdd9b45d834053ae1336e28f0026c84 ]
This fixes the core devtree.c functions and the ns16550 UART backend.
--- arch/powerpc/boot/devtree.c | 59 +++++++++++++++++++++---------------- arch/powerpc/boot/ns16550.c | 9 ++++-- 2 files changed, 41 insertions(+), 27 deletions(-)
arch/powerpc/boot/devtree.c +34 -25
@@ -17,6 +17,7 @@#include "string.h" #include "stdio.h" #include "ops.h" +#include "of.h" void dt_fixup_memory (u64 start,u64 size) {
@@ -27,21 +28,25 @@ void dt_fixup_memory(u64 start, u64 size) root =finddevice ("/" );if (getprop (root,"#address-cells" , &naddr,sizeof (naddr)) <0 ) naddr =2 ; +else + naddr =be32_to_cpu (naddr);if (naddr <1 || naddr >2 )fatal ("Can't cope with #address-cells == %d in /\n\r" , naddr);if (getprop (root,"#size-cells" , &nsize,sizeof (nsize)) <0 ) nsize =1 ; +else + nsize =be32_to_cpu (nsize);if (nsize <1 || nsize >2 )fatal ("Can't cope with #size-cells == %d in /\n\r" , nsize); i =0 ;if (naddr ==2 ) - memreg[i++] = start >>32 ; - memreg[i++] = start &0xffffffff ; + memreg[i++] =cpu_to_be32 (start >>32 ); + memreg[i++] =cpu_to_be32 (start &0xffffffff );if (nsize ==2 ) - memreg[i++] = size >>32 ; - memreg[i++] = size &0xffffffff ; + memreg[i++] =cpu_to_be32 (size >>32 ); + memreg[i++] =cpu_to_be32 (size &0xffffffff ); memory =finddevice ("/memory" );if (! memory) {
@@ -49,9 +54,9 @@ void dt_fixup_memory(u64 start, u64 size)setprop_str (memory,"device_type" ,"memory" ); } -printf ("Memory <- <0x%x" , memreg[0 ]); +printf ("Memory <- <0x%x" ,be32_to_cpu (memreg[0 ]));for (i =1 ; i < (naddr + nsize); i++) -printf (" 0x%x" , memreg[i]); +printf (" 0x%x" ,be32_to_cpu (memreg[i]));printf ("> (%ldMB)\n\r" , (unsigned long )(size >>20 ));setprop (memory,"reg" , memreg, (naddr + nsize)*sizeof (u32));
@@ -69,10 +74,10 @@ void dt_fixup_cpu_clocks(u32 cpu, u32 tb, u32 bus)printf ("CPU bus-frequency <- 0x%x (%dMHz)\n\r" , bus,MHZ (bus));while ((devp =find_node_by_devtype (devp,"cpu" ))) { -setprop_val (devp,"clock-frequency" , cpu); -setprop_val (devp,"timebase-frequency" , tb); +setprop_val (devp,"clock-frequency" ,cpu_to_be32 (cpu)); +setprop_val (devp,"timebase-frequency" ,cpu_to_be32 (tb));if (bus >0 ) -setprop_val (devp,"bus-frequency" , bus); +setprop_val (devp,"bus-frequency" ,cpu_to_be32 (bus)); } timebase_period_ns =1000000000 / tb;
@@ -84,7 +89,7 @@ void dt_fixup_clock(const char *path, u32 freq)if (devp) {printf ("%s: clock-frequency <- %x (%dMHz)\n\r" , path, freq,MHZ (freq)); -setprop_val (devp,"clock-frequency" , freq); +setprop_val (devp,"clock-frequency" ,cpu_to_be32 (freq)); } }
@@ -137,8 +142,12 @@ void dt_get_reg_format(void *node, u32 *naddr, u32 *nsize) {if (getprop (node,"#address-cells" , naddr,4 ) !=4 ) *naddr =2 ; +else + *naddr =be32_to_cpu (*naddr);if (getprop (node,"#size-cells" , nsize,4 ) !=4 ) *nsize =1 ; +else + *nsize =be32_to_cpu (*nsize); }static void copy_val (u32 *dest,u32 *src,int naddr)
@@ -167,9 +176,9 @@ static int add_reg(u32 *reg, u32 *add, int naddr)int i, carry =0 ;for (i =MAX_ADDR_CELLS -1 ; i >=MAX_ADDR_CELLS - naddr; i--) { -u64 tmp = (u64 )reg[i] + add[i] + carry; +u64 tmp = (u64 )be32_to_cpu (reg[i]) +be32_to_cpu (add[i]) + carry; carry = tmp >>32 ; - reg[i] = (u32 )tmp; + reg[i] =cpu_to_be32 ((u32 )tmp); }return !carry;
@@ -184,18 +193,18 @@ static int compare_reg(u32 *reg, u32 *range, u32 *rangesize)u32 end;for (i =0 ; i <MAX_ADDR_CELLS ; i++) { -if (reg[i] < range[i]) +if (be32_to_cpu (reg[i]) <be32_to_cpu (range[i]))return 0 ; -if (reg[i] > range[i]) +if (be32_to_cpu (reg[i]) >be32_to_cpu (range[i]))break ; }for (i =0 ; i <MAX_ADDR_CELLS ; i++) { - end = range[i] + rangesize[i]; + end =be32_to_cpu (range[i]) +be32_to_cpu (rangesize[i]); -if (reg[i] < end) +if (be32_to_cpu (reg[i]) < end)break ; -if (reg[i] > end) +if (be32_to_cpu (reg[i]) > end)return 0 ; }
@@ -244,7 +253,6 @@ static int dt_xlate(void *node, int res, int reglen, unsigned long *addr,return 0 ;dt_get_reg_format (parent, &naddr, &nsize); -if (nsize >2 )return 0 ;
@@ -256,10 +264,10 @@ static int dt_xlate(void *node, int res, int reglen, unsigned long *addr,copy_val (last_addr, prop_buf + offset, naddr); - ret_size = prop_buf[offset + naddr]; + ret_size =be32_to_cpu (prop_buf[offset + naddr]);if (nsize ==2 ) { ret_size <<=32 ; - ret_size |= prop_buf[offset + naddr +1 ]; + ret_size |=be32_to_cpu (prop_buf[offset + naddr +1 ]); }for (;;) {
@@ -282,7 +290,6 @@ static int dt_xlate(void *node, int res, int reglen, unsigned long *addr, offset =find_range (last_addr, prop_buf, prev_naddr, naddr, prev_nsize, buflen /4 ); -if (offset <0 )return 0 ;
@@ -300,8 +307,7 @@ static int dt_xlate(void *node, int res, int reglen, unsigned long *addr,if (naddr >2 )return 0 ; - ret_addr = ((u64 )last_addr[2 ] <<32 ) | last_addr[3 ]; - + ret_addr = ((u64 )be32_to_cpu (last_addr[2 ]) <<32 ) |be32_to_cpu (last_addr[3 ]);if (sizeof (void *) ==4 && (ret_addr >=0x100000000ULL || ret_size >0x100000000ULL || ret_addr + ret_size >0x100000000ULL ))
@@ -354,11 +360,14 @@ int dt_is_compatible(void *node, const char *compat)int dt_get_virtual_reg (void *node,void **addr,int nres) {unsigned long xaddr; -int n; +int n, i; n =getprop (node,"virtual-reg" , addr, nres *4 ); -if (n >0 ) +if (n >0 ) { +for (i =0 ; i < n/4 ; i ++) + ((u32 *)addr)[i] =be32_to_cpu (((u32 *)addr)[i]);return n /4 ; + }for (n =0 ; n < nres; n++) {if (!dt_xlate_reg (node, n, &xaddr,NULL ))
arch/powerpc/boot/ns16550.c +7 -2
@@ -14,6 +14,7 @@#include "stdio.h" #include "io.h" #include "ops.h" +#include "of.h" #define UART_DLL 0/* Out: Divisor Latch Low */ #define UART_DLM 1/* Out: Divisor Latch High */
@@ -57,16 +58,20 @@ int ns16550_console_init(void *devp, struct serial_console_data *scdp)int n;u32 reg_offset; -if (dt_get_virtual_reg (devp, (void **)®_base,1 ) <1 ) +if (dt_get_virtual_reg (devp, (void **)®_base,1 ) <1 ) { +printf ("virt reg parse fail...\r\n" );return -1 ; + } n =getprop (devp,"reg-offset" , ®_offset,sizeof (reg_offset));if (n ==sizeof (reg_offset)) - reg_base += reg_offset; + reg_base +=be32_to_cpu (reg_offset); n =getprop (devp,"reg-shift" , ®_shift,sizeof (reg_shift));if (n !=sizeof (reg_shift)) reg_shift =0 ; +else + reg_shift =be32_to_cpu (reg_shift); scdp->open = ns16550_open; scdp->putc = ns16550_putc;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 204/245 backlight: lm3630a: Fix return code of .update_status() callback
In reply to Greg Kroah-HartmanFrom: Uwe Kleine-König <[email protected]>
[ Upstream commit b9481a667a90ec739995e85f91f3672ca44d6ffa ]
According to <linux/backlight.h> .update_status() is supposed to return 0 on success and a negative error code otherwise. Adapt lm3630a_bank_a_update_status() and lm3630a_bank_b_update_status() to actually do it.
While touching that also add the error code to the failure message.
--- drivers/video/backlight/lm3630a_bl.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/video/backlight/lm3630a_bl.c +6 -6
@@ -183,7 +183,7 @@ static int lm3630a_bank_a_update_status(struct backlight_device *bl)if ((pwm_ctrl &LM3630A_PWM_BANK_A ) !=0 ) {lm3630a_pwm_ctrl (pchip, bl->props.brightness, bl->props.max_brightness); -return bl->props.brightness; +return 0 ; }/* disable sleep */
@@ -203,8 +203,8 @@ static int lm3630a_bank_a_update_status(struct backlight_device *bl)return 0 ; out_i2c_err: -dev_err (pchip->dev,"i2c failed to access\n" ); -return bl->props.brightness; +dev_err (pchip->dev,"i2c failed to access (%pe)\n" ,ERR_PTR (ret)); +return ret; }static int lm3630a_bank_a_get_brightness (struct backlight_device *bl)
@@ -260,7 +260,7 @@ static int lm3630a_bank_b_update_status(struct backlight_device *bl)if ((pwm_ctrl &LM3630A_PWM_BANK_B ) !=0 ) {lm3630a_pwm_ctrl (pchip, bl->props.brightness, bl->props.max_brightness); -return bl->props.brightness; +return 0 ; }/* disable sleep */
@@ -280,8 +280,8 @@ static int lm3630a_bank_b_update_status(struct backlight_device *bl)return 0 ; out_i2c_err: -dev_err (pchip->dev,"i2c failed to access REG_CTRL\n" ); -return bl->props.brightness; +dev_err (pchip->dev,"i2c failed to access (%pe)\n" ,ERR_PTR (ret)); +return ret; }static int lm3630a_bank_b_get_brightness (struct backlight_device *bl)
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 205/245 ALSA: hda: Add IRQ check for platform_get_irq()
In reply to Greg Kroah-HartmanFrom: Jiajun Cao <[email protected]>
[ Upstream commit 8c13212443230d03ff25014514ec0d53498c0912 ]
The function hda_tegra_first_init() neglects to check the return value after executing platform_get_irq().
hda_tegra_first_init() should check the return value (if negative error number) for errors so as to not pass a negative value to the devm_request_irq().
Fix it by adding a check for the return value irq_id.
--- sound/pci/hda/hda_tegra.c | 3 +++ 1 file changed, 3 insertions(+)
sound/pci/hda/hda_tegra.c +3 -0
@@ -363,6 +363,9 @@ static int hda_tegra_first_init(struct azx *chip, struct platform_device *pdev)unsigned short gcap;int irq_id =platform_get_irq (pdev,0 ); +if (irq_id <0 ) +return irq_id; + err =hda_tegra_init_chip (chip, pdev);if (err)return err;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 206/245 i2c: core: Disable client irq on reboot/shutdown
In reply to Greg Kroah-HartmanFrom: Dmitry Torokhov <[email protected]>
[ Upstream commit b64210f2f7c11c757432ba3701d88241b2b98fb1 ]
If an i2c client receives an interrupt during reboot or shutdown it may be too late to service it by making an i2c transaction on the bus because the i2c controller has already been shutdown. This can lead to system hangs if the i2c controller tries to make a transfer that is doomed to fail because the access to the i2c pins is already shut down, or an iommu translation has been torn down so i2c controller register access doesn't work.
Let's simply disable the irq if there isn't a shutdown callback for an i2c client when there is an irq associated with the device. This will make sure that irqs don't come in later than the time that we can handle it. We don't do this if the i2c client device already has a shutdown callback because presumably they're doing the right thing and quieting the device so irqs don't come in after the shutdown callback returns.
[[email protected]: Dropped newline, added commit text, added interrupt.h for robot build error]
--- drivers/i2c/i2c-core.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/i2c/i2c-core.c +3 -0
@@ -42,6 +42,7 @@#include <linux/i2c.h> #include <linux/idr.h> #include <linux/init.h> +#include <linux/interrupt.h> #include <linux/irqflags.h> #include <linux/jump_label.h> #include <linux/kernel.h>
@@ -1003,6 +1004,8 @@ static void i2c_device_shutdown(struct device *dev) driver =to_i2c_driver (dev->driver);if (driver->shutdown) driver->shutdown (client); +else if (client->irq >0 ) +disable_irq (client->irq); }static void i2c_client_dev_release (struct device *dev)
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 207/245 lib/decompress_unlz4.c: correctly handle zero-padding around initrds.
In reply to Greg Kroah-HartmanFrom: Dimitri John Ledkov <[email protected]>
[ Upstream commit 2c484419efc09e7234c667aa72698cb79ba8d8ed ]
lz4 compatible decompressor is simple. The format is underspecified and relies on EOF notification to determine when to stop. Initramfs buffer format[1] explicitly states that it can have arbitrary number of zero padding. Thus when operating without a fill function, be extra careful to ensure that sizes less than 4, or apperantly empty chunksizes are treated as EOF.
To test this I have created two cpio initrds, first a normal one, main.cpio. And second one with just a single /test-file with content "second" second.cpio. Then i compressed both of them with gzip, and with lz4 -l. Then I created a padding of 4 bytes (dd if=/dev/zero of=pad4 bs=1 count=4). To create four testcase initrds:
1) main.cpio.gzip + extra.cpio.gzip = pad0.gzip
2) main.cpio.lz4 + extra.cpio.lz4 = pad0.lz4
3) main.cpio.gzip + pad4 + extra.cpio.gzip = pad4.gzip
4) main.cpio.lz4 + pad4 + extra.cpio.lz4 = pad4.lz4
The pad4 test-cases replicate the initrd load by grub, as it pads and aligns every initrd it loads.
All of the above boot, however /test-file was not accessible in the initrd for the testcase #4, as decoding in lz4 decompressor failed. Also an error message printed which usually is harmless.
Whith a patched kernel, all of the above testcases now pass, and /test-file is accessible.
This fixes lz4 initrd decompress warning on every boot with grub. And more importantly this fixes inability to load multiple lz4 compressed initrds with grub. This patch has been shipping in Ubuntu kernels since January 2021.
[1] ./Documentation/driver-api/early-userspace/buffer-format.rst
--- lib/decompress_unlz4.c | 8 ++++++++ 1 file changed, 8 insertions(+)
lib/decompress_unlz4.c +8 -0
@@ -115,6 +115,9 @@ STATIC inline int INIT unlz4(u8 *input, long in_len,error ("data corrupted" ); goto exit_2; } + }else if (size <4 ) { +/* empty or end-of-file */ + goto exit_3; } chunksize =get_unaligned_le32 (inp);
@@ -128,6 +131,10 @@ STATIC inline int INIT unlz4(u8 *input, long in_len,continue ; } +if (!fill && chunksize ==0 ) { +/* empty or end-of-file */ + goto exit_3; + }if (posp) *posp +=4 ;
@@ -184,6 +191,7 @@ STATIC inline int INIT unlz4(u8 *input, long in_len, } } +exit_3: ret =0 ; exit_2:if (!input)
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 208/245 pwm: spear: Dont modify HW state in .remove callback
In reply to Greg Kroah-HartmanFrom: Uwe Kleine-König <[email protected]>
[ Upstream commit b601a18f12383001e7a8da238de7ca1559ebc450 ]
A consumer is expected to disable a PWM before calling pwm_put(). And if they didn't there is hopefully a good reason (or the consumer needs fixing). Also if disabling an enabled PWM was the right thing to do, this should better be done in the framework instead of in each low level driver.
So drop the hardware modification from the .remove() callback.
--- drivers/pwm/pwm-spear.c | 4 ---- 1 file changed, 4 deletions(-)
drivers/pwm/pwm-spear.c +0 -4
@@ -231,10 +231,6 @@ static int spear_pwm_probe(struct platform_device *pdev)static int spear_pwm_remove (struct platform_device *pdev) {struct spear_pwm_chip *pc =platform_get_drvdata (pdev); -int i; - -for (i =0 ; i <NUM_PWM ; i++) -pwm_disable (&pc->chip.pwms[i]);/* clk was prepared in probe, hence unprepare it here */ clk_unprepare (pc->clk);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 209/245 power: supply: ab8500: Avoid NULL pointers
In reply to Greg Kroah-HartmanFrom: Linus Walleij <[email protected]>
[ Upstream commit 5bcb5087c9dd3dca1ff0ebd8002c5313c9332b56 ]
Sometimes the code will crash because we haven't enabled AC or USB charging and thus not created the corresponding psy device. Fix it by checking that it is there before notifying.
--- drivers/power/supply/ab8500_charger.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)
drivers/power/supply/ab8500_charger.c +17 -1
@@ -409,6 +409,14 @@ disable_otp:static void ab8500_power_supply_changed (struct ab8500_charger *di,struct power_supply *psy) { +/* +* This happens if we get notifications or interrupts and +* the platform has been configured not to support one or +* other type of charging. +*/ +if (!psy) +return ; +if (di->autopower_cfg) { if (!di->usb.charger_connected && !di->ac.charger_connected &&
@@ -435,7 +443,15 @@ static void ab8500_charger_set_usb_connected(struct ab8500_charger *di,if (!connected) di->flags.vbus_drop_end = false; -sysfs_notify (&di->usb_chg.psy->dev.kobj,NULL ,"present" ); +/* +* Sometimes the platform is configured not to support +* USB charging and no psy has been created, but we still +* will get these notifications. +*/ +if (di->usb_chg.psy) { +sysfs_notify (&di->usb_chg.psy->dev.kobj,NULL , +"present" ); + }if (connected) {mutex_lock (&di->charger_attached_mutex);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 210/245 power: reset: gpio-poweroff: add missing MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Bixuan Cui <[email protected]>
[ Upstream commit ed3443fb4df4e140a22f65144546c8a8e1e27f4e ]
This patch adds missing MODULE_DEVICE_TABLE definition which generates correct modalias for automatic loading of this driver when it is built as an external module.
--- drivers/power/reset/gpio-poweroff.c | 1 + 1 file changed, 1 insertion(+)
drivers/power/reset/gpio-poweroff.c +1 -0
@@ -84,6 +84,7 @@ static const struct of_device_id of_gpio_poweroff_match[] = { { .compatible = "gpio-poweroff", }, {}, }; +MODULE_DEVICE_TABLE (of, of_gpio_poweroff_match);static struct platform_driver gpio_poweroff_driver = { .probe = gpio_poweroff_probe,
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 211/245 ARM: 9087/1: kprobes: test-thumb: fix for LLVM_IAS=1
In reply to Greg Kroah-HartmanFrom: Nick Desaulniers <[email protected]>
[ Upstream commit 8b95a7d90ce8160ac5cffd5bace6e2eba01a871e ]
There's a few instructions that GAS infers operands but Clang doesn't; from what I can tell the Arm ARM doesn't say these are optional.
F5.1.257 TBB, TBH T1 Halfword variant
F5.1.238 STREXD T1 variant
F5.1.84 LDREXD T1 variant
--- arch/arm/probes/kprobes/test-thumb.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
arch/arm/probes/kprobes/test-thumb.c +5 -5
@@ -444,21 +444,21 @@ void kprobe_thumb32_test_cases(void) "3: mvn r0, r0 \n\t" "2: nop \n\t") - TEST_RX("tbh [pc, r",7, (9f-(1f+4))>>1,"]", + TEST_RX("tbh [pc, r",7, (9f-(1f+4))>>1,", lsl #1]", "9: \n\t" ".short (2f-1b-4)>>1 \n\t" ".short (3f-1b-4)>>1 \n\t" "3: mvn r0, r0 \n\t" "2: nop \n\t") - TEST_RX("tbh [pc, r",12, ((9f-(1f+4))>>1)+1,"]", + TEST_RX("tbh [pc, r",12, ((9f-(1f+4))>>1)+1,", lsl #1]", "9: \n\t" ".short (2f-1b-4)>>1 \n\t" ".short (3f-1b-4)>>1 \n\t" "3: mvn r0, r0 \n\t" "2: nop \n\t") -TEST_RRX ("tbh [r" ,1 ,9f ,", r" ,14 ,1 ,"]" , +TEST_RRX ("tbh [r" ,1 ,9f ,", r" ,14 ,1 ,", lsl #1]" ,"9: \n\t" ".short (2f-1b-4)>>1 \n\t" ".short (3f-1b-4)>>1 \n\t"
@@ -471,10 +471,10 @@ void kprobe_thumb32_test_cases(void) TEST_UNSUPPORTED("strexb r0, r1, [r2]") TEST_UNSUPPORTED("strexh r0, r1, [r2]") - TEST_UNSUPPORTED("strexd r0, r1, [r2]") + TEST_UNSUPPORTED("strexd r0, r1, r2, [r2]") TEST_UNSUPPORTED("ldrexb r0, [r1]") TEST_UNSUPPORTED("ldrexh r0, [r1]") - TEST_UNSUPPORTED("ldrexd r0, [r1]") + TEST_UNSUPPORTED("ldrexd r0, r1, [r1]")TEST_GROUP ("Data-processing (shifted register) and (modified immediate)" )
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 212/245 watchdog: Fix possible use-after-free in wdt_startup()
In reply to Greg Kroah-HartmanFrom: Zou Wei <[email protected]>
[ Upstream commit c08a6b31e4917034f0ed0cb457c3bb209576f542 ]
This module's remove path calls del_timer(). However, that function does not wait until the timer handler finishes. This means that the timer handler may still be running after the driver's remove function has finished, which would result in a use-after-free.
Fix by calling del_timer_sync(), which makes sure the timer handler has finished, and unable to re-schedule itself.
--- drivers/watchdog/sbc60xxwdt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/watchdog/sbc60xxwdt.c +1 -1
@@ -152,7 +152,7 @@ static void wdt_startup(void)static void wdt_turnoff (void ) {/* Stop the timer */ -del_timer (&timer); +del_timer_sync (&timer);inb_p (wdt_stop);pr_info ("Watchdog timer is now disabled...\n" ); }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 213/245 watchdog: sc520_wdt: Fix possible use-after-free in wdt_turnoff()
In reply to Greg Kroah-HartmanFrom: Zou Wei <[email protected]>
[ Upstream commit 90b7c141132244e8e49a34a4c1e445cce33e07f4 ]
This module's remove path calls del_timer(). However, that function does not wait until the timer handler finishes. This means that the timer handler may still be running after the driver's remove function has finished, which would result in a use-after-free.
Fix by calling del_timer_sync(), which makes sure the timer handler has finished, and unable to re-schedule itself.
--- drivers/watchdog/sc520_wdt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/watchdog/sc520_wdt.c +1 -1
@@ -190,7 +190,7 @@ static int wdt_startup(void)static int wdt_turnoff (void ) {/* Stop the timer */ -del_timer (&timer); +del_timer_sync (&timer);/* Stop the watchdog */ wdt_config (0 );
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 214/245 watchdog: Fix possible use-after-free by calling del_timer_sync()
In reply to Greg Kroah-HartmanFrom: Zou Wei <[email protected]>
[ Upstream commit d0212f095ab56672f6f36aabc605bda205e1e0bf ]
This driver's remove path calls del_timer(). However, that function does not wait until the timer handler finishes. This means that the timer handler may still be running after the driver's remove function has finished, which would result in a use-after-free.
Fix by calling del_timer_sync(), which makes sure the timer handler has finished, and unable to re-schedule itself.
--- drivers/watchdog/lpc18xx_wdt.c | 2 +- drivers/watchdog/w83877f_wdt.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/watchdog/lpc18xx_wdt.c +1 -1
@@ -300,7 +300,7 @@ static int lpc18xx_wdt_remove(struct platform_device *pdev)struct lpc18xx_wdt_dev *lpc18xx_wdt =platform_get_drvdata (pdev);dev_warn (&pdev->dev,"I quit now, hardware will probably reboot!\n" ); -del_timer (&lpc18xx_wdt->timer); +del_timer_sync (&lpc18xx_wdt->timer);watchdog_unregister_device (&lpc18xx_wdt->wdt_dev);clk_disable_unprepare (lpc18xx_wdt->wdt_clk);
drivers/watchdog/w83877f_wdt.c +1 -1
@@ -170,7 +170,7 @@ static void wdt_startup(void)static void wdt_turnoff (void ) {/* Stop the timer */ -del_timer (&timer); +del_timer_sync (&timer);wdt_change (WDT_DISABLE );
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 215/245 x86/fpu: Return proper error codes from user access functions
In reply to Greg Kroah-HartmanFrom: Thomas Gleixner <[email protected]>
[ Upstream commit aee8c67a4faa40a8df4e79316dbfc92d123989c1 ]
When *RSTOR from user memory raises an exception, there is no way to differentiate them. That's bad because it forces the slow path even when the failure was not a fault. If the operation raised eg. #GP then going through the slow path is pointless.
Use _ASM_EXTABLE_FAULT() which stores the trap number and let the exception fixup return the negated trap number as error.
This allows to separate the fast path and let it handle faults directly and avoid the slow path for all other exceptions.
--- arch/x86/include/asm/fpu/internal.h | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-)
arch/x86/include/asm/fpu/internal.h +12 -7
@@ -94,6 +94,7 @@ static inline void fpstate_init_fxstate(struct fxregs_state *fx) }extern void fpstate_sanitize_xstate (struct fpu *fpu); +/* Returns 0 or the negated trap number, which results in -EFAULT for #PF */ #define user_insn(insn, output, input...) \ ({ \ int err; \
@@ -101,14 +102,14 @@ extern void fpstate_sanitize_xstate(struct fpu *fpu);might_fault (); \ \ asm volatile(ASM_STAC "\n" \ - "1:" #insn "\n\t" \ + "1: " #insn "\n" \ "2: " ASM_CLAC "\n" \ ".section .fixup,\"ax\"\n" \ - "3: movl $-1,%[err]\n" \ + "3: negl %%eax\n" \ " jmp 2b\n" \ ".previous\n" \ - _ASM_EXTABLE(1b, 3b) \ - : [err] "=r" (err), output \ + _ASM_EXTABLE_FAULT(1b, 3b) \ + : [err] "=a" (err), output \ : "0"(0), input); \ err; \ })
@@ -227,16 +228,20 @@ static inline void copy_fxregs_to_kernel(struct fpu *fpu)#define XRSTOR ".byte " REX_PREFIX "0x0f,0xae,0x2f"#define XRSTORS ".byte " REX_PREFIX "0x0f,0xc7,0x1f" +/* +* After this @err contains 0 on success or the negated trap number when +* the operation raises an exception. For faults this results in -EFAULT. +*/ #define XSTATE_OP (op, st, lmask, hmask, err) \ asm volatile("1:" op "\n\t" \ "xor %[err], %[err]\n" \ "2:\n\t" \ ".pushsection .fixup,\"ax\"\n\t" \ - "3: movl $-2,%[err]\n\t" \ + "3: negl %%eax\n\t" \ "jmp 2b\n\t" \ ".popsection\n\t" \ - _ASM_EXTABLE(1b, 3b) \ - : [err] "=r" (err) \ + _ASM_EXTABLE_FAULT(1b, 3b) \ + : [err] "=a" (err) \ : "D" (st), "m" (*st), "a" (lmask), "d" (hmask) \ : "memory")
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 216/245 orangefs: fix orangefs df output.
In reply to Greg Kroah-HartmanFrom: Mike Marshall <[email protected]>
[ Upstream commit 0fdec1b3c9fbb5e856a40db5993c9eaf91c74a83 ]
Orangefs df output is whacky. Walt Ligon suggested this might fix it. It seems way more in line with reality now...
--- fs/orangefs/super.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/orangefs/super.c +1 -1
@@ -185,7 +185,7 @@ static int orangefs_statfs(struct dentry *dentry, struct kstatfs *buf) buf->f_bavail = (sector_t ) new_op->downcall.resp.statfs.blocks_avail; buf->f_files = (sector_t ) new_op->downcall.resp.statfs.files_total; buf->f_ffree = (sector_t ) new_op->downcall.resp.statfs.files_avail; - buf->f_frsize = sb->s_blocksize; + buf->f_frsize =0 ; out_op_release:op_release (new_op);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 217/245 ceph: remove bogus checks and WARN_ONs from ceph_set_page_dirty
In reply to Greg Kroah-HartmanFrom: Jeff Layton <[email protected]>
[ Upstream commit 22d41cdcd3cfd467a4af074165357fcbea1c37f5 ]
The checks for page->mapping are odd, as set_page_dirty is an address_space operation, and I don't see where it would be called on a non-pagecache page.
The warning about the page lock also seems bogus. The comment over set_page_dirty() says that it can be called without the page lock in some rare cases. I don't think we want to warn if that's the case.
--- fs/ceph/addr.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-)
fs/ceph/addr.c +1 -9
@@ -72,10 +72,6 @@ static int ceph_set_page_dirty(struct page *page)struct inode *inode;struct ceph_inode_info *ci;struct ceph_snap_context *snapc; -int ret; - -if (unlikely (!mapping)) -return !TestSetPageDirty (page);if (PageDirty (page)) { dout("%p set_page_dirty %p idx %lu -- already dirty\n",
@@ -121,11 +117,7 @@ static int ceph_set_page_dirty(struct page *page) page->private = (unsigned long )snapc;SetPagePrivate (page); - ret =__set_page_dirty_nobuffers (page); -WARN_ON (!PageLocked (page)); -WARN_ON (!page->mapping); - -return ret; +return __set_page_dirty_nobuffers (page); }/*
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 218/245 power: supply: charger-manager: add missing MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Zou Wei <[email protected]>
[ Upstream commit 073b5d5b1f9cc94a3eea25279fbafee3f4f5f097 ]
This patch adds missing MODULE_DEVICE_TABLE definition which generates correct modalias for automatic loading of this driver when it is built as an external module.
--- drivers/power/supply/charger-manager.c | 1 + 1 file changed, 1 insertion(+)
drivers/power/supply/charger-manager.c +1 -0
@@ -1489,6 +1489,7 @@ static const struct of_device_id charger_manager_match[] = { }, {}, }; +MODULE_DEVICE_TABLE (of, charger_manager_match);static struct charger_desc *of_cm_parse_desc (struct device *dev) {
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 219/245 power: supply: ab8500: add missing MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Zou Wei <[email protected]>
[ Upstream commit dfe52db13ab8d24857a9840ec7ca75eef800c26c ]
This patch adds missing MODULE_DEVICE_TABLE definition which generates correct modalias for automatic loading of this driver when it is built as an external module.
--- drivers/power/supply/ab8500_btemp.c | 1 + drivers/power/supply/ab8500_charger.c | 1 + drivers/power/supply/ab8500_fg.c | 1 + 3 files changed, 3 insertions(+)
drivers/power/supply/ab8500_btemp.c +1 -0
@@ -1181,6 +1181,7 @@ static const struct of_device_id ab8500_btemp_match[] = { { .compatible = "stericsson,ab8500-btemp", }, { }, }; +MODULE_DEVICE_TABLE (of, ab8500_btemp_match);static struct platform_driver ab8500_btemp_driver = { .probe = ab8500_btemp_probe,
drivers/power/supply/ab8500_charger.c +1 -0
@@ -3752,6 +3752,7 @@ static const struct of_device_id ab8500_charger_match[] = { { .compatible = "stericsson,ab8500-charger", }, { }, }; +MODULE_DEVICE_TABLE (of, ab8500_charger_match);static struct platform_driver ab8500_charger_driver = { .probe = ab8500_charger_probe,
drivers/power/supply/ab8500_fg.c +1 -0
@@ -3229,6 +3229,7 @@ static const struct of_device_id ab8500_fg_match[] = { { .compatible = "stericsson,ab8500-fg", }, { }, }; +MODULE_DEVICE_TABLE (of, ab8500_fg_match);static struct platform_driver ab8500_fg_driver = { .probe = ab8500_fg_probe,
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 220/245 pwm: tegra: Dont modify HW state in .remove callback
In reply to Greg Kroah-HartmanFrom: Uwe Kleine-König <[email protected]>
[ Upstream commit 86f7fa71cd830d18d7ebcaf719dffd5ddfe1acdd ]
A consumer is expected to disable a PWM before calling pwm_put(). And if they didn't there is hopefully a good reason (or the consumer needs fixing). Also if disabling an enabled PWM was the right thing to do, this should better be done in the framework instead of in each low level driver.
So drop the hardware modification from the .remove() callback.
--- drivers/pwm/pwm-tegra.c | 13 ------------- 1 file changed, 13 deletions(-)
drivers/pwm/pwm-tegra.c +0 -13
@@ -228,7 +228,6 @@ static int tegra_pwm_probe(struct platform_device *pdev)static int tegra_pwm_remove (struct platform_device *pdev) {struct tegra_pwm_chip *pc =platform_get_drvdata (pdev); -unsigned int i;int err;if (WARN_ON (!pc))
@@ -238,18 +237,6 @@ static int tegra_pwm_remove(struct platform_device *pdev)if (err <0 )return err; -for (i =0 ; i < pc->chip.npwm; i++) { -struct pwm_device *pwm = &pc->chip.pwms[i]; - -if (!pwm_is_enabled (pwm)) -if (clk_prepare_enable (pc->clk) <0 ) -continue ; - -pwm_writel (pc, i,0 ); - -clk_disable_unprepare (pc->clk); - } -reset_control_assert (pc->rst);clk_disable_unprepare (pc->clk);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 221/245 ACPI: AMBA: Fix resource name in /proc/iomem
In reply to Greg Kroah-HartmanFrom: Liguang Zhang <[email protected]>
[ Upstream commit 7718629432676b5ebd9a32940782fe297a0abf8d ]
In function amba_handler_attach(), dev->res.name is initialized by amba_device_alloc. But when address_found is false, dev->res.name is assigned to null value, which leads to wrong resource name display in /proc/iomem, "<BAD>" is seen for those resources.
--- drivers/acpi/acpi_amba.c | 1 + 1 file changed, 1 insertion(+)
drivers/acpi/acpi_amba.c +1 -0
@@ -70,6 +70,7 @@ static int amba_handler_attach(struct acpi_device *adev,case IORESOURCE_MEM :if (!address_found) { dev->res = *rentry->res; + dev->res.name =dev_name (&dev->dev); address_found = true; }break ;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 222/245 virtio-blk: Fix memory leak among suspend/resume procedure
In reply to Greg Kroah-HartmanFrom: Xie Yongji <[email protected]>
[ Upstream commit b71ba22e7c6c6b279c66f53ee7818709774efa1f ]
The vblk->vqs should be freed before we call init_vqs() in virtblk_restore().
--- drivers/block/virtio_blk.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/block/virtio_blk.c +2 -0
@@ -800,6 +800,8 @@ static int virtblk_freeze(struct virtio_device *vdev)blk_mq_stop_hw_queues (vblk->disk->queue); vdev->config->del_vqs (vdev); +kfree (vblk->vqs); +return 0 ; }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 223/245 virtio_console: Assure used length from device is limited
In reply to Greg Kroah-HartmanFrom: Xie Yongji <[email protected]>
[ Upstream commit d00d8da5869a2608e97cfede094dfc5e11462a46 ]
The buf->len might come from an untrusted device. This ensures the value would not exceed the size of the buffer to avoid data corruption or loss.
--- drivers/char/virtio_console.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/char/virtio_console.c +2 -2
@@ -492,7 +492,7 @@ static struct port_buffer *get_inbuf(struct port *port) buf =virtqueue_get_buf (port->in_vq, &len);if (buf) { - buf->len = len; + buf->len =min_t (size_t, len, buf->size); buf->offset =0 ; port->stats.bytes_received += len; }
@@ -1758,7 +1758,7 @@ static void control_work_handler(struct work_struct *work)while ((buf =virtqueue_get_buf (vq, &len))) {spin_unlock (&portdev->c_ivq_lock); - buf->len = len; + buf->len =min_t (size_t, len, buf->size); buf->offset =0 ;handle_control_message (vq->vdev, portdev, buf);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 224/245 PCI/sysfs: Fix dsm_label_utf16s_to_utf8s() buffer overrun
In reply to Greg Kroah-HartmanFrom: Krzysztof Wilczyński <[email protected]>
[ Upstream commit bdcdaa13ad96f1a530711c29e6d4b8311eff767c ]
"utf16s_to_utf8s(..., buf, PAGE_SIZE)" puts up to PAGE_SIZE bytes into "buf" and returns the number of bytes it actually put there. If it wrote PAGE_SIZE bytes, the newline added by dsm_label_utf16s_to_utf8s() would overrun "buf".
Reduce the size available for utf16s_to_utf8s() to use so there is always space for the newline.
--- drivers/pci/pci-label.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/pci/pci-label.c +1 -1
@@ -157,7 +157,7 @@ static void dsm_label_utf16s_to_utf8s(union acpi_object *obj, char *buf) len =utf16s_to_utf8s ((const wchar_t *)obj->buffer.pointer, obj->buffer.length,UTF16_LITTLE_ENDIAN , - buf,PAGE_SIZE ); + buf,PAGE_SIZE -1 ); buf[len] ='\n' ; }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 225/245 power: supply: rt5033_battery: Fix device tree enumeration
In reply to Greg Kroah-HartmanFrom: Stephan Gerhold <[email protected]>
[ Upstream commit f3076cd8d1d5fa64b5e1fa5affc045c2fc123baa ]
The fuel gauge in the RT5033 PMIC has its own I2C bus and interrupt line. Therefore, it is not actually part of the RT5033 MFD and needs its own of_match_table to probe properly.
Also, given that it's independent of the MFD, there is actually no need to make the Kconfig depend on MFD_RT5033. Although the driver uses the shared <linux/mfd/rt5033.h> header, there is no compile or runtime dependency on the RT5033 MFD driver.
--- drivers/power/supply/Kconfig | 3 ++- drivers/power/supply/rt5033_battery.c | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-)
drivers/power/supply/Kconfig +2 -1
@@ -490,7 +490,8 @@ config BATTERY_GOLDFISH config BATTERY_RT5033 tristate "RT5033 fuel gauge support" - depends on MFD_RT5033 + depends on I2C + select REGMAP_I2C help This adds support for battery fuel gauge in Richtek RT5033 PMIC. The fuelgauge calculates and determines the battery state of charge
drivers/power/supply/rt5033_battery.c +7 -0
@@ -167,9 +167,16 @@ static const struct i2c_device_id rt5033_battery_id[] = { };MODULE_DEVICE_TABLE (i2c, rt5033_battery_id); +static const struct of_device_id rt5033_battery_of_match[] = { + { .compatible ="richtek,rt5033-battery" , }, + { } +}; +MODULE_DEVICE_TABLE (of, rt5033_battery_of_match); +static struct i2c_driver rt5033_battery_driver = { .driver = { .name ="rt5033-battery" , + .of_match_table = rt5033_battery_of_match, }, .probe = rt5033_battery_probe, .remove = rt5033_battery_remove,
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 226/245 um: fix error return code in slip_open()
In reply to Greg Kroah-HartmanFrom: Zhen Lei <[email protected]>
[ Upstream commit b77e81fbe5f5fb4ad9a61ec80f6d1e30b6da093a ]
Fix to return a negative error code from the error handling case instead of 0, as done elsewhere in this function.
--- arch/um/drivers/slip_user.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/um/drivers/slip_user.c +2 -1
@@ -145,7 +145,8 @@ static int slip_open(void *data) } sfd = err; -if (set_up_tty (sfd)) + err =set_up_tty (sfd); +if (err) goto out_close2; pri->slave = sfd;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 227/245 um: fix error return code in winch_tramp()
In reply to Greg Kroah-HartmanFrom: Zhen Lei <[email protected]>
[ Upstream commit ccf1236ecac476d9d2704866d9a476c86e387971 ]
Fix to return a negative error code from the error handling case instead of 0, as done elsewhere in this function.
--- arch/um/drivers/chan_user.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/um/drivers/chan_user.c +2 -1
@@ -256,7 +256,8 @@ static int winch_tramp(int fd, struct tty_port *port, int *fd_out, goto out_close; } -if (os_set_fd_block (*fd_out,0 )) { + err =os_set_fd_block (*fd_out,0 ); +if (err) {printk (UM_KERN_ERR "winch_tramp: failed to set thread_fd " "non-blocking.\n" ); goto out_close;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 228/245 watchdog: aspeed: fix hardware timeout calculation
In reply to Greg Kroah-HartmanFrom: Tao Ren <[email protected]>
[ Upstream commit e7dc481c92060f9ce872878b0b7a08c24713a7e5 ]
Fix hardware timeout calculation in aspeed_wdt_set_timeout function to ensure the reload value does not exceed the hardware limit.
--- drivers/watchdog/aspeed_wdt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/watchdog/aspeed_wdt.c +1 -1
@@ -100,7 +100,7 @@ static int aspeed_wdt_set_timeout(struct watchdog_device *wdd, wdd->timeout = timeout; - actual =min (timeout, wdd->max_hw_heartbeat_ms *1000 ); + actual =min (timeout, wdd->max_hw_heartbeat_ms /1000 );writel (actual *WDT_RATE_1MHZ , wdt->base +WDT_RELOAD_VALUE );writel (WDT_RESTART_MAGIC , wdt->base +WDT_RESTART );
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 229/245 nfs: fix acl memory leak of posix_acl_create()
In reply to Greg Kroah-HartmanFrom: Gao Xiang <[email protected]>
[ Upstream commit 1fcb6fcd74a222d9ead54d405842fc763bb86262 ]
When looking into another nfs xfstests report, I found acl and default_acl in nfs3_proc_create() and nfs3_proc_mknod() error paths are possibly leaked. Fix them in advance.
--- fs/nfs/nfs3proc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/nfs/nfs3proc.c +2 -2
@@ -363,7 +363,7 @@ nfs3_proc_create(struct inode *dir, struct dentry *dentry, struct iattr *sattr,break ;case NFS3_CREATE_UNCHECKED : - goto out; + goto out_release_acls; }nfs_fattr_init (data->res.dir_attr);nfs_fattr_init (data->res.fattr);
@@ -708,7 +708,7 @@ nfs3_proc_mknod(struct inode *dir, struct dentry *dentry, struct iattr *sattr,break ;default : status = -EINVAL ; - goto out; + goto out_release_acls; } status =nfs3_do_create (dir, dentry, data);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 230/245 ubifs: Set/Clear I_LINKABLE under i_lock for whiteout inode
In reply to Greg Kroah-HartmanFrom: Zhihao Cheng <[email protected]>
[ Upstream commit a801fcfeef96702fa3f9b22ad56c5eb1989d9221 ]
xfstests-generic/476 reports a warning message as below:
WARNING: CPU: 2 PID: 30347 at fs/inode.c:361 inc_nlink+0x52/0x70 Call Trace: do_rename+0x502/0xd40 [ubifs] ubifs_rename+0x8b/0x180 [ubifs] vfs_rename+0x476/0x1080 do_renameat2+0x67c/0x7b0 __x64_sys_renameat2+0x6e/0x90 do_syscall_64+0x66/0xe0 entry_SYSCALL_64_after_hwframe+0x44/0xae
Following race case can cause this:
rename_whiteout(Thread 1) wb_workfn(Thread 2)ubifs_rename
do_rename
__writeback_single_inode
spin_lock(&inode->i_lock)
whiteout->i_state |= I_LINKABLE
inode->i_state &= ~dirty;
---- How race happens on i_state:
(tmp = whiteout->i_state | I_LINKABLE)
(tmp = inode->i_state & ~dirty)
(whiteout->i_state = tmp)
(inode->i_state = tmp)
----
spin_unlock(&inode->i_lock)
inc_nlink(whiteout)
WARN_ON(!(inode->i_state & I_LINKABLE)) !!!Fix to add i_lock to avoid i_state update race condition.
--- fs/ubifs/dir.c | 7 +++++++ 1 file changed, 7 insertions(+)
fs/ubifs/dir.c +7 -0
@@ -1144,7 +1144,10 @@ static int do_rename(struct inode *old_dir, struct dentry *old_dentry,return err; } +spin_lock (&whiteout->i_lock); whiteout->i_state |=I_LINKABLE ; +spin_unlock (&whiteout->i_lock); + whiteout_ui =ubifs_inode (whiteout); whiteout_ui->data = dev; whiteout_ui->data_len =ubifs_encode_dev (dev,MKDEV (0 ,0 ));
@@ -1239,7 +1242,11 @@ static int do_rename(struct inode *old_dir, struct dentry *old_dentry,inc_nlink (whiteout);mark_inode_dirty (whiteout); + +spin_lock (&whiteout->i_lock); whiteout->i_state &= ~I_LINKABLE ; +spin_unlock (&whiteout->i_lock); +iput (whiteout); }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 231/245 x86/fpu: Limit xstate copy size in xstateregs_set()
In reply to Greg Kroah-HartmanFrom: Thomas Gleixner <[email protected]>
[ Upstream commit 07d6688b22e09be465652cf2da0da6bf86154df6 ]
If the count argument is larger than the xstate size, this will happily copy beyond the end of xstate.
--- arch/x86/kernel/fpu/regset.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/kernel/fpu/regset.c +1 -1
@@ -123,7 +123,7 @@ int xstateregs_set(struct task_struct *target, const struct user_regset *regset,/* * A whole standard-format XSAVE buffer is needed: */ -if ((pos !=0 ) || (count < fpu_user_xstate_size)) +if (pos !=0 || count != fpu_user_xstate_size)return -EFAULT ; xsave = &fpu->state.xsave;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 232/245 ALSA: isa: Fix error return code in snd_cmi8330_probe()
In reply to Greg Kroah-HartmanFrom: Zhen Lei <[email protected]>
[ Upstream commit 31028cbed26a8afa25533a10425ffa2ab794c76c ]
When 'SB_HW_16' check fails, the error code -ENODEV instead of 0 should be returned, which is the same as that returned when 'WSS_HW_CMI8330' check fails.
--- sound/isa/cmi8330.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/isa/cmi8330.c +1 -1
@@ -564,7 +564,7 @@ static int snd_cmi8330_probe(struct snd_card *card, int dev) }if (acard->sb->hardware !=SB_HW_16 ) { snd_printk(KERN_ERR PFX "SB16 not found during probe\n"); -return err; +return -ENODEV ; }snd_wss_out (acard->wss,CS4231_MISC_INFO ,0x40 );/* switch on MODE2 */
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 233/245 hexagon: use common DISCARDS macro
In reply to Greg Kroah-HartmanFrom: Nathan Chancellor <[email protected]>
[ Upstream commit 681ba73c72302214686401e707e2087ed11a6556 ]
ld.lld warns that the '.modinfo' section is not currently handled:
ld.lld: warning: kernel/built-in.a(workqueue.o):(.modinfo) is being placed in '.modinfo' ld.lld: warning: kernel/built-in.a(printk/printk.o):(.modinfo) is being placed in '.modinfo' ld.lld: warning: kernel/built-in.a(irq/spurious.o):(.modinfo) is being placed in '.modinfo' ld.lld: warning: kernel/built-in.a(rcu/update.o):(.modinfo) is being placed in '.modinfo'
The '.modinfo' section was added in commit 898490c010b5 ("moduleparam:
Save information about built-in modules in separate file") to the DISCARDS macro but Hexagon has never used that macro. The unification of DISCARDS happened in commit 023bf6f1b8bf ("linker script: unify usage of discard definition") in 2009, prior to Hexagon being added in 2011.
Switch Hexagon over to the DISCARDS macro so that anything that is expected to be discarded gets discarded.
--- arch/hexagon/kernel/vmlinux.lds.S | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-)
arch/hexagon/kernel/vmlinux.lds.S +1 -6
@@ -71,13 +71,8 @@ SECTIONS _end = .; - /DISCARD/ : { - EXIT_TEXT - EXIT_DATA - EXIT_CALL - } - STABS_DEBUG DWARF_DEBUG + DISCARDS }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 234/245 ARM: dts: exynos: fix PWM LED max brightness on Odroid XU/XU3
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 75121e1dc9fe4def41e63d57f6a53749b88006ed ]
There is no "max_brightness" property. This brings the intentional brightness reduce of green LED and dtschema checks as well:
arch/arm/boot/dts/exynos5410-odroidxu.dt.yaml: led-controller-1: led-1: 'max-brightness' is a required property
--- arch/arm/boot/dts/exynos54xx-odroidxu-leds.dtsi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/boot/dts/exynos54xx-odroidxu-leds.dtsi +2 -2
@@ -25,7 +25,7 @@ * Green LED is much brighter than the others * so limit its max brightness */ - max_brightness = <127>; + max-brightness = <127>; linux,default-trigger = "mmc0"; };
@@ -33,7 +33,7 @@ label = "blue:heartbeat"; pwms = <&pwm 2 2000000 0>; pwm-names = "pwm2"; - max_brightness = <255>; + max-brightness = <255>; linux,default-trigger = "heartbeat"; }; };
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 235/245 ARM: dts: exynos: fix PWM LED max brightness on Odroid XU4
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
[ Upstream commit fd2f1717966535b7d0b6fe45cf0d79e94330da5f ]
There is no "max_brightness" property as pointed out by dtschema:
arch/arm/boot/dts/exynos5422-odroidxu4.dt.yaml: led-controller: led-1: 'max-brightness' is a required property
--- arch/arm/boot/dts/exynos5422-odroidxu4.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/exynos5422-odroidxu4.dts +1 -1
@@ -26,7 +26,7 @@ label = "blue:heartbeat"; pwms = <&pwm 2 2000000 0>; pwm-names = "pwm2"; - max_brightness = <255>; + max-brightness = <255>; linux,default-trigger = "heartbeat"; }; };
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 236/245 rtc: fix snprintf() checking in is_rtc_hctosys()
In reply to Greg Kroah-HartmanFrom: Dan Carpenter <[email protected]>
[ Upstream commit 54b909436ede47e0ee07f1765da27ec2efa41e84 ]
The scnprintf() function silently truncates the printf() and returns the number bytes that it was able to copy (not counting the NUL terminator). Thus, the highest value it can return here is "NAME_SIZE - 1" and the overflow check is dead code. Fix this by using the snprintf() function which returns the number of bytes that would have been copied if there was enough space and changing the condition from "> NAME_SIZE" to ">= NAME_SIZE".
--- drivers/rtc/rtc-proc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/rtc/rtc-proc.c +2 -2
@@ -26,8 +26,8 @@ static bool is_rtc_hctosys(struct rtc_device *rtc)int size;char name[NAME_SIZE ]; - size =scnprintf (name,NAME_SIZE ,"rtc%d" , rtc->id); -if (size >NAME_SIZE ) + size =snprintf (name,NAME_SIZE ,"rtc%d" , rtc->id); +if (size >=NAME_SIZE )return false;return !strncmp (name,CONFIG_RTC_HCTOSYS_DEVICE ,NAME_SIZE );
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 237/245 ARM: dts: r8a7779, marzen: Fix DU clock names
In reply to Greg Kroah-HartmanFrom: Geert Uytterhoeven <[email protected]>
[ Upstream commit 6ab8c23096a29b69044209a5925758a6f88bd450 ]
"make dtbs_check" complains:
arch/arm/boot/dts/r8a7779-marzen.dt.yaml: display@fff80000: clock-names:0: 'du.0' was expected
Change the first clock name to match the DT bindings.
This has no effect on actual operation, as the Display Unit driver in Linux does not use the first clock name on R-Car H1, but just grabs the first clock.
--- arch/arm/boot/dts/r8a7779-marzen.dts | 2 +- arch/arm/boot/dts/r8a7779.dtsi | 1 + 2 files changed, 2 insertions(+), 1 deletion(-)
arch/arm/boot/dts/r8a7779-marzen.dts +1 -1
@@ -136,7 +136,7 @@ status = "okay"; clocks = <&mstp1_clks R8A7779_CLK_DU>, <&x3_clk>; - clock-names = "du", "dclkin.0"; + clock-names = "du.0", "dclkin.0"; ports { port@0 {
arch/arm/boot/dts/r8a7779.dtsi +1 -0
@@ -431,6 +431,7 @@ reg = <0 0xfff80000 0 0x40000>; interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>; clocks = <&mstp1_clks R8A7779_CLK_DU>; + clock-names = "du.0"; power-domains = <&sysc R8A7779_PD_ALWAYS_ON>; status = "disabled";
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 238/245 reset: bail if try_module_get() fails
In reply to Greg Kroah-HartmanFrom: Philipp Zabel <[email protected]>
[ Upstream commit 4fb26fb83f0def3d39c14e268bcd4003aae8fade ]
Abort instead of returning a new reset control for a reset controller device that is going to have its module unloaded.
--- drivers/reset/core.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/reset/core.c +4 -1
@@ -263,7 +263,10 @@ static struct reset_control *__reset_control_get_internal(if (!rstc)return ERR_PTR (-ENOMEM ); -try_module_get (rcdev->owner); +if (!try_module_get (rcdev->owner)) { +kfree (rstc); +return ERR_PTR (-ENODEV ); + } rstc->rcdev = rcdev;list_add (&rstc->list, &rcdev->reset_control_head);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 239/245 memory: fsl_ifc: fix leak of IO mapping on probe failure
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 3b132ab67fc7a358fff35e808fa65d4bea452521 ]
On probe error the driver should unmap the IO memory. Smatch reports:
drivers/memory/fsl_ifc.c:298 fsl_ifc_ctrl_probe() warn: 'fsl_ifc_ctrl_dev->gregs' not released on lines: 298.
--- drivers/memory/fsl_ifc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/memory/fsl_ifc.c +2 -2
@@ -231,8 +231,7 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev) fsl_ifc_ctrl_dev->gregs =of_iomap (dev->dev.of_node,0 );if (!fsl_ifc_ctrl_dev->gregs) {dev_err (&dev->dev,"failed to get memory region\n" ); - ret = -ENODEV ; - goto err; +return -ENODEV ; }if (of_property_read_bool (dev->dev.of_node,"little-endian" )) {
@@ -308,6 +307,7 @@ err_irq:free_irq (fsl_ifc_ctrl_dev->irq, fsl_ifc_ctrl_dev);irq_dispose_mapping (fsl_ifc_ctrl_dev->irq); err: +iounmap (fsl_ifc_ctrl_dev->gregs);return ret; }
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 240/245 memory: fsl_ifc: fix leak of private memory on probe failure
In reply to Greg Kroah-HartmanFrom: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 8e0d09b1232d0538066c40ed4c13086faccbdff6 ]
On probe error the driver should free the memory allocated for private structure. Fix this by using resource-managed allocation.
--- drivers/memory/fsl_ifc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/memory/fsl_ifc.c +2 -2
@@ -109,7 +109,6 @@ static int fsl_ifc_ctrl_remove(struct platform_device *dev)iounmap (ctrl->gregs);dev_set_drvdata (&dev->dev,NULL ); -kfree (ctrl);return 0 ; }
@@ -221,7 +220,8 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev)dev_info (&dev->dev,"Freescale Integrated Flash Controller\n" ); - fsl_ifc_ctrl_dev =kzalloc (sizeof (*fsl_ifc_ctrl_dev),GFP_KERNEL ); + fsl_ifc_ctrl_dev =devm_kzalloc (&dev->dev,sizeof (*fsl_ifc_ctrl_dev), +GFP_KERNEL );if (!fsl_ifc_ctrl_dev)return -ENOMEM ;
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 241/245 ARM: dts: am335x: align ti,pindir-d0-out-d1-in property with dt-shema
In reply to Greg Kroah-HartmanFrom: Aswath Govindraju <[email protected]>
[ Upstream commit 414bfe1d26b60ef20b58e36efd5363188a694bab ]
ti,pindir-d0-out-d1-in property is expected to be of type boolean. Therefore, fix the property accordingly.
--- arch/arm/boot/dts/am335x-cm-t335.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/am335x-cm-t335.dts +1 -1
@@ -552,7 +552,7 @@ status = "okay"; status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&spi0_pins>; - ti,pindir-d0-out-d1-in = <1>; + ti,pindir-d0-out-d1-in; /* WLS1271 WiFi */ wlcore: wlcore@1 { compatible = "ti,wl1271";
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 242/245 scsi: be2iscsi: Fix an error handling path in beiscsi_dev_probe()
In reply to Greg Kroah-HartmanFrom: Christophe JAILLET <[email protected]>
[ Upstream commit 030e4138d11fced3b831c2761e4cecf347bae99c ]
If an error occurs after a pci_enable_pcie_error_reporting() call, it must be undone by a corresponding pci_disable_pcie_error_reporting() call, as already done in the remove function.
--- drivers/scsi/be2iscsi/be_main.c | 1 + 1 file changed, 1 insertion(+)
drivers/scsi/be2iscsi/be_main.c +1 -0
@@ -5847,6 +5847,7 @@ hba_free:pci_disable_msix (phba->pcidev);pci_dev_put (phba->pcidev);iscsi_host_free (phba->shost); +pci_disable_pcie_error_reporting (pcidev);pci_set_drvdata (pcidev,NULL ); disable_pci:pci_release_regions (pcidev);
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 243/245 mips: always link byteswap helpers into decompressor
In reply to Greg Kroah-HartmanFrom: Arnd Bergmann <[email protected]>
[ Upstream commit cddc40f5617e53f97ef019d5b29c1bd6cbb031ec ]
My series to clean up the unaligned access implementation across architectures caused some mips randconfig builds to fail with:
mips64-linux-ld: arch/mips/boot/compressed/decompress.o: in function `decompress_kernel':
decompress.c:(.text.decompress_kernel+0x54): undefined reference to `__bswapsi2'
It turns out that this problem has already been fixed for the XZ decompressor but now it also shows up in (at least) LZO and LZ4. From my analysis I concluded that the compiler could always have emitted those calls, but the different implementation allowed it to make otherwise better decisions about not inlining the byteswap, which results in the link error when the out-of-line code is missing.
While it could be addressed by adding it to the two decompressor implementations that are known to be affected, but as this only adds 112 bytes to the kernel, the safer choice is to always add them.
--- arch/mips/boot/compressed/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/mips/boot/compressed/Makefile +2 -2
@@ -33,7 +33,7 @@ KBUILD_AFLAGS := $(LINUXINCLUDE) $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ KCOV_INSTRUMENT := n # decompressor objects (linked with vmlinuz) -vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o +vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o $(obj)/bswapsi.o ifdef CONFIG_DEBUG_ZBOOT vmlinuzobjs-$(CONFIG_DEBUG_ZBOOT) += $(obj)/dbg.o
@@ -47,7 +47,7 @@ extra-y += uart-ath79.c $(obj)/uart-ath79.c: $(srctree)/arch/mips/ath79/early_printk.c $(call cmd,shipped) -vmlinuzobjs-$(CONFIG_KERNEL_XZ) += $(obj)/ashldi3.o $(obj)/bswapsi.o +vmlinuzobjs-$(CONFIG_KERNEL_XZ) += $(obj)/ashldi3.o extra-y += ashldi3.c bswapsi.c $(obj)/ashldi3.o $(obj)/bswapsi.o: KBUILD_CFLAGS += -I$(srctree)/arch/mips/lib
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 244/245 mips: disable branch profiling in boot/decompress.o
In reply to Greg Kroah-HartmanFrom: Randy Dunlap <[email protected]>
[ Upstream commit 97e488073cfca0eea84450169ca4cbfcc64e33e3 ]
Use DISABLE_BRANCH_PROFILING for arch/mips/boot/compressed/decompress.o to prevent linkage errors.
mips64-linux-ld: arch/mips/boot/compressed/decompress.o: in function `LZ4_decompress_fast_extDict':
decompress.c:(.text+0x8c): undefined reference to `ftrace_likely_update'
mips64-linux-ld: decompress.c:(.text+0xf4): undefined reference to `ftrace_likely_update'
mips64-linux-ld: decompress.c:(.text+0x200): undefined reference to `ftrace_likely_update'
mips64-linux-ld: decompress.c:(.text+0x230): undefined reference to `ftrace_likely_update'
mips64-linux-ld: decompress.c:(.text+0x320): undefined reference to `ftrace_likely_update'
mips64-linux-ld: arch/mips/boot/compressed/decompress.o:decompress.c:(.text+0x3f4): more undefined references to `ftrace_likely_update' follow
--- arch/mips/boot/compressed/decompress.c | 2 ++ 1 file changed, 2 insertions(+)
arch/mips/boot/compressed/decompress.c +2 -0
@@ -11,6 +11,8 @@* option) any later version. */ +#define DISABLE_BRANCH_PROFILING +#include <linux/types.h> #include <linux/kernel.h> #include <linux/string.h>
Signature · 1 line
2.30.2
Greg Kroah-Hartman
maintainerPATCH 245/245 MIPS: vdso: Invalid GIC access through VDSO
In reply to Greg Kroah-HartmanFrom: Martin Fäcknitz <[email protected]>
[ Upstream commit 47ce8527fbba145a7723685bc9a27d9855e06491 ]
Accessing raw timers (currently only CLOCK_MONOTONIC_RAW) through VDSO doesn't return the correct time when using the GIC as clock source. The address of the GIC mapped page is in this case not calculated correctly. The GIC mapped page is calculated from the VDSO data by subtracting PAGE_SIZE:
void *get_gic(const struct vdso_data *data) {
return (void __iomem *)data - PAGE_SIZE;
}However, the data pointer is not page aligned for raw clock sources. This is because the VDSO data for raw clock sources (CS_RAW = 1) is stored after the VDSO data for coarse clock sources (CS_HRES_COARSE = 0). Therefore, only the VDSO data for CS_HRES_COARSE is page aligned:
+--------------------+ | | | vd[CS_RAW] | ---+ | vd[CS_HRES_COARSE] | | +--------------------+ | -PAGE_SIZE | | | | GIC mapped page | <--+ | | +--------------------+
When __arch_get_hw_counter() is called with &vd[CS_RAW], get_gic returns the wrong address (somewhere inside the GIC mapped page). The GIC counter values are not returned which results in an invalid time.
--- arch/mips/vdso/vdso.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/mips/vdso/vdso.h +1 -1
@@ -81,7 +81,7 @@ static inline const union mips_vdso_data *get_vdso_data(void)static inline void __iomem *get_gic (const union mips_vdso_data *data) { -return (void __iomem *)data -PAGE_SIZE ; +return (void __iomem *)((unsigned long )data &PAGE_MASK ) -PAGE_SIZE ; }#endif /* CONFIG_CLKSRC_MIPS_GIC */
Signature · 1 line
2.30.2
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.276 release. There are 245 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 Wed, 21 Jul 2021 14:47:42 +0000. 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.9.276-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
On ARCH_BRCMSTB, using 32-bit and 64-bit ARM kernels:
Signature · 1 line
Florian
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.276 release. There are 245 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 Wed, 21 Jul 2021 14:47:42 +0000. 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.276-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 system. No dmesg regressions.
thanks,
-- Shuah
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.276 release. There are 245 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 Wed, 21 Jul 2021 14:47:42 +0000. 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.9.276-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
All tests passing for Tegra ...
Test results for stable-v4.9:
8 builds: 8 pass, 0 fail
16 boots: 16 pass, 0 fail
32 tests: 32 pass, 0 failLinux version: 4.9.276-rc1-g04afcb7e33f5
Boards tested: tegra124-jetson-tk1, tegra20-ventana,
tegra210-p2371-2180, tegra30-cardhu-a04
Jon
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.276 release. There are 245 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 Wed, 21 Jul 2021 14:47:42 +0000. 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.9.276-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
All tests passing for Tegra ...
Test results for stable-v4.9:
8 builds: 8 pass, 0 fail
16 boots: 16 pass, 0 fail
32 tests: 32 pass, 0 failLinux version: 4.9.276-rc1-g04afcb7e33f5
Boards tested: tegra124-jetson-tk1, tegra20-ventana,
tegra210-p2371-2180, tegra30-cardhu-a04
Jon
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.276 release. There are 245 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 Wed, 21 Jul 2021 14:47:42 +0000. Anything received after that time might be too late.
Build results:
total: 163 pass: 163 fail: 0 Qemu test results: total: 384 pass: 384 fail: 0
Guenter
Naresh Kamboju
Tested-by Linux Kernel Functional Testing Tested-by Linux Kernel Functional Testing on the v1 seriesQuoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.276 release. There are 245 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 Wed, 21 Jul 2021 14:47:42 +0000. 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.9.276-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
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
## Build
* kernel: 4.9.276-rc1
* git: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
* git branch: linux-4.9.y
* git commit: 04afcb7e33f59d83d1e1bf39a8c0d9bbe6df454c
* git describe: v4.9.275-246-g04afcb7e33f5
* test details:
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-4.9.y/build/v4.9.275-246-g04afcb7e33f5
## Regressions (compared to v4.9.275-185-g85e806546048) No regressions found.
## No fixes (compared to v4.9.275-185-g85e806546048)
## Test result summary
total: 58298, pass: 45562, fail: 520, skip: 10368, xfail: 1848,
## Build Summary
* arm: 97 total, 97 passed, 0 failed
* arm64: 24 total, 24 passed, 0 failed
* dragonboard-410c: 1 total, 1 passed, 0 failed
* hi6220-hikey: 1 total, 1 passed, 0 failed
* i386: 14 total, 14 passed, 0 failed
* juno-r2: 1 total, 1 passed, 0 failed
* mips: 36 total, 36 passed, 0 failed
* sparc: 9 total, 9 passed, 0 failed
* x15: 1 total, 1 passed, 0 failed
* x86: 1 total, 1 passed, 0 failed
* x86_64: 14 total, 14 passed, 0 failed
## Test suites summary
* fwts
* igt-gpu-tools
* install-android-platform-tools-r2600
* kselftest-android
* kselftest-bpf
* kselftest-breakpoints
* kselftest-capabilities
* kselftest-cgroup
* kselftest-clone3
* kselftest-core
* kselftest-cpu-hotplug
* kselftest-cpufreq
* kselftest-drivers
* kselftest-efivarfs
* kselftest-filesystems
* kselftest-firmware
* kselftest-fpu
* kselftest-futex
* kselftest-gpio
* kselftest-intel_pstate
* kselftest-ipc
* kselftest-ir
* kselftest-kcmp
* kselftest-kexec
* kselftest-kvm
* kselftest-lib
* kselftest-livepatch
* kselftest-lkdtm
* kselftest-membarrier
* kselftest-memfd
* kselftest-memory-hotplug
* kselftest-mincore
* kselftest-mount
* kselftest-mqueue
* kselftest-net
* kselftest-netfilter
* kselftest-nsfs
* kselftest-openat2
* kselftest-pid_namespace
* kselftest-pidfd
* kselftest-proc
* kselftest-pstore
* kselftest-ptrace
* kselftest-rseq
* kselftest-rtc
* kselftest-seccomp
* kselftest-sigaltstack
* kselftest-size
* kselftest-splice
* kselftest-static_keys
* kselftest-sync
* kselftest-sysctl
* kselftest-timens
* kselftest-timens[
* kselftest-timers
* kselftest-tmpfs
* kselftest-tpm2
* kselftest-user
* kselftest-vm
* kselftest-x86
* kselftest-zram
* kvm-unit-tests
* libhugetlbfs
* linux-log-parser
* ltp-cap_bounds-tests
* ltp-commands-tests
* ltp-containers-tests
* ltp-controllers-tests
* ltp-cpuhotplug-tests
* ltp-crypto-tests
* ltp-cve-tests
* ltp-dio-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-mm-tests
* ltp-nptl-tests
* ltp-open-posix-tests
* ltp-pty-tests
* ltp-sched-tests
* ltp-securebits-tests
* ltp-syscalls-tests
* ltp-tracing-tests
* network-basic-tests
* packetdrill
* perf
* ssuite
* v4l2-compliance
--
Linaro LKFT
https://lkft.linaro.org