3.14.8-stable review
Subsystems (2)
Greg Kroah-Hartman
maintainercover 3.14.8-stable review
This is the start of the stable review cycle for the 3.14.8 release. There are 19 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 Sat Jun 14 23:21:28 UTC 2014. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
kernel.org/pub/linux/kernel/v3.0/stable-review/patch-3.14.8-rc1.gz
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 3.14.8-rc1
Andreas Schrägle <[email protected]>
ahci: add PCI ID for Marvell 88SE91A0 SATA Controller
Jérôme Carretero <[email protected]>
ahci: Add Device ID for HighPoint RocketRaid 642L
Alessandro Miceli <[email protected]>
rtl28xxu: add [1b80:d3af] Sveon STV27
Alessandro Miceli <[email protected]>
rtl28xxu: add [1b80:d39d] Sveon STV20
Brian Healy <[email protected]>
rtl28xxu: add 1b80:d395 Peak DVB-T USB
Jan Vcelak <[email protected]>
rtl28xxu: add chipset version comments into device list
Jan Vcelak <[email protected]>
rtl28xxu: add USB ID for Genius TVGo DVB-T03
Till Dörges <[email protected]>
rtl28xxu: add ID [0ccd:00b4] TerraTec NOXON DAB Stick (rev 3)
Tomas Winkler <[email protected]>
mei: me: read H_CSR after asserting reset
Tomas Winkler <[email protected]>
mei: me: drop harmful wait optimization
Tomas Winkler <[email protected]>
mei: me: fix hw ready reset flow
Alexei Starovoitov <[email protected]>
PCI/MSI: Fix memory leak in free_msi_irqs()
Andy Lutomirski <[email protected]>
auditsc: audit_krule mask accesses need bounds checking
Nicholas Bellinger <[email protected]>
target: Allow READ_CAPACITY opcode in ALUA Standby access state
Nicholas Bellinger <[email protected]>
iser-target: Fix multi network portal shutdown regression
Sagi Grimberg <[email protected]>
Target/iscsi,iser: Avoid accepting transport connections during stop stage
Markos Chandras <[email protected]>
MIPS: asm: thread_info: Add _TIF_SECCOMP flag
Florian Westphal <[email protected]>
netfilter: ipv4: defrag: set local_df flag on defragmented skb
Andy Lutomirski <[email protected]>
fs,userns: Change inode_capable to capable_wrt_inode_uidgid
-------------
Diffstat:
Makefile | 4 ++-- arch/mips/include/asm/thread_info.h | 3 ++- drivers/ata/ahci.c | 4 ++++ drivers/infiniband/ulp/isert/ib_isert.c | 8 ++++++++ drivers/media/dvb-core/dvb-usb-ids.h | 3 +++ drivers/media/usb/dvb-usb-v2/rtl28xxu.c | 15 ++++++++++++++- drivers/misc/mei/hw-me.c | 25 +++++++++++++++++++------ drivers/pci/msi.c | 2 +- drivers/target/iscsi/iscsi_target.c | 1 + drivers/target/iscsi/iscsi_target_core.h | 1 + drivers/target/iscsi/iscsi_target_login.c | 1 + drivers/target/iscsi/iscsi_target_tpg.c | 2 ++ drivers/target/target_core_alua.c | 9 +++++++++ fs/attr.c | 8 ++++---- fs/inode.c | 10 +++++++--- fs/namei.c | 11 ++++++----- fs/xfs/xfs_ioctl.c | 2 +- include/linux/capability.h | 2 +- kernel/auditsc.c | 27 ++++++++++++++++++--------- kernel/capability.c | 20 ++++++++------------ net/ipv4/netfilter/nf_defrag_ipv4.c | 5 +++-- 21 files changed, 115 insertions(+), 48 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 5/19 iser-target: Fix multi network portal shutdown regression
3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nicholas Bellinger <[email protected]>
commit 2363d196686e44c0158929e7cf96c8589a24a81b upstream.
This patch fixes a iser-target specific regression introduced in v3.15-rc6 with:
commit 14f4b54fe38f3a8f8392a50b951c8aa43b63687a
Author: Sagi Grimberg <[email protected]> Date: Tue Apr 29 13:13:47 2014 +0300
Target/iscsi,iser: Avoid accepting transport connections during stop stage
where the change to set iscsi_np->enabled = false within iscsit_clear_tpg_np_login_thread() meant that a iscsi_np with two iscsi_tpg_np exports would have it's parent iscsi_np set to a disabled state, even if other iscsi_tpg_np exports still existed.
This patch changes iscsit_clear_tpg_np_login_thread() to only set iscsi_np->enabled = false when shutdown = true, and also changes iscsit_del_np() to set iscsi_np->enabled = true when iscsi_np->np_exports is non zero.
--- drivers/target/iscsi/iscsi_target.c | 1 + drivers/target/iscsi/iscsi_target_tpg.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-)
drivers/target/iscsi/iscsi_target.c +1 -0
@@ -460,6 +460,7 @@ int iscsit_del_np(struct iscsi_np *np)spin_lock_bh (&np->np_thread_lock); np->np_exports--;if (np->np_exports) { + np->enabled = true;spin_unlock_bh (&np->np_thread_lock);return 0 ; }
drivers/target/iscsi/iscsi_target_tpg.c +2 -1
@@ -184,7 +184,8 @@ static void iscsit_clear_tpg_np_login_threturn ; } - tpg_np->tpg_np->enabled = false; +if (shutdown) + tpg_np->tpg_np->enabled = false;iscsit_reset_np_thread (tpg_np->tpg_np, tpg_np, tpg, shutdown); }
Greg Kroah-Hartman
maintainerPATCH 6/19 target: Allow READ_CAPACITY opcode in ALUA Standby access state
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nicholas Bellinger <[email protected]>
commit e7810c2d2c37fa8e58dda74b00790dab60fe6fba upstream.
This patch allows READ_CAPACITY + SAI_READ_CAPACITY_16 opcode processing to occur while the associated ALUA group is in Standby access state.
This is required to avoid host side LUN probe failures during the initial scan if an ALUA group has already implicitly changed into Standby access state.
This addresses a bug reported by Chris + Philip using dm-multipath
+ ESX hosts configured with ALUA multipath.
(Drop v3.15 specific set_ascq usage - nab)
--- drivers/target/target_core_alua.c | 9 +++++++++ 1 file changed, 9 insertions(+)
drivers/target/target_core_alua.c +9 -0
@@ -564,7 +564,16 @@ static inline int core_alua_state_standbcase REPORT_LUNS :case RECEIVE_DIAGNOSTIC :case SEND_DIAGNOSTIC : +case READ_CAPACITY :return 0 ; +case SERVICE_ACTION_IN : +switch (cdb[1 ] &0x1f ) { +case SAI_READ_CAPACITY_16 : +return 0 ; +default : + *alua_ascq =ASCQ_04H_ALUA_TG_PT_STANDBY ; +return 1 ; + }case MAINTENANCE_IN :switch (cdb[1 ] &0x1f ) {case MI_REPORT_TARGET_PGS :
Greg Kroah-Hartman
maintainerPATCH 7/19 auditsc: audit_krule mask accesses need bounds checking
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andy Lutomirski <[email protected]>
commit a3c54931199565930d6d84f4c3456f6440aefd41 upstream.
Fixes an easy DoS and possible information disclosure.
This does nothing about the broken state of x32 auditing.
eparis: If the admin has enabled auditd and has specifically loaded audit rules. This bug has been around since before git. Wow...
--- kernel/auditsc.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-)
kernel/auditsc.c +18 -9
@@ -720,6 +720,22 @@ static enum audit_state audit_filter_tasreturn AUDIT_BUILD_CONTEXT ; } +static int audit_in_mask (const struct audit_krule *rule,unsigned long val) +{ +int word, bit; + +if (val >0xffffffff ) +return false; + + word =AUDIT_WORD (val); +if (word >=AUDIT_BITMASK_SIZE ) +return false; + + bit =AUDIT_BIT (val); + +return rule->mask[word] & bit; +} +/* At syscall entry and exit time, this filter is called if the * audit_state is not low enough that auditing cannot take place, but is * also not high enough that we already know we have to write an audit
@@ -737,11 +753,8 @@ static enum audit_state audit_filter_sysrcu_read_lock ();if (!list_empty (list)) { -int word =AUDIT_WORD (ctx->major); -int bit =AUDIT_BIT (ctx->major); -list_for_each_entry_rcu (e, list, list) { -if ((e->rule.mask[word] & bit) == bit && +if (audit_in_mask (&e->rule, ctx->major) &&audit_filter_rules (tsk, &e->rule, ctx,NULL , &state, false)) {rcu_read_unlock ();
@@ -761,20 +774,16 @@ static enum audit_state audit_filter_sysstatic int audit_filter_inode_name (struct task_struct *tsk,struct audit_names *n,struct audit_context *ctx) { -int word, bit;int h =audit_hash_ino ((u32 )n->ino);struct list_head *list = &audit_inode_hash[h];struct audit_entry *e;enum audit_state state; - word =AUDIT_WORD (ctx->major); - bit =AUDIT_BIT (ctx->major); -if (list_empty (list))return 0 ;list_for_each_entry_rcu (e, list, list) { -if ((e->rule.mask[word] & bit) == bit && +if (audit_in_mask (&e->rule, ctx->major) &&audit_filter_rules (tsk, &e->rule, ctx, n, &state, false)) { ctx->current_state = state;return 1 ;
Greg Kroah-Hartman
maintainerPATCH 17/19 rtl28xxu: add [1b80:d3af] Sveon STV27
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alessandro Miceli <[email protected]>
commit 74a86272f05c3dae40f2d7b17ff09a0608cf3304 upstream.
Added support for Sveon STV27 device (rtl2832u + FC0013 tuner)
--- drivers/media/dvb-core/dvb-usb-ids.h | 1 + drivers/media/usb/dvb-usb-v2/rtl28xxu.c | 2 ++ 2 files changed, 3 insertions(+)
drivers/media/dvb-core/dvb-usb-ids.h +1 -0
@@ -376,4 +376,5 @@#define USB_PID_CTVDIGDUAL_V2 0xe410#define USB_PID_PCTV_2002E 0x025c#define USB_PID_PCTV_2002E_SE 0x025d +#define USB_PID_SVEON_STV27 0xd3af#endif
drivers/media/usb/dvb-usb-v2/rtl28xxu.c +2 -0
@@ -1439,6 +1439,8 @@ static const struct usb_device_id rtl28x &rtl2832u_props, "Peak DVB-T USB", NULL) }, {DVB_USB_DEVICE (USB_VID_KWORLD_2 ,USB_PID_SVEON_STV20_RTL2832U , &rtl2832u_props, "Sveon STV20", NULL) }, + { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV27, + &rtl2832u_props, "Sveon STV27", NULL) },/* RTL2832P devices: */ { DVB_USB_DEVICE(USB_VID_HANFTEK, 0x0131,
Greg Kroah-Hartman
maintainerPATCH 3/19 MIPS: asm: thread_info: Add _TIF_SECCOMP flag
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Markos Chandras <[email protected]>
commit 137f7df8cead00688524c82360930845396b8a21 upstream.
Add _TIF_SECCOMP flag to _TIF_WORK_SYSCALL_ENTRY to indicate that the system call needs to be checked against a seccomp filter.
Patchwork: https://patchwork.linux-mips.org/patch/6405/
--- arch/mips/include/asm/thread_info.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/mips/include/asm/thread_info.h +2 -1
@@ -136,7 +136,8 @@ static inline struct thread_info *curren#define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT)#define _TIF_WORK_SYSCALL_ENTRY (_TIF_NOHZ | _TIF_SYSCALL_TRACE | \ - _TIF_SYSCALL_AUDIT | _TIF_SYSCALL_TRACEPOINT) + _TIF_SYSCALL_AUDIT | \ + _TIF_SYSCALL_TRACEPOINT | _TIF_SECCOMP)/* work to do in syscall_trace_leave() */ #define _TIF_WORK_SYSCALL_EXIT (_TIF_NOHZ | _TIF_SYSCALL_TRACE | \
Greg Kroah-Hartman
maintainerPATCH 1/19 fs,userns: Change inode_capable to capable_wrt_inode_uidgid
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andy Lutomirski <[email protected]>
commit 23adbe12ef7d3d4195e80800ab36b37bee28cd03 upstream.
The kernel has no concept of capabilities with respect to inodes; inodes exist independently of namespaces. For example, inode_capable(inode, CAP_LINUX_IMMUTABLE) would be nonsense.
This patch changes inode_capable to check for uid and gid mappings and renames it to capable_wrt_inode_uidgid, which should make it more obvious what it does.
Fixes CVE-2014-4014.
--- fs/attr.c | 8 ++++---- fs/inode.c | 10 +++++++--- fs/namei.c | 11 ++++++----- fs/xfs/xfs_ioctl.c | 2 +- include/linux/capability.h | 2 +- kernel/capability.c | 20 ++++++++------------ 6 files changed, 27 insertions(+), 26 deletions(-)
fs/attr.c +4 -4
@@ -50,14 +50,14 @@ int inode_change_ok(const struct inode *if ((ia_valid &ATTR_UID ) && (!uid_eq (current_fsuid (), inode->i_uid) || !uid_eq (attr->ia_uid, inode->i_uid)) && - !inode_capable (inode,CAP_CHOWN )) + !capable_wrt_inode_uidgid (inode,CAP_CHOWN ))return -EPERM ;/* Make sure caller can chgrp. */ if ((ia_valid &ATTR_GID ) && (!uid_eq (current_fsuid (), inode->i_uid) || (!in_group_p (attr->ia_gid) && !gid_eq (attr->ia_gid, inode->i_gid))) && - !inode_capable (inode,CAP_CHOWN )) + !capable_wrt_inode_uidgid (inode,CAP_CHOWN ))return -EPERM ;/* Make sure a caller can chmod. */
@@ -67,7 +67,7 @@ int inode_change_ok(const struct inode */* Also check the setgid bit! */ if (!in_group_p ((ia_valid &ATTR_GID ) ? attr->ia_gid : inode->i_gid) && - !inode_capable (inode,CAP_FSETID )) + !capable_wrt_inode_uidgid (inode,CAP_FSETID )) attr->ia_mode &= ~S_ISGID ; }
@@ -160,7 +160,7 @@ void setattr_copy(struct inode *inode, cumode_t mode = attr->ia_mode;if (!in_group_p (inode->i_gid) && - !inode_capable (inode,CAP_FSETID )) + !capable_wrt_inode_uidgid (inode,CAP_FSETID )) mode &= ~S_ISGID ; inode->i_mode = mode; }
fs/inode.c +7 -3
@@ -1840,14 +1840,18 @@ EXPORT_SYMBOL(inode_init_owner);* inode_owner_or_capable - check current task permissions to inode * @inode: inode being checked * -* Return true if current either has CAP_FOWNER to the inode, or -* owns the file. +* Return true if current either has CAP_FOWNER in a namespace with the +* inode owner uid mapped, or owns the file. */ bool inode_owner_or_capable (const struct inode *inode) { +struct user_namespace *ns; +if (uid_eq (current_fsuid (), inode->i_uid))return true; -if (inode_capable (inode,CAP_FOWNER )) + + ns =current_user_ns (); +if (ns_capable (ns,CAP_FOWNER ) &&kuid_has_mapping (ns, inode->i_uid))return true;return false; }
fs/namei.c +6 -5
@@ -332,10 +332,11 @@ int generic_permission(struct inode *inoif (S_ISDIR (inode->i_mode)) {/* DACs are overridable for directories */ -if (inode_capable (inode,CAP_DAC_OVERRIDE )) +if (capable_wrt_inode_uidgid (inode,CAP_DAC_OVERRIDE ))return 0 ;if (!(mask &MAY_WRITE )) -if (inode_capable (inode,CAP_DAC_READ_SEARCH )) +if (capable_wrt_inode_uidgid (inode, +CAP_DAC_READ_SEARCH ))return 0 ;return -EACCES ; }
@@ -345,7 +346,7 @@ int generic_permission(struct inode *ino* at least one exec bit set. */ if (!(mask &MAY_EXEC ) || (inode->i_mode &S_IXUGO )) -if (inode_capable (inode,CAP_DAC_OVERRIDE )) +if (capable_wrt_inode_uidgid (inode,CAP_DAC_OVERRIDE ))return 0 ;/*
@@ -353,7 +354,7 @@ int generic_permission(struct inode *ino*/ mask &=MAY_READ |MAY_WRITE |MAY_EXEC ;if (mask ==MAY_READ ) -if (inode_capable (inode,CAP_DAC_READ_SEARCH )) +if (capable_wrt_inode_uidgid (inode,CAP_DAC_READ_SEARCH ))return 0 ;return -EACCES ;
@@ -2370,7 +2371,7 @@ static inline int check_sticky(struct inreturn 0 ;if (uid_eq (dir->i_uid, fsuid))return 0 ; -return !inode_capable (inode,CAP_FOWNER ); +return !capable_wrt_inode_uidgid (inode,CAP_FOWNER ); }/*
fs/xfs/xfs_ioctl.c +1 -1
@@ -1241,7 +1241,7 @@ xfs_ioctl_setattr(* cleared upon successful return from chown() */ if ((ip->i_d.di_mode & (S_ISUID |S_ISGID )) && - !inode_capable (VFS_I (ip),CAP_FSETID )) + !capable_wrt_inode_uidgid (VFS_I (ip),CAP_FSETID )) ip->i_d.di_mode &= ~(S_ISUID |S_ISGID );/*
include/linux/capability.h +1 -1
@@ -210,7 +210,7 @@ extern bool has_ns_capability_noaudit(st struct user_namespace *ns, int cap);extern bool capable (int cap);extern bool ns_capable (struct user_namespace *ns,int cap); -extern bool inode_capable (const struct inode *inode,int cap); +extern bool capable_wrt_inode_uidgid (const struct inode *inode,int cap);extern bool file_ns_capable (const struct file *file,struct user_namespace *ns,int cap);/* audit system wants to get cap info from files as well */
kernel/capability.c +8 -12
@@ -433,23 +433,19 @@ bool capable(int cap)EXPORT_SYMBOL (capable);/** -* inode_capable - Check superior capability over inode +* capable_wrt_inode_uidgid - Check nsown_capable and uid and gid mapped * @inode: The inode in question * @cap: The capability in question * -* Return true if the current task has the given superior capability -* targeted at it's own user namespace and that the given inode is owned -* by the current user namespace or a child namespace. -* -* Currently we check to see if an inode is owned by the current -* user namespace by seeing if the inode's owner maps into the -* current user namespace. -* +* Return true if the current task has the given capability targeted at +* its own user namespace and that the given inode's uid and gid are +* mapped into the current user namespace. */ -bool inode_capable (const struct inode *inode,int cap) +bool capable_wrt_inode_uidgid (const struct inode *inode,int cap) {struct user_namespace *ns =current_user_ns (); -return ns_capable (ns, cap) &&kuid_has_mapping (ns, inode->i_uid); +return ns_capable (ns, cap) &&kuid_has_mapping (ns, inode->i_uid) && +kgid_has_mapping (ns, inode->i_gid); } -EXPORT_SYMBOL (inode_capable); +EXPORT_SYMBOL (capable_wrt_inode_uidgid);
Greg Kroah-Hartman
maintainerPATCH 2/19 netfilter: ipv4: defrag: set local_df flag on defragmented skb
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Florian Westphal <[email protected]>
commit 895162b1101b3ea5db08ca6822ae9672717efec0 upstream.
else we may fail to forward skb even if original fragments do fit outgoing link mtu:
1. remote sends 2k packets in two 1000 byte frags, DF set
2. we want to forward but only see '2k > mtu and DF set'
3. we then send icmp error saying that outgoing link is 1500
But original sender never sent a packet that would not fit the outgoing link.
Setting local_df makes outgoing path test size vs. IPCB(skb)->frag_max_size, so we will still send the correct error in case the largest original size did not fit outgoing link mtu.
--- net/ipv4/netfilter/nf_defrag_ipv4.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
net/ipv4/netfilter/nf_defrag_ipv4.c +3 -2
@@ -22,7 +22,6 @@#endif #include <net/netfilter/nf_conntrack_zones.h> -/* Returns new sk_buff, or NULL */ static int nf_ct_ipv4_gather_frags (struct sk_buff *skb,u_int32_t user) {int err;
@@ -33,8 +32,10 @@ static int nf_ct_ipv4_gather_frags(struc err =ip_defrag (skb, user);local_bh_enable (); -if (!err) +if (!err) {ip_send_check (ip_hdr (skb)); + skb->local_df =1 ; + }return err; }
Greg Kroah-Hartman
maintainerPATCH 4/19 Target/iscsi,iser: Avoid accepting transport connections during stop stage
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sagi Grimberg <[email protected]>
commit 14f4b54fe38f3a8f8392a50b951c8aa43b63687a upstream.
When the target is in stop stage, iSER transport initiates RDMA disconnects. The iSER initiator may wish to establish a new connection over the still existing network portal. In this case iSER transport should not accept and resume new RDMA connections. In order to learn that, iscsi_np is added with enabled flag so the iSER transport can check when deciding weather to accept and resume a new connection request.
The iscsi_np is enabled after successful transport setup, and disabled before iscsi_np login threads are cleaned up.
--- drivers/infiniband/ulp/isert/ib_isert.c | 8 ++++++++ drivers/target/iscsi/iscsi_target_core.h | 1 + drivers/target/iscsi/iscsi_target_login.c | 1 + drivers/target/iscsi/iscsi_target_tpg.c | 1 + 4 files changed, 11 insertions(+)
drivers/infiniband/ulp/isert/ib_isert.c +8 -0
@@ -489,6 +489,14 @@ isert_connect_request(struct rdma_cm_idstruct ib_device *ib_dev = cma_id->device;int ret =0 ; +spin_lock_bh (&np->np_thread_lock); +if (!np->enabled) { +spin_unlock_bh (&np->np_thread_lock); +pr_debug ("iscsi_np is not enabled, reject connect request\n" ); +return rdma_reject (cma_id,NULL ,0 ); + } +spin_unlock_bh (&np->np_thread_lock); +pr_debug ("Entering isert_connect_request cma_id: %p, context: %p\n" , cma_id, cma_id->context);
drivers/target/iscsi/iscsi_target_core.h +1 -0
@@ -773,6 +773,7 @@ struct iscsi_np {int np_ip_proto;int np_sock_type;enum np_thread_state_table np_thread_state; +bool enabled;enum iscsi_timer_flags_table np_login_timer_flags;u32 np_exports;enum np_flags_table np_flags;
drivers/target/iscsi/iscsi_target_login.c +1 -0
@@ -981,6 +981,7 @@ int iscsi_target_setup_login_socket( } np->np_transport = t; + np->enabled = true;return 0 ; }
drivers/target/iscsi/iscsi_target_tpg.c +1 -0
@@ -184,6 +184,7 @@ static void iscsit_clear_tpg_np_login_threturn ; } + tpg_np->tpg_np->enabled = false;iscsit_reset_np_thread (tpg_np->tpg_np, tpg_np, tpg, shutdown); }
Greg Kroah-Hartman
maintainerPATCH 8/19 PCI/MSI: Fix memory leak in free_msi_irqs()
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexei Starovoitov <[email protected]>
commit b701c0b1fe819a2083fc6ec5332e0e4492b9516d upstream.
free_msi_irqs() is leaking memory, since list_for_each_entry(entry, &dev->msi_list, list) {...} is never executed, because dev->msi_list is made empty by the loop just above this one.
Fix it by relying on zero termination of attribute array like populate_msi_sysfs() does.
--- drivers/pci/msi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/pci/msi.c +1 -1
@@ -414,7 +414,7 @@ static void free_msi_irqs(struct pci_devif (dev->msi_irq_groups) {sysfs_remove_groups (&dev->dev.kobj, dev->msi_irq_groups); msi_attrs = dev->msi_irq_groups[0 ]->attrs; -list_for_each_entry (entry, &dev->msi_list, list) { +while (msi_attrs[count]) { dev_attr =container_of (msi_attrs[count], struct device_attribute, attr);kfree (dev_attr->attr.name);
Greg Kroah-Hartman
maintainerPATCH 9/19 mei: me: fix hw ready reset flow
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tomas Winkler <[email protected]>
commit b04ada92ffaabb868497a1fce8e4f6bf74e5488f upstream.
We cleared H_RST for H_CSR on spurious interrupt generated when ME_RDY while cleared and not while ME_RDY is set. The spurious interrupt is not delivered on all platforms in this case the
driver may fail to initialize.
--- drivers/misc/mei/hw-me.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
drivers/misc/mei/hw-me.c +6 -3
@@ -164,6 +164,9 @@ static void mei_me_hw_reset_release(stru hcsr |=H_IG ; hcsr &= ~H_RST ;mei_hcsr_set (hw, hcsr); + +/* complete this write before we set host ready on another CPU */ +mmiowb (); }/** * mei_me_hw_reset - resets fw via mei csr register.
@@ -201,6 +204,7 @@ static int mei_me_hw_reset(struct mei_destatic void mei_me_host_set_ready (struct mei_device *dev) {struct mei_me_hw *hw =to_me_hw (dev); + hw->host_hw_state =mei_hcsr_read (hw); hw->host_hw_state |=H_IE |H_IG |H_RDY ;mei_hcsr_set (hw, hw->host_hw_state); }
@@ -491,14 +495,13 @@ irqreturn_t mei_me_irq_thread_handler(in/* check if we need to start the dev */ if (!mei_host_is_ready (dev)) {if (mei_hw_is_ready (dev)) { +mei_me_hw_reset_release (dev);dev_dbg (&dev->pdev->dev,"we need to start the dev.\n" ); dev->recvd_hw_ready = true;wake_up_interruptible (&dev->wait_hw_ready); }else { - -dev_dbg (&dev->pdev->dev,"Reset Completed.\n" ); -mei_me_hw_reset_release (dev); +dev_dbg (&dev->pdev->dev,"Spurious Interrupt\n" ); } goto end; }
Greg Kroah-Hartman
maintainerPATCH 10/19 mei: me: drop harmful wait optimization
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tomas Winkler <[email protected]>
commit 07cd7be3d92eeeae1f92a017f2cfe4fdd9256526 upstream.
It my take time till ME_RDY will be cleared after the reset, so we cannot check the bit before we got the interrupt
--- drivers/misc/mei/hw-me.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/misc/mei/hw-me.c +1 -3
@@ -186,6 +186,7 @@ static int mei_me_hw_reset(struct mei_deelse hcsr &= ~H_IE ; + dev->recvd_hw_ready = false;mei_me_reg_write (hw,H_CSR , hcsr);if (intr_enable == false)
@@ -237,10 +238,7 @@ static bool mei_me_hw_is_ready(struct mestatic int mei_me_hw_ready_wait (struct mei_device *dev) {int err; -if (mei_me_hw_is_ready (dev)) -return 0 ; - dev->recvd_hw_ready = false;mutex_unlock (&dev->device_lock); err = wait_event_interruptible_timeout(dev->wait_hw_ready, dev->recvd_hw_ready,
Greg Kroah-Hartman
maintainerPATCH 11/19 mei: me: read H_CSR after asserting reset
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tomas Winkler <[email protected]>
commit c40765d919d25d2d44d99c4ce39e48808f137e1e upstream.
According the spec the host should read H_CSR again after asserting reset H_RST to ensure that reset was read by the firmware
--- drivers/misc/mei/hw-me.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
drivers/misc/mei/hw-me.c +12 -0
@@ -189,6 +189,18 @@ static int mei_me_hw_reset(struct mei_de dev->recvd_hw_ready = false;mei_me_reg_write (hw,H_CSR , hcsr); +/* +* Host reads the H_CSR once to ensure that the +* posted write to H_CSR completes. +*/ + hcsr =mei_hcsr_read (hw); + +if ((hcsr &H_RST ) ==0 ) +dev_warn (&dev->pdev->dev,"H_RST is not set = 0x%08X" , hcsr); + +if ((hcsr &H_RDY ) ==H_RDY ) +dev_warn (&dev->pdev->dev,"H_RDY is not cleared 0x%08X" , hcsr); +if (intr_enable == false)mei_me_hw_reset_release (dev);
Greg Kroah-Hartman
maintainerPATCH 13/19 rtl28xxu: add USB ID for Genius TVGo DVB-T03
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Vcelak <[email protected]>
commit ac298ccdde4fe9b0a966e548a232ff4e8a6b8a31 upstream.
0458:707f KYE Systems Corp. (Mouse Systems) TVGo DVB-T03 [RTL2832]
The USB dongle uses RTL2832U demodulator and FC0012 tuner.
--- drivers/media/usb/dvb-usb-v2/rtl28xxu.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/media/usb/dvb-usb-v2/rtl28xxu.c +2 -0
@@ -1431,6 +1431,8 @@ static const struct usb_device_id rtl28x &rtl2832u_props, "Leadtek WinFast DTV Dongle mini", NULL) }, {DVB_USB_DEVICE (USB_VID_GTEK ,USB_PID_CPYTO_REDI_PC50A , &rtl2832u_props, "Crypto ReDi PC 50 A", NULL) }, + { DVB_USB_DEVICE(USB_VID_KYE, 0x707f, + &rtl2832u_props, "Genius TVGo DVB-T03", NULL) }, { DVB_USB_DEVICE(USB_VID_HANFTEK, 0x0131, &rtl2832u_props, "Astrometa DVB-T2", NULL) },
Greg Kroah-Hartman
maintainerPATCH 14/19 rtl28xxu: add chipset version comments into device list
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Vcelak <[email protected]>
commit 60aa4c6fa5723af72cff154a5cd33ac4995d1e0a upstream.
--- drivers/media/usb/dvb-usb-v2/rtl28xxu.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/media/usb/dvb-usb-v2/rtl28xxu.c +3 -0
@@ -1382,6 +1382,7 @@ static const struct dvb_usb_device_prope };static const struct usb_device_id rtl28xxu_id_table[] = { +/* RTL2831U devices: */ {DVB_USB_DEVICE (USB_VID_REALTEK ,USB_PID_REALTEK_RTL2831U , &rtl2831u_props,"Realtek RTL2831U reference design" ,NULL ) }, { DVB_USB_DEVICE(USB_VID_WIDEVIEW, USB_PID_FREECOM_DVBT,
@@ -1389,6 +1390,7 @@ static const struct usb_device_id rtl28x {DVB_USB_DEVICE (USB_VID_WIDEVIEW ,USB_PID_FREECOM_DVBT_2 , &rtl2831u_props, "Freecom USB2.0 DVB-T", NULL) }, +/* RTL2832U devices: */ { DVB_USB_DEVICE(USB_VID_REALTEK, 0x2832, &rtl2832u_props, "Realtek RTL2832U reference design", NULL) }, { DVB_USB_DEVICE(USB_VID_REALTEK, 0x2838,
@@ -1434,6 +1436,7 @@ static const struct usb_device_id rtl28x {DVB_USB_DEVICE (USB_VID_KYE ,0x707f , &rtl2832u_props, "Genius TVGo DVB-T03", NULL) }, +/* RTL2832P devices: */ { DVB_USB_DEVICE(USB_VID_HANFTEK, 0x0131, &rtl2832u_props, "Astrometa DVB-T2", NULL) }, { }
Greg Kroah-Hartman
maintainerPATCH 15/19 rtl28xxu: add 1b80:d395 Peak DVB-T USB
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Brian Healy <[email protected]>
commit 9ca24ae4083665bda38da45f4b5dc9bbaf936bc0 upstream.
Add USB ID for Peak DVB-T USB.
--- drivers/media/usb/dvb-usb-v2/rtl28xxu.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/media/usb/dvb-usb-v2/rtl28xxu.c +2 -0
@@ -1435,6 +1435,8 @@ static const struct usb_device_id rtl28x &rtl2832u_props, "Crypto ReDi PC 50 A", NULL) }, {DVB_USB_DEVICE (USB_VID_KYE ,0x707f , &rtl2832u_props, "Genius TVGo DVB-T03", NULL) }, + { DVB_USB_DEVICE(USB_VID_KWORLD_2, 0xd395, + &rtl2832u_props, "Peak DVB-T USB", NULL) },/* RTL2832P devices: */ { DVB_USB_DEVICE(USB_VID_HANFTEK, 0x0131,
Greg Kroah-Hartman
maintainerPATCH 16/19 rtl28xxu: add [1b80:d39d] Sveon STV20
In reply to Greg Kroah-Hartman3.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alessandro Miceli <[email protected]>
commit f27f5b0ee4967babfb8b03511f5e76b79d781014 upstream.
Added Sveon STV20 device based on Realtek RTL2832U and FC0012 tuner
--- drivers/media/dvb-core/dvb-usb-ids.h | 1 + drivers/media/usb/dvb-usb-v2/rtl28xxu.c | 2 ++ 2 files changed, 3 insertions(+)
drivers/media/dvb-core/dvb-usb-ids.h +1 -0
@@ -361,6 +361,7 @@#define USB_PID_FRIIO_WHITE 0x0001#define USB_PID_TVWAY_PLUS 0x0002#define USB_PID_SVEON_STV20 0xe39d +#define USB_PID_SVEON_STV20_RTL2832U 0xd39d#define USB_PID_SVEON_STV22 0xe401#define USB_PID_SVEON_STV22_IT9137 0xe411#define USB_PID_AZUREWAVE_AZ6027 0x3275
drivers/media/usb/dvb-usb-v2/rtl28xxu.c +2 -0
@@ -1437,6 +1437,8 @@ static const struct usb_device_id rtl28x &rtl2832u_props, "Genius TVGo DVB-T03", NULL) }, {DVB_USB_DEVICE (USB_VID_KWORLD_2 ,0xd395 , &rtl2832u_props, "Peak DVB-T USB", NULL) }, + { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV20_RTL2832U, + &rtl2832u_props, "Sveon STV20", NULL) },/* RTL2832P devices: */ { DVB_USB_DEVICE(USB_VID_HANFTEK, 0x0131,
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 3.14.8 release. There are 19 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 Sat Jun 14 23:21:28 UTC 2014. Anything received after that time might be too late.
Build results:
total: 143 pass: 136 skipped: 4 fail: 3
Failed builds:
powerpc:allmodconfig (binutils 2.3, 2.4)
unicore32:defconfig
Qemu tests all passed.
Results are as expected.
Details are available at http://server.roeck-us.net:8010/builders.
Guenter