Linux v3.12.5
This commit is contained in:
parent
7287700fb0
commit
bdb12fedf7
|
@ -1,39 +0,0 @@
|
|||
Bugzilla: 1015905
|
||||
Upstream-status: 3.13 (should hit stable)
|
||||
|
||||
From 90e4e23d52fd04f228eed2c3d341136c50058b37 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Pirko <jiri@resnulli.us>
|
||||
Date: Wed, 6 Nov 2013 17:52:19 +0100
|
||||
Subject: [PATCH 1/2] ip6_output: fragment outgoing reassembled skb properly
|
||||
|
||||
If reassembled packet would fit into outdev MTU, it is not fragmented
|
||||
according the original frag size and it is send as single big packet.
|
||||
|
||||
The second case is if skb is gso. In that case fragmentation does not happen
|
||||
according to the original frag size.
|
||||
|
||||
This patch fixes these.
|
||||
|
||||
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
net/ipv6/ip6_output.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
|
||||
index 5b25f85..f80f2fa 100644
|
||||
--- a/net/ipv6/ip6_output.c
|
||||
+++ b/net/ipv6/ip6_output.c
|
||||
@@ -150,7 +150,8 @@ static int ip6_finish_output2(struct sk_buff *skb)
|
||||
static int ip6_finish_output(struct sk_buff *skb)
|
||||
{
|
||||
if ((skb->len > ip6_skb_dst_mtu(skb) && !skb_is_gso(skb)) ||
|
||||
- dst_allfrag(skb_dst(skb)))
|
||||
+ dst_allfrag(skb_dst(skb)) ||
|
||||
+ (IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size))
|
||||
return ip6_fragment(skb, ip6_finish_output2);
|
||||
else
|
||||
return ip6_finish_output2(skb);
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
From 8ca95995e64f5d270889badb3e449dca91106a2b Mon Sep 17 00:00:00 2001
|
||||
From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
|
||||
Date: Sun, 15 Sep 2013 11:37:17 +0300
|
||||
Subject: [PATCH] iwlwifi: don't WARN on host commands sent when firmware is dead
|
||||
|
||||
This triggers automatic bug reports and add no valuable
|
||||
information. Print a simple error instead and drop the
|
||||
host command.
|
||||
|
||||
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
|
||||
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
---
|
||||
drivers/net/wireless/iwlwifi/iwl-trans.h | 6 ++++--
|
||||
1 files changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.h b/drivers/net/wireless/iwlwifi/iwl-trans.h
|
||||
index dd57a36..80b4750 100644
|
||||
--- a/drivers/net/wireless/iwlwifi/iwl-trans.h
|
||||
+++ b/drivers/net/wireless/iwlwifi/iwl-trans.h
|
||||
@@ -601,8 +601,10 @@ static inline int iwl_trans_send_cmd(struct iwl_trans *trans,
|
||||
{
|
||||
int ret;
|
||||
|
||||
- WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE,
|
||||
- "%s bad state = %d", __func__, trans->state);
|
||||
+ if (trans->state != IWL_TRANS_FW_ALIVE) {
|
||||
+ IWL_ERR(trans, "%s bad state = %d", __func__, trans->state);
|
||||
+ return -EIO;
|
||||
+ }
|
||||
|
||||
if (!(cmd->flags & CMD_ASYNC))
|
||||
lock_map_acquire_read(&trans->sync_cmd_lockdep_map);
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -1,499 +0,0 @@
|
|||
Bugzilla: 1015905
|
||||
Upstream-status: 3.13 (should hit stable)
|
||||
|
||||
From 5c0df04613dd39fba5d2a43eaf90a2dc1dcd8899 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Pirko <jiri@resnulli.us>
|
||||
Date: Wed, 6 Nov 2013 17:52:20 +0100
|
||||
Subject: [PATCH 2/2] netfilter: push reasm skb through instead of original
|
||||
frag skbs
|
||||
|
||||
Pushing original fragments through causes several problems. For example
|
||||
for matching, frags may not be matched correctly. Take following
|
||||
example:
|
||||
|
||||
<example>
|
||||
On HOSTA do:
|
||||
ip6tables -I INPUT -p icmpv6 -j DROP
|
||||
ip6tables -I INPUT -p icmpv6 -m icmp6 --icmpv6-type 128 -j ACCEPT
|
||||
|
||||
and on HOSTB you do:
|
||||
ping6 HOSTA -s2000 (MTU is 1500)
|
||||
|
||||
Incoming echo requests will be filtered out on HOSTA. This issue does
|
||||
not occur with smaller packets than MTU (where fragmentation does not happen)
|
||||
</example>
|
||||
|
||||
As was discussed previously, the only correct solution seems to be to use
|
||||
reassembled skb instead of separete frags. Doing this has positive side
|
||||
effects in reducing sk_buff by one pointer (nfct_reasm) and also the reams
|
||||
dances in ipvs and conntrack can be removed.
|
||||
|
||||
Future plan is to remove net/ipv6/netfilter/nf_conntrack_reasm.c
|
||||
entirely and use code in net/ipv6/reassembly.c instead.
|
||||
|
||||
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
|
||||
Acked-by: Julian Anastasov <ja@ssi.bg>
|
||||
Signed-off-by: Marcelo Ricardo Leitner <mleitner@redhat.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
Conflicts:
|
||||
include/net/netfilter/ipv6/nf_defrag_ipv6.h
|
||||
net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
|
||||
net/ipv6/netfilter/nf_defrag_ipv6_hooks.c
|
||||
net/netfilter/ipvs/ip_vs_core.c
|
||||
---
|
||||
include/linux/skbuff.h | 32 ---------------
|
||||
include/net/ip_vs.h | 32 +--------------
|
||||
include/net/netfilter/ipv6/nf_defrag_ipv6.h | 5 +--
|
||||
net/core/skbuff.c | 3 --
|
||||
net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c | 54 +------------------------
|
||||
net/ipv6/netfilter/nf_conntrack_reasm.c | 19 +--------
|
||||
net/ipv6/netfilter/nf_defrag_ipv6_hooks.c | 7 +++-
|
||||
net/netfilter/ipvs/ip_vs_core.c | 55 +-------------------------
|
||||
net/netfilter/ipvs/ip_vs_pe_sip.c | 8 +---
|
||||
9 files changed, 13 insertions(+), 202 deletions(-)
|
||||
|
||||
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
|
||||
index 6bd165b..37b4517 100644
|
||||
--- a/include/linux/skbuff.h
|
||||
+++ b/include/linux/skbuff.h
|
||||
@@ -333,11 +333,6 @@ typedef unsigned int sk_buff_data_t;
|
||||
typedef unsigned char *sk_buff_data_t;
|
||||
#endif
|
||||
|
||||
-#if defined(CONFIG_NF_DEFRAG_IPV4) || defined(CONFIG_NF_DEFRAG_IPV4_MODULE) || \
|
||||
- defined(CONFIG_NF_DEFRAG_IPV6) || defined(CONFIG_NF_DEFRAG_IPV6_MODULE)
|
||||
-#define NET_SKBUFF_NF_DEFRAG_NEEDED 1
|
||||
-#endif
|
||||
-
|
||||
/**
|
||||
* struct sk_buff - socket buffer
|
||||
* @next: Next buffer in list
|
||||
@@ -370,7 +365,6 @@ typedef unsigned char *sk_buff_data_t;
|
||||
* @protocol: Packet protocol from driver
|
||||
* @destructor: Destruct function
|
||||
* @nfct: Associated connection, if any
|
||||
- * @nfct_reasm: netfilter conntrack re-assembly pointer
|
||||
* @nf_bridge: Saved data about a bridged frame - see br_netfilter.c
|
||||
* @skb_iif: ifindex of device we arrived on
|
||||
* @tc_index: Traffic control index
|
||||
@@ -459,9 +453,6 @@ struct sk_buff {
|
||||
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
|
||||
struct nf_conntrack *nfct;
|
||||
#endif
|
||||
-#ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
|
||||
- struct sk_buff *nfct_reasm;
|
||||
-#endif
|
||||
#ifdef CONFIG_BRIDGE_NETFILTER
|
||||
struct nf_bridge_info *nf_bridge;
|
||||
#endif
|
||||
@@ -2603,18 +2594,6 @@ static inline void nf_conntrack_get(struct nf_conntrack *nfct)
|
||||
atomic_inc(&nfct->use);
|
||||
}
|
||||
#endif
|
||||
-#ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
|
||||
-static inline void nf_conntrack_get_reasm(struct sk_buff *skb)
|
||||
-{
|
||||
- if (skb)
|
||||
- atomic_inc(&skb->users);
|
||||
-}
|
||||
-static inline void nf_conntrack_put_reasm(struct sk_buff *skb)
|
||||
-{
|
||||
- if (skb)
|
||||
- kfree_skb(skb);
|
||||
-}
|
||||
-#endif
|
||||
#ifdef CONFIG_BRIDGE_NETFILTER
|
||||
static inline void nf_bridge_put(struct nf_bridge_info *nf_bridge)
|
||||
{
|
||||
@@ -2633,10 +2612,6 @@ static inline void nf_reset(struct sk_buff *skb)
|
||||
nf_conntrack_put(skb->nfct);
|
||||
skb->nfct = NULL;
|
||||
#endif
|
||||
-#ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
|
||||
- nf_conntrack_put_reasm(skb->nfct_reasm);
|
||||
- skb->nfct_reasm = NULL;
|
||||
-#endif
|
||||
#ifdef CONFIG_BRIDGE_NETFILTER
|
||||
nf_bridge_put(skb->nf_bridge);
|
||||
skb->nf_bridge = NULL;
|
||||
@@ -2658,10 +2633,6 @@ static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src)
|
||||
nf_conntrack_get(src->nfct);
|
||||
dst->nfctinfo = src->nfctinfo;
|
||||
#endif
|
||||
-#ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
|
||||
- dst->nfct_reasm = src->nfct_reasm;
|
||||
- nf_conntrack_get_reasm(src->nfct_reasm);
|
||||
-#endif
|
||||
#ifdef CONFIG_BRIDGE_NETFILTER
|
||||
dst->nf_bridge = src->nf_bridge;
|
||||
nf_bridge_get(src->nf_bridge);
|
||||
@@ -2673,9 +2644,6 @@ static inline void nf_copy(struct sk_buff *dst, const struct sk_buff *src)
|
||||
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
|
||||
nf_conntrack_put(dst->nfct);
|
||||
#endif
|
||||
-#ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
|
||||
- nf_conntrack_put_reasm(dst->nfct_reasm);
|
||||
-#endif
|
||||
#ifdef CONFIG_BRIDGE_NETFILTER
|
||||
nf_bridge_put(dst->nf_bridge);
|
||||
#endif
|
||||
diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
|
||||
index f0d70f0..ff21521 100644
|
||||
--- a/include/net/ip_vs.h
|
||||
+++ b/include/net/ip_vs.h
|
||||
@@ -109,7 +109,6 @@ extern int ip_vs_conn_tab_size;
|
||||
struct ip_vs_iphdr {
|
||||
__u32 len; /* IPv4 simply where L4 starts
|
||||
IPv6 where L4 Transport Header starts */
|
||||
- __u32 thoff_reasm; /* Transport Header Offset in nfct_reasm skb */
|
||||
__u16 fragoffs; /* IPv6 fragment offset, 0 if first frag (or not frag)*/
|
||||
__s16 protocol;
|
||||
__s32 flags;
|
||||
@@ -117,34 +116,12 @@ struct ip_vs_iphdr {
|
||||
union nf_inet_addr daddr;
|
||||
};
|
||||
|
||||
-/* Dependency to module: nf_defrag_ipv6 */
|
||||
-#if defined(CONFIG_NF_DEFRAG_IPV6) || defined(CONFIG_NF_DEFRAG_IPV6_MODULE)
|
||||
-static inline struct sk_buff *skb_nfct_reasm(const struct sk_buff *skb)
|
||||
-{
|
||||
- return skb->nfct_reasm;
|
||||
-}
|
||||
-static inline void *frag_safe_skb_hp(const struct sk_buff *skb, int offset,
|
||||
- int len, void *buffer,
|
||||
- const struct ip_vs_iphdr *ipvsh)
|
||||
-{
|
||||
- if (unlikely(ipvsh->fragoffs && skb_nfct_reasm(skb)))
|
||||
- return skb_header_pointer(skb_nfct_reasm(skb),
|
||||
- ipvsh->thoff_reasm, len, buffer);
|
||||
-
|
||||
- return skb_header_pointer(skb, offset, len, buffer);
|
||||
-}
|
||||
-#else
|
||||
-static inline struct sk_buff *skb_nfct_reasm(const struct sk_buff *skb)
|
||||
-{
|
||||
- return NULL;
|
||||
-}
|
||||
static inline void *frag_safe_skb_hp(const struct sk_buff *skb, int offset,
|
||||
int len, void *buffer,
|
||||
const struct ip_vs_iphdr *ipvsh)
|
||||
{
|
||||
return skb_header_pointer(skb, offset, len, buffer);
|
||||
}
|
||||
-#endif
|
||||
|
||||
static inline void
|
||||
ip_vs_fill_ip4hdr(const void *nh, struct ip_vs_iphdr *iphdr)
|
||||
@@ -171,19 +148,12 @@ ip_vs_fill_iph_skb(int af, const struct sk_buff *skb, struct ip_vs_iphdr *iphdr)
|
||||
(struct ipv6hdr *)skb_network_header(skb);
|
||||
iphdr->saddr.in6 = iph->saddr;
|
||||
iphdr->daddr.in6 = iph->daddr;
|
||||
- /* ipv6_find_hdr() updates len, flags, thoff_reasm */
|
||||
- iphdr->thoff_reasm = 0;
|
||||
+ /* ipv6_find_hdr() updates len, flags */
|
||||
iphdr->len = 0;
|
||||
iphdr->flags = 0;
|
||||
iphdr->protocol = ipv6_find_hdr(skb, &iphdr->len, -1,
|
||||
&iphdr->fragoffs,
|
||||
&iphdr->flags);
|
||||
- /* get proto from re-assembled packet and it's offset */
|
||||
- if (skb_nfct_reasm(skb))
|
||||
- iphdr->protocol = ipv6_find_hdr(skb_nfct_reasm(skb),
|
||||
- &iphdr->thoff_reasm,
|
||||
- -1, NULL, NULL);
|
||||
-
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
diff --git a/include/net/netfilter/ipv6/nf_defrag_ipv6.h b/include/net/netfilter/ipv6/nf_defrag_ipv6.h
|
||||
index fd79c9a..17920d8 100644
|
||||
--- a/include/net/netfilter/ipv6/nf_defrag_ipv6.h
|
||||
+++ b/include/net/netfilter/ipv6/nf_defrag_ipv6.h
|
||||
@@ -6,10 +6,7 @@ extern void nf_defrag_ipv6_enable(void);
|
||||
extern int nf_ct_frag6_init(void);
|
||||
extern void nf_ct_frag6_cleanup(void);
|
||||
extern struct sk_buff *nf_ct_frag6_gather(struct sk_buff *skb, u32 user);
|
||||
-extern void nf_ct_frag6_output(unsigned int hooknum, struct sk_buff *skb,
|
||||
- struct net_device *in,
|
||||
- struct net_device *out,
|
||||
- int (*okfn)(struct sk_buff *));
|
||||
+extern void nf_ct_frag6_consume_orig(struct sk_buff *skb);
|
||||
|
||||
struct inet_frags_ctl;
|
||||
|
||||
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
|
||||
index 2c3d0f5..a75022e 100644
|
||||
--- a/net/core/skbuff.c
|
||||
+++ b/net/core/skbuff.c
|
||||
@@ -580,9 +580,6 @@ static void skb_release_head_state(struct sk_buff *skb)
|
||||
#if IS_ENABLED(CONFIG_NF_CONNTRACK)
|
||||
nf_conntrack_put(skb->nfct);
|
||||
#endif
|
||||
-#ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
|
||||
- nf_conntrack_put_reasm(skb->nfct_reasm);
|
||||
-#endif
|
||||
#ifdef CONFIG_BRIDGE_NETFILTER
|
||||
nf_bridge_put(skb->nf_bridge);
|
||||
#endif
|
||||
diff --git a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
|
||||
index c9b6a6e..97cd750 100644
|
||||
--- a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
|
||||
+++ b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
|
||||
@@ -172,63 +172,13 @@ out:
|
||||
return nf_conntrack_confirm(skb);
|
||||
}
|
||||
|
||||
-static unsigned int __ipv6_conntrack_in(struct net *net,
|
||||
- unsigned int hooknum,
|
||||
- struct sk_buff *skb,
|
||||
- const struct net_device *in,
|
||||
- const struct net_device *out,
|
||||
- int (*okfn)(struct sk_buff *))
|
||||
-{
|
||||
- struct sk_buff *reasm = skb->nfct_reasm;
|
||||
- const struct nf_conn_help *help;
|
||||
- struct nf_conn *ct;
|
||||
- enum ip_conntrack_info ctinfo;
|
||||
-
|
||||
- /* This packet is fragmented and has reassembled packet. */
|
||||
- if (reasm) {
|
||||
- /* Reassembled packet isn't parsed yet ? */
|
||||
- if (!reasm->nfct) {
|
||||
- unsigned int ret;
|
||||
-
|
||||
- ret = nf_conntrack_in(net, PF_INET6, hooknum, reasm);
|
||||
- if (ret != NF_ACCEPT)
|
||||
- return ret;
|
||||
- }
|
||||
-
|
||||
- /* Conntrack helpers need the entire reassembled packet in the
|
||||
- * POST_ROUTING hook. In case of unconfirmed connections NAT
|
||||
- * might reassign a helper, so the entire packet is also
|
||||
- * required.
|
||||
- */
|
||||
- ct = nf_ct_get(reasm, &ctinfo);
|
||||
- if (ct != NULL && !nf_ct_is_untracked(ct)) {
|
||||
- help = nfct_help(ct);
|
||||
- if ((help && help->helper) || !nf_ct_is_confirmed(ct)) {
|
||||
- nf_conntrack_get_reasm(reasm);
|
||||
- NF_HOOK_THRESH(NFPROTO_IPV6, hooknum, reasm,
|
||||
- (struct net_device *)in,
|
||||
- (struct net_device *)out,
|
||||
- okfn, NF_IP6_PRI_CONNTRACK + 1);
|
||||
- return NF_DROP_ERR(-ECANCELED);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- nf_conntrack_get(reasm->nfct);
|
||||
- skb->nfct = reasm->nfct;
|
||||
- skb->nfctinfo = reasm->nfctinfo;
|
||||
- return NF_ACCEPT;
|
||||
- }
|
||||
-
|
||||
- return nf_conntrack_in(net, PF_INET6, hooknum, skb);
|
||||
-}
|
||||
-
|
||||
static unsigned int ipv6_conntrack_in(unsigned int hooknum,
|
||||
struct sk_buff *skb,
|
||||
const struct net_device *in,
|
||||
const struct net_device *out,
|
||||
int (*okfn)(struct sk_buff *))
|
||||
{
|
||||
- return __ipv6_conntrack_in(dev_net(in), hooknum, skb, in, out, okfn);
|
||||
+ return nf_conntrack_in(dev_net(in), PF_INET6, hooknum, skb);
|
||||
}
|
||||
|
||||
static unsigned int ipv6_conntrack_local(unsigned int hooknum,
|
||||
@@ -242,7 +192,7 @@ static unsigned int ipv6_conntrack_local(unsigned int hooknum,
|
||||
net_notice_ratelimited("ipv6_conntrack_local: packet too short\n");
|
||||
return NF_ACCEPT;
|
||||
}
|
||||
- return __ipv6_conntrack_in(dev_net(out), hooknum, skb, in, out, okfn);
|
||||
+ return nf_conntrack_in(dev_net(out), PF_INET6, hooknum, skb);
|
||||
}
|
||||
|
||||
static struct nf_hook_ops ipv6_conntrack_ops[] __read_mostly = {
|
||||
diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c
|
||||
index dffdc1a..253566a 100644
|
||||
--- a/net/ipv6/netfilter/nf_conntrack_reasm.c
|
||||
+++ b/net/ipv6/netfilter/nf_conntrack_reasm.c
|
||||
@@ -621,31 +621,16 @@ ret_orig:
|
||||
return skb;
|
||||
}
|
||||
|
||||
-void nf_ct_frag6_output(unsigned int hooknum, struct sk_buff *skb,
|
||||
- struct net_device *in, struct net_device *out,
|
||||
- int (*okfn)(struct sk_buff *))
|
||||
+void nf_ct_frag6_consume_orig(struct sk_buff *skb)
|
||||
{
|
||||
struct sk_buff *s, *s2;
|
||||
- unsigned int ret = 0;
|
||||
|
||||
for (s = NFCT_FRAG6_CB(skb)->orig; s;) {
|
||||
- nf_conntrack_put_reasm(s->nfct_reasm);
|
||||
- nf_conntrack_get_reasm(skb);
|
||||
- s->nfct_reasm = skb;
|
||||
-
|
||||
s2 = s->next;
|
||||
s->next = NULL;
|
||||
-
|
||||
- if (ret != -ECANCELED)
|
||||
- ret = NF_HOOK_THRESH(NFPROTO_IPV6, hooknum, s,
|
||||
- in, out, okfn,
|
||||
- NF_IP6_PRI_CONNTRACK_DEFRAG + 1);
|
||||
- else
|
||||
- kfree_skb(s);
|
||||
-
|
||||
+ consume_skb(s);
|
||||
s = s2;
|
||||
}
|
||||
- nf_conntrack_put_reasm(skb);
|
||||
}
|
||||
|
||||
static int nf_ct_net_init(struct net *net)
|
||||
diff --git a/net/ipv6/netfilter/nf_defrag_ipv6_hooks.c b/net/ipv6/netfilter/nf_defrag_ipv6_hooks.c
|
||||
index aacd121..581dd9e 100644
|
||||
--- a/net/ipv6/netfilter/nf_defrag_ipv6_hooks.c
|
||||
+++ b/net/ipv6/netfilter/nf_defrag_ipv6_hooks.c
|
||||
@@ -75,8 +75,11 @@ static unsigned int ipv6_defrag(unsigned int hooknum,
|
||||
if (reasm == skb)
|
||||
return NF_ACCEPT;
|
||||
|
||||
- nf_ct_frag6_output(hooknum, reasm, (struct net_device *)in,
|
||||
- (struct net_device *)out, okfn);
|
||||
+ nf_ct_frag6_consume_orig(reasm);
|
||||
+
|
||||
+ NF_HOOK_THRESH(NFPROTO_IPV6, hooknum, reasm,
|
||||
+ (struct net_device *) in, (struct net_device *) out,
|
||||
+ okfn, NF_IP6_PRI_CONNTRACK_DEFRAG + 1);
|
||||
|
||||
return NF_STOLEN;
|
||||
}
|
||||
diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c
|
||||
index 4f69e83..1517b50 100644
|
||||
--- a/net/netfilter/ipvs/ip_vs_core.c
|
||||
+++ b/net/netfilter/ipvs/ip_vs_core.c
|
||||
@@ -1131,12 +1131,6 @@ ip_vs_out(unsigned int hooknum, struct sk_buff *skb, int af)
|
||||
ip_vs_fill_iph_skb(af, skb, &iph);
|
||||
#ifdef CONFIG_IP_VS_IPV6
|
||||
if (af == AF_INET6) {
|
||||
- if (!iph.fragoffs && skb_nfct_reasm(skb)) {
|
||||
- struct sk_buff *reasm = skb_nfct_reasm(skb);
|
||||
- /* Save fw mark for coming frags */
|
||||
- reasm->ipvs_property = 1;
|
||||
- reasm->mark = skb->mark;
|
||||
- }
|
||||
if (unlikely(iph.protocol == IPPROTO_ICMPV6)) {
|
||||
int related;
|
||||
int verdict = ip_vs_out_icmp_v6(skb, &related,
|
||||
@@ -1606,12 +1600,6 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af)
|
||||
|
||||
#ifdef CONFIG_IP_VS_IPV6
|
||||
if (af == AF_INET6) {
|
||||
- if (!iph.fragoffs && skb_nfct_reasm(skb)) {
|
||||
- struct sk_buff *reasm = skb_nfct_reasm(skb);
|
||||
- /* Save fw mark for coming frags. */
|
||||
- reasm->ipvs_property = 1;
|
||||
- reasm->mark = skb->mark;
|
||||
- }
|
||||
if (unlikely(iph.protocol == IPPROTO_ICMPV6)) {
|
||||
int related;
|
||||
int verdict = ip_vs_in_icmp_v6(skb, &related, hooknum,
|
||||
@@ -1663,9 +1651,8 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af)
|
||||
/* sorry, all this trouble for a no-hit :) */
|
||||
IP_VS_DBG_PKT(12, af, pp, skb, 0,
|
||||
"ip_vs_in: packet continues traversal as normal");
|
||||
- if (iph.fragoffs && !skb_nfct_reasm(skb)) {
|
||||
+ if (iph.fragoffs) {
|
||||
/* Fragment that couldn't be mapped to a conn entry
|
||||
- * and don't have any pointer to a reasm skb
|
||||
* is missing module nf_defrag_ipv6
|
||||
*/
|
||||
IP_VS_DBG_RL("Unhandled frag, load nf_defrag_ipv6\n");
|
||||
@@ -1748,38 +1735,6 @@ ip_vs_local_request4(unsigned int hooknum, struct sk_buff *skb,
|
||||
#ifdef CONFIG_IP_VS_IPV6
|
||||
|
||||
/*
|
||||
- * AF_INET6 fragment handling
|
||||
- * Copy info from first fragment, to the rest of them.
|
||||
- */
|
||||
-static unsigned int
|
||||
-ip_vs_preroute_frag6(unsigned int hooknum, struct sk_buff *skb,
|
||||
- const struct net_device *in,
|
||||
- const struct net_device *out,
|
||||
- int (*okfn)(struct sk_buff *))
|
||||
-{
|
||||
- struct sk_buff *reasm = skb_nfct_reasm(skb);
|
||||
- struct net *net;
|
||||
-
|
||||
- /* Skip if not a "replay" from nf_ct_frag6_output or first fragment.
|
||||
- * ipvs_property is set when checking first fragment
|
||||
- * in ip_vs_in() and ip_vs_out().
|
||||
- */
|
||||
- if (reasm)
|
||||
- IP_VS_DBG(2, "Fragment recv prop:%d\n", reasm->ipvs_property);
|
||||
- if (!reasm || !reasm->ipvs_property)
|
||||
- return NF_ACCEPT;
|
||||
-
|
||||
- net = skb_net(skb);
|
||||
- if (!net_ipvs(net)->enable)
|
||||
- return NF_ACCEPT;
|
||||
-
|
||||
- /* Copy stored fw mark, saved in ip_vs_{in,out} */
|
||||
- skb->mark = reasm->mark;
|
||||
-
|
||||
- return NF_ACCEPT;
|
||||
-}
|
||||
-
|
||||
-/*
|
||||
* AF_INET6 handler in NF_INET_LOCAL_IN chain
|
||||
* Schedule and forward packets from remote clients
|
||||
*/
|
||||
@@ -1916,14 +1871,6 @@ static struct nf_hook_ops ip_vs_ops[] __read_mostly = {
|
||||
.priority = 100,
|
||||
},
|
||||
#ifdef CONFIG_IP_VS_IPV6
|
||||
- /* After mangle & nat fetch 2:nd fragment and following */
|
||||
- {
|
||||
- .hook = ip_vs_preroute_frag6,
|
||||
- .owner = THIS_MODULE,
|
||||
- .pf = NFPROTO_IPV6,
|
||||
- .hooknum = NF_INET_PRE_ROUTING,
|
||||
- .priority = NF_IP6_PRI_NAT_DST + 1,
|
||||
- },
|
||||
/* After packet filtering, change source only for VS/NAT */
|
||||
{
|
||||
.hook = ip_vs_reply6,
|
||||
diff --git a/net/netfilter/ipvs/ip_vs_pe_sip.c b/net/netfilter/ipvs/ip_vs_pe_sip.c
|
||||
index 9ef22bd..bed5f70 100644
|
||||
--- a/net/netfilter/ipvs/ip_vs_pe_sip.c
|
||||
+++ b/net/netfilter/ipvs/ip_vs_pe_sip.c
|
||||
@@ -65,7 +65,6 @@ static int get_callid(const char *dptr, unsigned int dataoff,
|
||||
static int
|
||||
ip_vs_sip_fill_param(struct ip_vs_conn_param *p, struct sk_buff *skb)
|
||||
{
|
||||
- struct sk_buff *reasm = skb_nfct_reasm(skb);
|
||||
struct ip_vs_iphdr iph;
|
||||
unsigned int dataoff, datalen, matchoff, matchlen;
|
||||
const char *dptr;
|
||||
@@ -79,15 +78,10 @@ ip_vs_sip_fill_param(struct ip_vs_conn_param *p, struct sk_buff *skb)
|
||||
/* todo: IPv6 fragments:
|
||||
* I think this only should be done for the first fragment. /HS
|
||||
*/
|
||||
- if (reasm) {
|
||||
- skb = reasm;
|
||||
- dataoff = iph.thoff_reasm + sizeof(struct udphdr);
|
||||
- } else
|
||||
- dataoff = iph.len + sizeof(struct udphdr);
|
||||
+ dataoff = iph.len + sizeof(struct udphdr);
|
||||
|
||||
if (dataoff >= skb->len)
|
||||
return -EINVAL;
|
||||
- /* todo: Check if this will mess-up the reasm skb !!! /HS */
|
||||
retc = skb_linearize(skb);
|
||||
if (retc < 0)
|
||||
return retc;
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
From 92eb77d0ffbaa71b501a0a8dabf09a351bf4267f Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Stone <daniel@fooishbar.org>
|
||||
Date: Thu, 31 Oct 2013 07:25:34 +0000
|
||||
Subject: Input: evdev - fall back to vmalloc for client event buffer
|
||||
|
||||
evdev always tries to allocate the event buffer for clients using
|
||||
kzalloc rather than vmalloc, presumably to avoid mapping overhead where
|
||||
possible. However, drivers like bcm5974, which claims support for
|
||||
reporting 16 fingers simultaneously, can have an extraordinarily large
|
||||
buffer. The resultant contiguous order-4 allocation attempt fails due
|
||||
to fragmentation, and the device is thus unusable until reboot.
|
||||
|
||||
Try kzalloc if we can to avoid the mapping overhead, but if that fails,
|
||||
fall back to vzalloc.
|
||||
|
||||
Signed-off-by: Daniel Stone <daniels@collabora.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
|
||||
index b6ded17..a06e125 100644
|
||||
--- a/drivers/input/evdev.c
|
||||
+++ b/drivers/input/evdev.c
|
||||
@@ -18,6 +18,8 @@
|
||||
#include <linux/poll.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/slab.h>
|
||||
+#include <linux/vmalloc.h>
|
||||
+#include <linux/mm.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/input/mt.h>
|
||||
@@ -369,7 +371,11 @@ static int evdev_release(struct inode *inode, struct file *file)
|
||||
mutex_unlock(&evdev->mutex);
|
||||
|
||||
evdev_detach_client(evdev, client);
|
||||
- kfree(client);
|
||||
+
|
||||
+ if (is_vmalloc_addr(client))
|
||||
+ vfree(client);
|
||||
+ else
|
||||
+ kfree(client);
|
||||
|
||||
evdev_close_device(evdev);
|
||||
|
||||
@@ -389,12 +395,14 @@ static int evdev_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct evdev *evdev = container_of(inode->i_cdev, struct evdev, cdev);
|
||||
unsigned int bufsize = evdev_compute_buffer_size(evdev->handle.dev);
|
||||
+ unsigned int size = sizeof(struct evdev_client) +
|
||||
+ bufsize * sizeof(struct input_event);
|
||||
struct evdev_client *client;
|
||||
int error;
|
||||
|
||||
- client = kzalloc(sizeof(struct evdev_client) +
|
||||
- bufsize * sizeof(struct input_event),
|
||||
- GFP_KERNEL);
|
||||
+ client = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
|
||||
+ if (!client)
|
||||
+ client = vzalloc(size);
|
||||
if (!client)
|
||||
return -ENOMEM;
|
||||
|
||||
--
|
||||
cgit v0.9.2
|
|
@ -1,53 +0,0 @@
|
|||
Bugzilla: 967652
|
||||
Upstream-status: 3.13 (should hit stable)
|
||||
|
||||
From daf727225b8abfdfe424716abac3d15a3ac5626a Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Date: Thu, 31 Oct 2013 23:05:24 +0100
|
||||
Subject: [PATCH] KVM: x86: fix emulation of "movzbl %bpl, %eax"
|
||||
|
||||
When I was looking at RHEL5.9's failure to start with
|
||||
unrestricted_guest=0/emulate_invalid_guest_state=1, I got it working with a
|
||||
slightly older tree than kvm.git. I now debugged the remaining failure,
|
||||
which was introduced by commit 660696d1 (KVM: X86 emulator: fix
|
||||
source operand decoding for 8bit mov[zs]x instructions, 2013-04-24)
|
||||
introduced a similar mis-emulation to the one in commit 8acb4207 (KVM:
|
||||
fix sil/dil/bpl/spl in the mod/rm fields, 2013-05-30). The incorrect
|
||||
decoding occurs in 8-bit movzx/movsx instructions whose 8-bit operand
|
||||
is sil/dil/bpl/spl.
|
||||
|
||||
Needless to say, "movzbl %bpl, %eax" does occur in RHEL5.9's decompression
|
||||
prolog, just a handful of instructions before finally giving control to
|
||||
the decompressed vmlinux and getting out of the invalid guest state.
|
||||
|
||||
Because OpMem8 bypasses decode_modrm, the same handling of the REX prefix
|
||||
must be applied to OpMem8.
|
||||
|
||||
Reported-by: Michele Baldessari <michele@redhat.com>
|
||||
Cc: stable@vger.kernel.org
|
||||
Cc: Gleb Natapov <gleb@redhat.com>
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Signed-off-by: Gleb Natapov <gleb@redhat.com>
|
||||
---
|
||||
arch/x86/kvm/emulate.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||
index 16c037e..282d28c 100644
|
||||
--- a/arch/x86/kvm/emulate.c
|
||||
+++ b/arch/x86/kvm/emulate.c
|
||||
@@ -4117,7 +4117,10 @@ static int decode_operand(struct x86_emulate_ctxt *ctxt, struct operand *op,
|
||||
case OpMem8:
|
||||
ctxt->memop.bytes = 1;
|
||||
if (ctxt->memop.type == OP_REG) {
|
||||
- ctxt->memop.addr.reg = decode_register(ctxt, ctxt->modrm_rm, 1);
|
||||
+ int highbyte_regs = ctxt->rex_prefix == 0;
|
||||
+
|
||||
+ ctxt->memop.addr.reg = decode_register(ctxt, ctxt->modrm_rm,
|
||||
+ highbyte_regs);
|
||||
fetch_register_operand(&ctxt->memop);
|
||||
}
|
||||
goto mem_common;
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
From 7673be51f16e978a438bca8ac1bf9e939b7ed7a6 Mon Sep 17 00:00:00 2001
|
||||
From: Yunkang Tang <yunkang.tang@cn.alps.com>
|
||||
Date: Thu, 24 Oct 2013 13:39:08 +0800
|
||||
Subject: [PATCH] Support for Dell XT2 model
|
||||
|
||||
Signed-off-by: Yunkang Tang <yunkang.tang@cn.alps.com>
|
||||
---
|
||||
drivers/input/mouse/alps.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
|
||||
index ca7a26f..24b3626 100644
|
||||
--- a/drivers/input/mouse/alps.c
|
||||
+++ b/drivers/input/mouse/alps.c
|
||||
@@ -103,6 +103,7 @@ static const struct alps_model_info alps_model_data[] = {
|
||||
/* Dell Latitude E5500, E6400, E6500, Precision M4400 */
|
||||
{ { 0x62, 0x02, 0x14 }, 0x00, ALPS_PROTO_V2, 0xcf, 0xcf,
|
||||
ALPS_PASS | ALPS_DUALPOINT | ALPS_PS2_INTERLEAVED },
|
||||
+ { { 0x73, 0x00, 0x14 }, 0x00, ALPS_PROTO_V2, 0xcf, 0xcf, ALPS_DUALPOINT }, /* Dell XT2 */
|
||||
{ { 0x73, 0x02, 0x50 }, 0x00, ALPS_PROTO_V2, 0xcf, 0xcf, ALPS_FOUR_BUTTONS }, /* Dell Vostro 1400 */
|
||||
{ { 0x52, 0x01, 0x14 }, 0x00, ALPS_PROTO_V2, 0xff, 0xff,
|
||||
ALPS_PASS | ALPS_DUALPOINT | ALPS_PS2_INTERLEAVED }, /* Toshiba Tecra A11-11L */
|
||||
--
|
||||
1.8.1.2
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,610 @@
|
|||
Bugzilla: 1012025
|
||||
Upstream-status: In beagle github repository https://github.com/beagleboard/kernel
|
||||
|
||||
From 82fe302f565e00cfde3e96c6132df93b39525e7b Mon Sep 17 00:00:00 2001
|
||||
From: Philipp Zabel <p.zabel@pengutronix.de>
|
||||
Date: Tue, 28 May 2013 17:06:15 +0200
|
||||
Subject: [PATCH] reset: Add driver for gpio-controlled reset pins
|
||||
|
||||
This driver implements a reset controller device that toggle a gpio
|
||||
connected to a reset pin of a peripheral IC. The delay between assertion
|
||||
and de-assertion of the reset signal can be configured via device tree.
|
||||
|
||||
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
|
||||
Reviewed-by: Stephen Warren <swarren@nvidia.com>
|
||||
---
|
||||
.../devicetree/bindings/reset/gpio-reset.txt | 35 +++++
|
||||
drivers/reset/Kconfig | 11 ++
|
||||
drivers/reset/Makefile | 1 +
|
||||
drivers/reset/gpio-reset.c | 169 +++++++++++++++++++++
|
||||
4 files changed, 216 insertions(+)
|
||||
create mode 100644 Documentation/devicetree/bindings/reset/gpio-reset.txt
|
||||
create mode 100644 drivers/reset/gpio-reset.c
|
||||
|
||||
diff --git a/Documentation/devicetree/bindings/reset/gpio-reset.txt b/Documentation/devicetree/bindings/reset/gpio-reset.txt
|
||||
new file mode 100644
|
||||
index 0000000..bca5348
|
||||
--- /dev/null
|
||||
+++ b/Documentation/devicetree/bindings/reset/gpio-reset.txt
|
||||
@@ -0,0 +1,35 @@
|
||||
+GPIO reset controller
|
||||
+=====================
|
||||
+
|
||||
+A GPIO reset controller controls a single GPIO that is connected to the reset
|
||||
+pin of a peripheral IC. Please also refer to reset.txt in this directory for
|
||||
+common reset controller binding usage.
|
||||
+
|
||||
+Required properties:
|
||||
+- compatible: Should be "gpio-reset"
|
||||
+- reset-gpios: A gpio used as reset line. The gpio specifier for this property
|
||||
+ depends on the gpio controller that provides the gpio.
|
||||
+- #reset-cells: 0, see below
|
||||
+
|
||||
+Optional properties:
|
||||
+- reset-delay-us: delay in microseconds. The gpio reset line will be asserted for
|
||||
+ this duration to reset.
|
||||
+- initially-in-reset: boolean. If not set, the initial state should be a
|
||||
+ deasserted reset line. If this property exists, the
|
||||
+ reset line should be kept in reset.
|
||||
+
|
||||
+example:
|
||||
+
|
||||
+sii902x_reset: gpio-reset {
|
||||
+ compatible = "gpio-reset";
|
||||
+ reset-gpios = <&gpio5 0 GPIO_ACTIVE_LOW>;
|
||||
+ reset-delay-us = <10000>;
|
||||
+ initially-in-reset;
|
||||
+ #reset-cells = <0>;
|
||||
+};
|
||||
+
|
||||
+/* Device with nRESET pin connected to GPIO5_0 */
|
||||
+sii902x@39 {
|
||||
+ /* ... */
|
||||
+ resets = <&sii902x_reset>; /* active-low GPIO5_0, 10 ms delay */
|
||||
+};
|
||||
diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
|
||||
index c9d04f7..1a862df 100644
|
||||
--- a/drivers/reset/Kconfig
|
||||
+++ b/drivers/reset/Kconfig
|
||||
@@ -11,3 +11,14 @@ menuconfig RESET_CONTROLLER
|
||||
via GPIOs or SoC-internal reset controller modules.
|
||||
|
||||
If unsure, say no.
|
||||
+
|
||||
+if RESET_CONTROLLER
|
||||
+
|
||||
+config RESET_GPIO
|
||||
+ tristate "GPIO reset controller support"
|
||||
+ depends on GPIOLIB && OF
|
||||
+ help
|
||||
+ This driver provides support for reset lines that are controlled
|
||||
+ directly by GPIOs.
|
||||
+
|
||||
+endif
|
||||
diff --git a/drivers/reset/Makefile b/drivers/reset/Makefile
|
||||
index 1e2d83f..b854f20 100644
|
||||
--- a/drivers/reset/Makefile
|
||||
+++ b/drivers/reset/Makefile
|
||||
@@ -1 +1,2 @@
|
||||
obj-$(CONFIG_RESET_CONTROLLER) += core.o
|
||||
+obj-$(CONFIG_RESET_GPIO) += gpio-reset.o
|
||||
diff --git a/drivers/reset/gpio-reset.c b/drivers/reset/gpio-reset.c
|
||||
new file mode 100644
|
||||
index 0000000..acc1076
|
||||
--- /dev/null
|
||||
+++ b/drivers/reset/gpio-reset.c
|
||||
@@ -0,0 +1,169 @@
|
||||
+/*
|
||||
+ * GPIO Reset Controller driver
|
||||
+ *
|
||||
+ * Copyright 2013 Philipp Zabel, Pengutronix
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ */
|
||||
+#include <linux/delay.h>
|
||||
+#include <linux/err.h>
|
||||
+#include <linux/gpio.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/of_gpio.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/reset-controller.h>
|
||||
+
|
||||
+struct gpio_reset_data {
|
||||
+ struct reset_controller_dev rcdev;
|
||||
+ unsigned int gpio;
|
||||
+ bool active_low;
|
||||
+ u32 delay_us;
|
||||
+};
|
||||
+
|
||||
+static void __gpio_reset_set(struct reset_controller_dev *rcdev, int asserted)
|
||||
+{
|
||||
+ struct gpio_reset_data *drvdata = container_of(rcdev,
|
||||
+ struct gpio_reset_data, rcdev);
|
||||
+ int value = asserted;
|
||||
+
|
||||
+ if (drvdata->active_low)
|
||||
+ value = !value;
|
||||
+
|
||||
+ gpio_set_value(drvdata->gpio, value);
|
||||
+}
|
||||
+
|
||||
+static int gpio_reset(struct reset_controller_dev *rcdev, unsigned long id)
|
||||
+{
|
||||
+ struct gpio_reset_data *drvdata = container_of(rcdev,
|
||||
+ struct gpio_reset_data, rcdev);
|
||||
+
|
||||
+ if (drvdata->delay_us < 0)
|
||||
+ return -ENOSYS;
|
||||
+
|
||||
+ __gpio_reset_set(rcdev, 1);
|
||||
+ udelay(drvdata->delay_us);
|
||||
+ __gpio_reset_set(rcdev, 0);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int gpio_reset_assert(struct reset_controller_dev *rcdev,
|
||||
+ unsigned long id)
|
||||
+{
|
||||
+ __gpio_reset_set(rcdev, 1);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int gpio_reset_deassert(struct reset_controller_dev *rcdev,
|
||||
+ unsigned long id)
|
||||
+{
|
||||
+ __gpio_reset_set(rcdev, 0);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static struct reset_control_ops gpio_reset_ops = {
|
||||
+ .reset = gpio_reset,
|
||||
+ .assert = gpio_reset_assert,
|
||||
+ .deassert = gpio_reset_deassert,
|
||||
+};
|
||||
+
|
||||
+static int of_gpio_reset_xlate(struct reset_controller_dev *rcdev,
|
||||
+ const struct of_phandle_args *reset_spec)
|
||||
+{
|
||||
+ if (WARN_ON(reset_spec->args_count != 0))
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int gpio_reset_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct device_node *np = pdev->dev.of_node;
|
||||
+ struct gpio_reset_data *drvdata;
|
||||
+ enum of_gpio_flags flags;
|
||||
+ unsigned long gpio_flags;
|
||||
+ bool initially_in_reset;
|
||||
+ int ret;
|
||||
+
|
||||
+ drvdata = devm_kzalloc(&pdev->dev, sizeof(*drvdata), GFP_KERNEL);
|
||||
+ if (drvdata == NULL)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ if (of_gpio_named_count(np, "reset-gpios") != 1)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ drvdata->gpio = of_get_named_gpio_flags(np, "reset-gpios", 0, &flags);
|
||||
+ if (drvdata->gpio == -EPROBE_DEFER) {
|
||||
+ return drvdata->gpio;
|
||||
+ } else if (!gpio_is_valid(drvdata->gpio)) {
|
||||
+ dev_err(&pdev->dev, "invalid reset gpio: %d\n", drvdata->gpio);
|
||||
+ return drvdata->gpio;
|
||||
+ }
|
||||
+
|
||||
+ drvdata->active_low = flags & OF_GPIO_ACTIVE_LOW;
|
||||
+
|
||||
+ ret = of_property_read_u32(np, "reset-delay-us", &drvdata->delay_us);
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+
|
||||
+ initially_in_reset = of_property_read_bool(np, "initially-in-reset");
|
||||
+ if (drvdata->active_low ^ initially_in_reset)
|
||||
+ gpio_flags = GPIOF_OUT_INIT_HIGH;
|
||||
+ else
|
||||
+ gpio_flags = GPIOF_OUT_INIT_LOW;
|
||||
+
|
||||
+ ret = devm_gpio_request_one(&pdev->dev, drvdata->gpio, gpio_flags, NULL);
|
||||
+ if (ret < 0) {
|
||||
+ dev_err(&pdev->dev, "failed to request gpio %d: %d\n",
|
||||
+ drvdata->gpio, ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ drvdata->rcdev.of_node = np;
|
||||
+ drvdata->rcdev.owner = THIS_MODULE;
|
||||
+ drvdata->rcdev.nr_resets = 1;
|
||||
+ drvdata->rcdev.ops = &gpio_reset_ops;
|
||||
+ drvdata->rcdev.of_xlate = of_gpio_reset_xlate;
|
||||
+ reset_controller_register(&drvdata->rcdev);
|
||||
+
|
||||
+ platform_set_drvdata(pdev, drvdata);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int gpio_reset_remove(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct gpio_reset_data *drvdata = platform_get_drvdata(pdev);
|
||||
+
|
||||
+ reset_controller_unregister(&drvdata->rcdev);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static struct of_device_id gpio_reset_dt_ids[] = {
|
||||
+ { .compatible = "gpio-reset" },
|
||||
+ { }
|
||||
+};
|
||||
+
|
||||
+static struct platform_driver gpio_reset_driver = {
|
||||
+ .probe = gpio_reset_probe,
|
||||
+ .remove = gpio_reset_remove,
|
||||
+ .driver = {
|
||||
+ .name = "gpio-reset",
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .of_match_table = of_match_ptr(gpio_reset_dt_ids),
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+module_platform_driver(gpio_reset_driver);
|
||||
+
|
||||
+MODULE_AUTHOR("Philipp Zabel <p.zabel@pengutronix.de>");
|
||||
+MODULE_DESCRIPTION("gpio reset controller");
|
||||
+MODULE_LICENSE("GPL");
|
||||
+MODULE_ALIAS("platform:gpio-reset");
|
||||
+MODULE_DEVICE_TABLE(of, gpio_reset_dt_ids);
|
||||
--
|
||||
1.8.2.1
|
||||
|
||||
From 03664ac63b20b55af9522449bbad048476d259d5 Mon Sep 17 00:00:00 2001
|
||||
From: Joel Fernandes <joelf@ti.com>
|
||||
Date: Wed, 3 Jul 2013 17:29:44 -0500
|
||||
Subject: [PATCH 2/2] sound: soc: soc-dmaengine-pcm: Add support for new
|
||||
DMAEngine request API
|
||||
|
||||
Formerly these resources were coming HWMOD on OMAP-like SoCs. With the
|
||||
impending removal of HWMOD data, drivers are being converted to use the
|
||||
"of-dma" method of requesting DMA channels which from DT and can be obtained
|
||||
using the dma_request_slave_channel API. Add support to the soc-dmaengine-pcm
|
||||
helpers so that we can fetch and open channels using this method.
|
||||
|
||||
Signed-off-by: Joel Fernandes <joelf@ti.com>
|
||||
---
|
||||
sound/core/pcm_dmaengine.c | 22 ++++++++++++++++++++++
|
||||
1 file changed, 22 insertions(+)
|
||||
|
||||
diff --git a/sound/core/pcm_dmaengine.c b/sound/core/pcm_dmaengine.c
|
||||
index aa924d9..461fe4f 100644
|
||||
--- a/sound/core/pcm_dmaengine.c
|
||||
+++ b/sound/core/pcm_dmaengine.c
|
||||
@@ -276,6 +276,16 @@ struct dma_chan *snd_dmaengine_pcm_request_channel(dma_filter_fn filter_fn,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_dmaengine_pcm_request_channel);
|
||||
|
||||
+struct dma_chan *snd_dmaengine_pcm_request_slave_channel(
|
||||
+ struct snd_pcm_substream *substream, char *name)
|
||||
+{
|
||||
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
+ struct device *dev = snd_soc_dai_get_drvdata(rtd->cpu_dai);
|
||||
+
|
||||
+ return dma_request_slave_channel(dev, name);
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(snd_dmaengine_pcm_request_slave_channel);
|
||||
+
|
||||
/**
|
||||
* snd_dmaengine_pcm_open - Open a dmaengine based PCM substream
|
||||
* @substream: PCM substream
|
||||
@@ -334,6 +344,18 @@ int snd_dmaengine_pcm_open_request_chan(struct snd_pcm_substream *substream,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_dmaengine_pcm_open_request_chan);
|
||||
|
||||
+int snd_dmaengine_pcm_open_request_slave_chan(struct snd_pcm_substream *substream, char *name)
|
||||
+{
|
||||
+ if(substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
|
||||
+ return snd_dmaengine_pcm_open(substream,
|
||||
+ snd_dmaengine_pcm_request_slave_channel(substream, "tx"));
|
||||
+ } else {
|
||||
+ return snd_dmaengine_pcm_open(substream,
|
||||
+ snd_dmaengine_pcm_request_slave_channel(substream, "rx"));
|
||||
+ }
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(snd_dmaengine_pcm_open_request_slave_chan);
|
||||
+
|
||||
/**
|
||||
* snd_dmaengine_pcm_close - Close a dmaengine based PCM substream
|
||||
* @substream: PCM substream
|
||||
--
|
||||
1.8.4.rc3
|
||||
|
||||
From ae38683badc8c80b29ccc8aa4e059f900b603551 Mon Sep 17 00:00:00 2001
|
||||
From: Pantelis Antoniou <panto@antoniou-consulting.com>
|
||||
Date: Fri, 26 Oct 2012 15:48:00 +0300
|
||||
Subject: [PATCH 1/2] omap-hsmmc: Correct usage of of_find_node_by_name
|
||||
|
||||
of_find_node_by_name expect to have the parent node reference taken.
|
||||
---
|
||||
drivers/mmc/host/omap_hsmmc.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
|
||||
index 6ac63df..f5b660c 100644
|
||||
--- a/drivers/mmc/host/omap_hsmmc.c
|
||||
+++ b/drivers/mmc/host/omap_hsmmc.c
|
||||
@@ -1893,6 +1893,16 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
|
||||
* as we want. */
|
||||
mmc->max_segs = 1024;
|
||||
|
||||
+ /* Eventually we should get our max_segs limitation for EDMA by
|
||||
+ * querying the dmaengine API */
|
||||
+ if (pdev->dev.of_node) {
|
||||
+ struct device_node *parent = of_node_get(pdev->dev.of_node->parent);
|
||||
+ struct device_node *node;
|
||||
+ node = of_find_node_by_name(parent, "edma");
|
||||
+ if (node)
|
||||
+ mmc->max_segs = 16;
|
||||
+ }
|
||||
+
|
||||
mmc->max_blk_size = 512; /* Block Length at max can be 1024 */
|
||||
mmc->max_blk_count = 0xFFFF; /* No. of Blocks is 16 bits */
|
||||
mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;
|
||||
--
|
||||
1.8.2.1
|
||||
|
||||
From 5d93a65cfc4ff6aaf78ab49f71daa2a644ea2ace Mon Sep 17 00:00:00 2001
|
||||
From: Pantelis Antoniou <panto@antoniou-consulting.com>
|
||||
Date: Fri, 30 Nov 2012 12:18:16 +0200
|
||||
Subject: [PATCH 2/2] omap_hsmmc: Add reset gpio
|
||||
|
||||
Add a gpio property for controlling reset of the mmc device.
|
||||
eMMC on the beaglebone black requires it.
|
||||
|
||||
Signed-off-by: Pantelis Antoniou <panto@antoniou-consulting.com>
|
||||
---
|
||||
drivers/mmc/host/omap_hsmmc.c | 40 +++++++++++++++++++++++++++++++++-
|
||||
include/linux/platform_data/mmc-omap.h | 3 +++
|
||||
2 files changed, 42 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
|
||||
index f5b660c..1bdb90f 100644
|
||||
--- a/drivers/mmc/host/omap_hsmmc.c
|
||||
+++ b/drivers/mmc/host/omap_hsmmc.c
|
||||
@@ -41,6 +41,8 @@
|
||||
#include <linux/pinctrl/consumer.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/platform_data/mmc-omap.h>
|
||||
+#include <linux/pinctrl/consumer.h>
|
||||
+#include <linux/err.h>
|
||||
|
||||
/* OMAP HSMMC Host Controller Registers */
|
||||
#define OMAP_HSMMC_SYSSTATUS 0x0014
|
||||
@@ -392,6 +394,7 @@ static inline int omap_hsmmc_have_reg(void)
|
||||
static int omap_hsmmc_gpio_init(struct omap_mmc_platform_data *pdata)
|
||||
{
|
||||
int ret;
|
||||
+ unsigned long flags;
|
||||
|
||||
if (gpio_is_valid(pdata->slots[0].switch_pin)) {
|
||||
if (pdata->slots[0].cover)
|
||||
@@ -421,6 +424,24 @@ static int omap_hsmmc_gpio_init(struct omap_mmc_platform_data *pdata)
|
||||
} else
|
||||
pdata->slots[0].gpio_wp = -EINVAL;
|
||||
|
||||
+ if (gpio_is_valid(pdata->slots[0].gpio_reset)) {
|
||||
+ flags = pdata->slots[0].gpio_reset_active_low ?
|
||||
+ GPIOF_OUT_INIT_LOW : GPIOF_OUT_INIT_HIGH;
|
||||
+ ret = gpio_request_one(pdata->slots[0].gpio_reset, flags,
|
||||
+ "mmc_reset");
|
||||
+ if (ret)
|
||||
+ goto err_free_wp;
|
||||
+
|
||||
+ /* hold reset */
|
||||
+ udelay(pdata->slots[0].gpio_reset_hold_us);
|
||||
+
|
||||
+ gpio_set_value(pdata->slots[0].gpio_reset,
|
||||
+ !pdata->slots[0].gpio_reset_active_low);
|
||||
+
|
||||
+ } else
|
||||
+ pdata->slots[0].gpio_reset = -EINVAL;
|
||||
+
|
||||
+
|
||||
return 0;
|
||||
|
||||
err_free_wp:
|
||||
@@ -434,6 +455,8 @@ err_free_sp:
|
||||
|
||||
static void omap_hsmmc_gpio_free(struct omap_mmc_platform_data *pdata)
|
||||
{
|
||||
+ if (gpio_is_valid(pdata->slots[0].gpio_reset))
|
||||
+ gpio_free(pdata->slots[0].gpio_reset);
|
||||
if (gpio_is_valid(pdata->slots[0].gpio_wp))
|
||||
gpio_free(pdata->slots[0].gpio_wp);
|
||||
if (gpio_is_valid(pdata->slots[0].switch_pin))
|
||||
@@ -788,7 +811,7 @@ omap_hsmmc_start_command(struct omap_hsmmc_host *host, struct mmc_command *cmd,
|
||||
* ac, bc, adtc, bcr. Only commands ending an open ended transfer need
|
||||
* a val of 0x3, rest 0x0.
|
||||
*/
|
||||
- if (cmd == host->mrq->stop)
|
||||
+ if (host->mrq && cmd == host->mrq->stop)
|
||||
cmdtype = 0x3;
|
||||
|
||||
cmdreg = (cmd->opcode << 24) | (resptype << 16) | (cmdtype << 22);
|
||||
@@ -830,6 +853,8 @@ static void omap_hsmmc_request_done(struct omap_hsmmc_host *host, struct mmc_req
|
||||
int dma_ch;
|
||||
unsigned long flags;
|
||||
|
||||
+ BUG_ON(mrq == NULL);
|
||||
+
|
||||
spin_lock_irqsave(&host->irq_lock, flags);
|
||||
host->req_in_progress = 0;
|
||||
dma_ch = host->dma_ch;
|
||||
@@ -1720,6 +1745,7 @@ static struct omap_mmc_platform_data *of_get_hsmmc_pdata(struct device *dev)
|
||||
struct device_node *np = dev->of_node;
|
||||
u32 bus_width, max_freq;
|
||||
int cd_gpio, wp_gpio;
|
||||
+ enum of_gpio_flags reset_flags;
|
||||
|
||||
cd_gpio = of_get_named_gpio(np, "cd-gpios", 0);
|
||||
wp_gpio = of_get_named_gpio(np, "wp-gpios", 0);
|
||||
@@ -1737,6 +1763,14 @@ static struct omap_mmc_platform_data *of_get_hsmmc_pdata(struct device *dev)
|
||||
pdata->nr_slots = 1;
|
||||
pdata->slots[0].switch_pin = cd_gpio;
|
||||
pdata->slots[0].gpio_wp = wp_gpio;
|
||||
+ reset_flags = 0;
|
||||
+ pdata->slots[0].gpio_reset = of_get_named_gpio_flags(np,
|
||||
+ "reset-gpios", 0, &reset_flags);
|
||||
+ pdata->slots[0].gpio_reset_active_low =
|
||||
+ (reset_flags & OF_GPIO_ACTIVE_LOW) != 0;
|
||||
+ pdata->slots[0].gpio_reset_hold_us = 100; /* default */
|
||||
+ of_property_read_u32(np, "reset-gpio-hold-us",
|
||||
+ &pdata->slots[0].gpio_reset_hold_us);
|
||||
|
||||
if (of_find_property(np, "ti,non-removable", NULL)) {
|
||||
pdata->slots[0].nonremovable = true;
|
||||
@@ -1802,6 +1836,10 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
+ pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
|
||||
+ if (IS_ERR(pinctrl))
|
||||
+ dev_warn(&pdev->dev, "unable to select pin group\n");
|
||||
+
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (res == NULL || irq < 0)
|
||||
diff --git a/include/linux/platform_data/mmc-omap.h b/include/linux/platform_data/mmc-omap.h
|
||||
index 2bf1b30..d548994 100644
|
||||
--- a/include/linux/platform_data/mmc-omap.h
|
||||
+++ b/include/linux/platform_data/mmc-omap.h
|
||||
@@ -115,6 +115,9 @@ struct omap_mmc_platform_data {
|
||||
|
||||
int switch_pin; /* gpio (card detect) */
|
||||
int gpio_wp; /* gpio (write protect) */
|
||||
+ int gpio_reset; /* gpio (reset) */
|
||||
+ int gpio_reset_active_low; /* 1 if reset is active low */
|
||||
+ u32 gpio_reset_hold_us; /* time to hold in us */
|
||||
|
||||
int (*set_bus_mode)(struct device *dev, int slot, int bus_mode);
|
||||
int (*set_power)(struct device *dev, int slot,
|
||||
--
|
||||
1.8.2.1
|
||||
|
||||
From b45e4df71f07f2178db133db540e3f15e0b4ec05 Mon Sep 17 00:00:00 2001
|
||||
From: Pantelis Antoniou <panto@antoniou-consulting.com>
|
||||
Date: Sat, 15 Sep 2012 12:00:41 +0300
|
||||
Subject: [PATCH] pinctrl: pinctrl-single must be initialized early.
|
||||
|
||||
When using pinctrl-single to handle i2c initialization, it has
|
||||
to be done early. Whether this is the best way to do so, is an
|
||||
exercise left to the reader.
|
||||
---
|
||||
drivers/pinctrl/pinctrl-single.c | 12 +++++++++++-
|
||||
1 file changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c
|
||||
index a82ace4..aeef35d 100644
|
||||
--- a/drivers/pinctrl/pinctrl-single.c
|
||||
+++ b/drivers/pinctrl/pinctrl-single.c
|
||||
@@ -1673,7 +1673,17 @@ static struct platform_driver pcs_driver = {
|
||||
#endif
|
||||
};
|
||||
|
||||
-module_platform_driver(pcs_driver);
|
||||
+static int __init pcs_init(void)
|
||||
+{
|
||||
+ return platform_driver_register(&pcs_driver);
|
||||
+}
|
||||
+postcore_initcall(pcs_init);
|
||||
+
|
||||
+static void __exit pcs_exit(void)
|
||||
+{
|
||||
+ platform_driver_unregister(&pcs_driver);
|
||||
+}
|
||||
+module_exit(pcs_exit);
|
||||
|
||||
MODULE_AUTHOR("Tony Lindgren <tony@atomide.com>");
|
||||
MODULE_DESCRIPTION("One-register-per-pin type device tree based pinctrl driver");
|
||||
--
|
||||
1.8.2.1
|
||||
|
||||
From e5e7abd2de7d8d4c74b5a1ccc6d47988250bd17d Mon Sep 17 00:00:00 2001
|
||||
From: Pantelis Antoniou <panto@antoniou-consulting.com>
|
||||
Date: Fri, 28 Jun 2013 18:39:55 +0300
|
||||
Subject: [PATCH 1/4] dts: beaglebone: Add I2C definitions for EEPROMs & capes
|
||||
|
||||
Add the I2C definitions for the EEPROM devices on the baseboard
|
||||
and on the possibly connected capes.
|
||||
|
||||
Signed-off-by: Pantelis Antoniou <panto@antoniou-consulting.com>
|
||||
---
|
||||
arch/arm/boot/dts/am335x-bone-common.dtsi | 39 +++++++++++++++++++++++++++++++
|
||||
1 file changed, 39 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi
|
||||
index e3f27ec..2d12775 100644
|
||||
--- a/arch/arm/boot/dts/am335x-bone-common.dtsi
|
||||
+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi
|
||||
@@ -84,6 +84,13 @@
|
||||
>;
|
||||
};
|
||||
|
||||
+ i2c2_pins: pinmux_i2c2_pins {
|
||||
+ pinctrl-single,pins = <
|
||||
+ 0x178 0x73 /* uart1_ctsn.i2c2_sda, SLEWCTRL_SLOW | INPUT_PULLUP | MODE3 */
|
||||
+ 0x17c 0x73 /* uart1_rtsn.i2c2_scl, SLEWCTRL_SLOW | INPUT_PULLUP | MODE3 */
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
uart0_pins: pinmux_uart0_pins {
|
||||
pinctrl-single,pins = <
|
||||
0x170 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart0_rxd.uart0_rxd */
|
||||
@@ -220,6 +227,38 @@
|
||||
reg = <0x24>;
|
||||
};
|
||||
|
||||
+ baseboard_eeprom: baseboard_eeprom@50 {
|
||||
+ compatible = "at,24c256";
|
||||
+ reg = <0x50>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c2 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&i2c2_pins>;
|
||||
+
|
||||
+ status = "okay";
|
||||
+ clock-frequency = <100000>;
|
||||
+
|
||||
+ cape_eeprom0: cape_eeprom0@54 {
|
||||
+ compatible = "at,24c256";
|
||||
+ reg = <0x54>;
|
||||
+ };
|
||||
+
|
||||
+ cape_eeprom1: cape_eeprom1@55 {
|
||||
+ compatible = "at,24c256";
|
||||
+ reg = <0x55>;
|
||||
+ };
|
||||
+
|
||||
+ cape_eeprom2: cape_eeprom2@56 {
|
||||
+ compatible = "at,24c256";
|
||||
+ reg = <0x56>;
|
||||
+ };
|
||||
+
|
||||
+ cape_eeprom3: cape_eeprom3@57 {
|
||||
+ compatible = "at,24c256";
|
||||
+ reg = <0x57>;
|
||||
+ };
|
||||
};
|
||||
|
||||
/include/ "tps65217.dtsi"
|
||||
--
|
||||
1.8.4.rc3
|
|
@ -0,0 +1,23 @@
|
|||
Bugzilla: 1012025
|
||||
Upstream-status: An initial work around for the cpsw driver issue trying to access HW registers
|
||||
with clock disabled. Upstream is working on a proper fix with the hope to land it in 3.13.
|
||||
|
||||
--- linux-3.12.4-1.fc20.x86_64/drivers/net/ethernet/ti/cpsw.c.orig 2013-12-11 20:52:41.576478796 +0000
|
||||
+++ linux-3.12.4-1.fc20.x86_64/drivers/net/ethernet/ti/cpsw.c 2013-12-11 20:55:14.418692261 +0000
|
||||
@@ -2001,6 +2001,8 @@
|
||||
goto clean_cpsw_iores_ret;
|
||||
}
|
||||
priv->regs = ss_regs;
|
||||
+
|
||||
+ pm_runtime_get_sync(&pdev->dev);
|
||||
priv->version = __raw_readl(&priv->regs->id_ver);
|
||||
priv->host_port = HOST_PORT_NUM;
|
||||
|
||||
@@ -2161,6 +2163,7 @@
|
||||
goto clean_irq_ret;
|
||||
}
|
||||
}
|
||||
+ pm_runtime_put_sync(&pdev->dev);
|
||||
|
||||
return 0;
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
--- linux-3.7.0-0.rc2.git1.2.fc19.x86_64/arch/arm/kernel/armksyms.c.orig 2012-10-01 00:47:46.000000000 +0100
|
||||
+++ linux-3.7.0-0.rc2.git1.2.fc19.x86_64/arch/arm/kernel/armksyms.c 2012-10-24 09:06:46.570452677 +0100
|
||||
@@ -50,6 +50,7 @@
|
||||
|
||||
/* platform dependent support */
|
||||
EXPORT_SYMBOL(arm_delay_ops);
|
||||
+EXPORT_SYMBOL(read_current_timer);
|
||||
|
||||
/* networking */
|
||||
EXPORT_SYMBOL(csum_partial);
|
|
@ -0,0 +1,95 @@
|
|||
Add initial support for cm-fx6 module.
|
||||
|
||||
cm-fx6 is a module based on mx6q SoC with the following features:
|
||||
- Up to 4GB of DDR3
|
||||
- 1 LCD/DVI output port
|
||||
- 1 HDMI output port
|
||||
- 2 LVDS LCD ports
|
||||
- Gigabit Ethernet
|
||||
- Analog Audio
|
||||
- CAN
|
||||
- SATA
|
||||
- NAND
|
||||
- PCIE
|
||||
|
||||
This patch allows to boot up the module, configures the serial console,
|
||||
the Ethernet adapter and the hearbeat led.
|
||||
|
||||
Signed-off-by: Valentin Raevsky <valentin@xxxxxxxxxxxxxx>
|
||||
Acked-by: Igor Grinberg <grinberg@xxxxxxxxxxxxxx>
|
||||
---
|
||||
arch/arm/boot/dts/imx6q-cm-fx6.dts | 51 ++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 51 insertions(+)
|
||||
create mode 100644 arch/arm/boot/dts/imx6q-cm-fx6.dts
|
||||
|
||||
diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
|
||||
new file mode 100644
|
||||
index 0000000..1080215
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
|
||||
@@ -0,0 +1,51 @@
|
||||
+/*
|
||||
+ * Copyright 2013 CompuLab Ltd.
|
||||
+ *
|
||||
+ * The code contained herein is licensed under the GNU General Public
|
||||
+ * License. You may obtain a copy of the GNU General Public License
|
||||
+ * Version 2 or later at the following locations:
|
||||
+ *
|
||||
+ * http://www.opensource.org/licenses/gpl-license.html
|
||||
+ * http://www.gnu.org/copyleft/gpl.html
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+#include "imx6q.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "CompuLab CM-FX6";
|
||||
+ compatible = "compulab,cm-fx6", "fsl,imx6q";
|
||||
+
|
||||
+ memory {
|
||||
+ reg = <0x10000000 0x80000000>;
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ compatible = "gpio-leds";
|
||||
+
|
||||
+ debug-led {
|
||||
+ label = "Heartbeat";
|
||||
+ gpios = <&gpio2 31 0>;
|
||||
+ linux,default-trigger = "heartbeat";
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&gpmi {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_gpmi_nand_1>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&fec {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_enet_1>;
|
||||
+ phy-mode = "rgmii";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart4 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_uart4_1>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
|
||||
--- a/arch/arm/boot/dts/Makefile
|
||||
+++ b/arch/arm/boot/dts/Makefile
|
||||
@@ -137,6 +137,7 @@
|
||||
imx6dl-sabresd.dtb \
|
||||
imx6dl-wandboard.dtb \
|
||||
imx6q-arm2.dtb \
|
||||
+ imx6q-cm-fx6.dtb \
|
||||
imx6q-phytec-pbab01.dtb \
|
||||
imx6q-sabreauto.dtb \
|
||||
imx6q-sabrelite.dtb \
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -1,14 +1,14 @@
|
|||
diff -urNp linux-3.9.4-300.fc19.armv7hl_orig/drivers/video/omap2/dss/core.c linux-3.9.4-300.fc19.armv7hl/drivers/video/omap2/dss/core.c
|
||||
--- linux-3.9.4-300.fc19.armv7hl_orig/drivers/video/omap2/dss/core.c 2013-04-28 20:36:01.000000000 -0400
|
||||
+++ linux-3.9.4-300.fc19.armv7hl/drivers/video/omap2/dss/core.c 2013-05-31 12:24:07.711334359 -0400
|
||||
@@ -596,6 +596,9 @@ static int __init omap_dss_init(void)
|
||||
{
|
||||
int r;
|
||||
|
||||
+ /* hack to load panel-tfp410 driver */
|
||||
+ request_module("panel-tfp410");
|
||||
+
|
||||
r = omap_dss_bus_register();
|
||||
if (r)
|
||||
return r;
|
||||
Binary files linux-3.9.4-300.fc19.armv7hl_orig/drivers/video/omap2/dss/.Makefile.swp and linux-3.9.4-300.fc19.armv7hl/drivers/video/omap2/dss/.Makefile.swp differ
|
||||
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
|
||||
index 60d3958..0e304ce 100644
|
||||
--- a/drivers/video/omap2/dss/core.c
|
||||
+++ b/drivers/video/omap2/dss/core.c
|
||||
@@ -298,6 +298,9 @@ static int __init omap_dss_init(void)
|
||||
int r;
|
||||
int i;
|
||||
|
||||
+ /* hack to load encoder-tfp410 driver */
|
||||
+ request_module("encoder-tfp410");
|
||||
+
|
||||
r = platform_driver_probe(&omap_dss_driver, omap_dss_probe);
|
||||
if (r)
|
||||
return r;
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
diff --git a/sound/soc/samsung/dma.c b/sound/soc/samsung/dma.c
|
||||
index 21b7926..19e6662 100644
|
||||
--- a/sound/soc/samsung/dma.c
|
||||
+++ b/sound/soc/samsung/dma.c
|
||||
@@ -76,7 +76,7 @@ static void dma_enqueue(struct snd_pcm_substream *substream)
|
||||
|
||||
pr_debug("Entered %s\n", __func__);
|
||||
|
||||
- limit = (prtd->dma_end - prtd->dma_start) / prtd->dma_period;
|
||||
+ limit = (u32)(prtd->dma_end - prtd->dma_start) / prtd->dma_period;
|
||||
|
||||
pr_debug("%s: loaded %d, limit %d\n",
|
||||
__func__, prtd->dma_loaded, limit);
|
|
@ -1,155 +0,0 @@
|
|||
commit 7eacd03810960823393521063734fc8188446bca
|
||||
Author: Neil Horman <nhorman@tuxdriver.com>
|
||||
Date: Fri Sep 13 11:05:33 2013 -0400
|
||||
|
||||
bonding: Make alb learning packet interval configurable
|
||||
|
||||
running bonding in ALB mode requires that learning packets be sent periodically,
|
||||
so that the switch knows where to send responding traffic. However, depending
|
||||
on switch configuration, there may not be any need to send traffic at the
|
||||
default rate of 3 packets per second, which represents little more than wasted
|
||||
data. Allow the ALB learning packet interval to be made configurable via sysfs
|
||||
|
||||
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
|
||||
Acked-by: Acked-by: Veaceslav Falico <vfalico@redhat.com>
|
||||
CC: Jay Vosburgh <fubar@us.ibm.com>
|
||||
CC: Andy Gospodarek <andy@greyhouse.net>
|
||||
CC: "David S. Miller" <davem@davemloft.net>
|
||||
Signed-off-by: Andy Gospodarek <andy@greyhouse.net>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
diff --git a/Documentation/networking/bonding.txt b/Documentation/networking/bonding.txt
|
||||
index 87bbcfe..9b28e71 100644
|
||||
--- a/Documentation/networking/bonding.txt
|
||||
+++ b/Documentation/networking/bonding.txt
|
||||
@@ -1362,6 +1362,12 @@ To add ARP targets:
|
||||
To remove an ARP target:
|
||||
# echo -192.168.0.100 > /sys/class/net/bond0/bonding/arp_ip_target
|
||||
|
||||
+To configure the interval between learning packet transmits:
|
||||
+# echo 12 > /sys/class/net/bond0/bonding/lp_interval
|
||||
+ NOTE: the lp_inteval is the number of seconds between instances where
|
||||
+the bonding driver sends learning packets to each slaves peer switch. The
|
||||
+default interval is 1 second.
|
||||
+
|
||||
Example Configuration
|
||||
---------------------
|
||||
We begin with the same example that is shown in section 3.3,
|
||||
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
|
||||
index 91f179d..f428ef57 100644
|
||||
--- a/drivers/net/bonding/bond_alb.c
|
||||
+++ b/drivers/net/bonding/bond_alb.c
|
||||
@@ -1472,7 +1472,7 @@ void bond_alb_monitor(struct work_struct *work)
|
||||
bond_info->lp_counter++;
|
||||
|
||||
/* send learning packets */
|
||||
- if (bond_info->lp_counter >= BOND_ALB_LP_TICKS) {
|
||||
+ if (bond_info->lp_counter >= BOND_ALB_LP_TICKS(bond)) {
|
||||
/* change of curr_active_slave involves swapping of mac addresses.
|
||||
* in order to avoid this swapping from happening while
|
||||
* sending the learning packets, the curr_slave_lock must be held for
|
||||
diff --git a/drivers/net/bonding/bond_alb.h b/drivers/net/bonding/bond_alb.h
|
||||
index 28d8e4c..c5eff5d 100644
|
||||
--- a/drivers/net/bonding/bond_alb.h
|
||||
+++ b/drivers/net/bonding/bond_alb.h
|
||||
@@ -36,14 +36,15 @@ struct slave;
|
||||
* Used for division - never set
|
||||
* to zero !!!
|
||||
*/
|
||||
-#define BOND_ALB_LP_INTERVAL 1 /* In seconds, periodic send of
|
||||
- * learning packets to the switch
|
||||
- */
|
||||
+#define BOND_ALB_DEFAULT_LP_INTERVAL 1
|
||||
+#define BOND_ALB_LP_INTERVAL(bond) (bond->params.lp_interval) /* In seconds, periodic send of
|
||||
+ * learning packets to the switch
|
||||
+ */
|
||||
|
||||
#define BOND_TLB_REBALANCE_TICKS (BOND_TLB_REBALANCE_INTERVAL \
|
||||
* ALB_TIMER_TICKS_PER_SEC)
|
||||
|
||||
-#define BOND_ALB_LP_TICKS (BOND_ALB_LP_INTERVAL \
|
||||
+#define BOND_ALB_LP_TICKS(bond) (BOND_ALB_LP_INTERVAL(bond) \
|
||||
* ALB_TIMER_TICKS_PER_SEC)
|
||||
|
||||
#define TLB_HASH_TABLE_SIZE 256 /* The size of the clients hash table.
|
||||
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
|
||||
index 72df399..55bbb8b 100644
|
||||
--- a/drivers/net/bonding/bond_main.c
|
||||
+++ b/drivers/net/bonding/bond_main.c
|
||||
@@ -4416,6 +4416,7 @@ static int bond_check_params(struct bond_params *params)
|
||||
params->all_slaves_active = all_slaves_active;
|
||||
params->resend_igmp = resend_igmp;
|
||||
params->min_links = min_links;
|
||||
+ params->lp_interval = BOND_ALB_DEFAULT_LP_INTERVAL;
|
||||
|
||||
if (primary) {
|
||||
strncpy(params->primary, primary, IFNAMSIZ);
|
||||
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c
|
||||
index eeab40b..c29b836 100644
|
||||
--- a/drivers/net/bonding/bond_sysfs.c
|
||||
+++ b/drivers/net/bonding/bond_sysfs.c
|
||||
@@ -1699,6 +1699,44 @@ out:
|
||||
static DEVICE_ATTR(resend_igmp, S_IRUGO | S_IWUSR,
|
||||
bonding_show_resend_igmp, bonding_store_resend_igmp);
|
||||
|
||||
+
|
||||
+static ssize_t bonding_show_lp_interval(struct device *d,
|
||||
+ struct device_attribute *attr,
|
||||
+ char *buf)
|
||||
+{
|
||||
+ struct bonding *bond = to_bond(d);
|
||||
+ return sprintf(buf, "%d\n", bond->params.lp_interval);
|
||||
+}
|
||||
+
|
||||
+static ssize_t bonding_store_lp_interval(struct device *d,
|
||||
+ struct device_attribute *attr,
|
||||
+ const char *buf, size_t count)
|
||||
+{
|
||||
+ struct bonding *bond = to_bond(d);
|
||||
+ int new_value, ret = count;
|
||||
+
|
||||
+ if (sscanf(buf, "%d", &new_value) != 1) {
|
||||
+ pr_err("%s: no lp interval value specified.\n",
|
||||
+ bond->dev->name);
|
||||
+ ret = -EINVAL;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ if (new_value <= 0) {
|
||||
+ pr_err ("%s: lp_interval must be between 1 and %d\n",
|
||||
+ bond->dev->name, INT_MAX);
|
||||
+ ret = -EINVAL;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ bond->params.lp_interval = new_value;
|
||||
+out:
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static DEVICE_ATTR(lp_interval, S_IRUGO | S_IWUSR,
|
||||
+ bonding_show_lp_interval, bonding_store_lp_interval);
|
||||
+
|
||||
static struct attribute *per_bond_attrs[] = {
|
||||
&dev_attr_slaves.attr,
|
||||
&dev_attr_mode.attr,
|
||||
@@ -1729,6 +1767,7 @@ static struct attribute *per_bond_attrs[] = {
|
||||
&dev_attr_all_slaves_active.attr,
|
||||
&dev_attr_resend_igmp.attr,
|
||||
&dev_attr_min_links.attr,
|
||||
+ &dev_attr_lp_interval.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
diff --git a/drivers/net/bonding/bonding.h b/drivers/net/bonding/bonding.h
|
||||
index 7ad8bd5..03cf3fd 100644
|
||||
--- a/drivers/net/bonding/bonding.h
|
||||
+++ b/drivers/net/bonding/bonding.h
|
||||
@@ -176,6 +176,7 @@ struct bond_params {
|
||||
int tx_queues;
|
||||
int all_slaves_active;
|
||||
int resend_igmp;
|
||||
+ int lp_interval;
|
||||
};
|
||||
|
||||
struct bond_parm_tbl {
|
|
@ -1,39 +0,0 @@
|
|||
From dde2356c8466298bd77fa699e0ea296372eed47b Mon Sep 17 00:00:00 2001
|
||||
From: Sachin Prabhu <sprabhu@redhat.com>
|
||||
Date: Fri, 27 Sep 2013 17:35:42 +0000
|
||||
Subject: cifs: Allow LANMAN auth method for servers supporting unencapsulated authentication methods
|
||||
|
||||
This allows users to use LANMAN authentication on servers which support
|
||||
unencapsulated authentication.
|
||||
|
||||
The patch fixes a regression where users using plaintext authentication
|
||||
were no longer able to do so because of changed bought in by patch
|
||||
3f618223dc0bdcbc8d510350e78ee2195ff93768
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1011621
|
||||
|
||||
Reported-by: Panos Kavalagios <Panagiotis.Kavalagios@eurodyn.com>
|
||||
Reviewed-by: Jeff Layton <jlayton@redhat.com>
|
||||
Signed-off-by: Sachin Prabhu <sprabhu@redhat.com>
|
||||
Signed-off-by: Steve French <smfrench@gmail.com>
|
||||
---
|
||||
(limited to 'fs/cifs')
|
||||
|
||||
diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c
|
||||
index 352358d..e87387d 100644
|
||||
--- a/fs/cifs/sess.c
|
||||
+++ b/fs/cifs/sess.c
|
||||
@@ -500,9 +500,9 @@ select_sectype(struct TCP_Server_Info *server, enum securityEnum requested)
|
||||
return NTLMv2;
|
||||
if (global_secflags & CIFSSEC_MAY_NTLM)
|
||||
return NTLM;
|
||||
- /* Fallthrough */
|
||||
default:
|
||||
- return Unspecified;
|
||||
+ /* Fallthrough to attempt LANMAN authentication next */
|
||||
+ break;
|
||||
}
|
||||
case CIFS_NEGFLAVOR_LANMAN:
|
||||
switch (requested) {
|
||||
--
|
||||
cgit v0.9.2
|
|
@ -1,6 +1,5 @@
|
|||
CONFIG_KUSER_HELPERS=y
|
||||
# CONFIG_ASYMMETRIC_KEY_TYPE is not set
|
||||
# CONFIG_COMMON_CLK_DEBUG is not set
|
||||
CONFIG_COMMON_CLK=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_FB_SSD1307=m
|
||||
|
@ -8,7 +7,13 @@ CONFIG_HW_PERF_EVENTS=y
|
|||
CONFIG_MMC=y
|
||||
CONFIG_NFS_FS=y
|
||||
# CONFIG_PID_IN_CONTEXTIDR is not set
|
||||
|
||||
CONFIG_PWM=y
|
||||
CONFIG_PWM_SYSFS=y
|
||||
|
||||
CONFIG_RESET_CONTROLLER=y
|
||||
CONFIG_RESET_GPIO=y
|
||||
|
||||
CONFIG_RCU_FANOUT_LEAF=16
|
||||
# CONFIG_RTC_DRV_SNVS is not set
|
||||
CONFIG_BACKLIGHT_PWM=m
|
||||
|
@ -18,6 +23,7 @@ CONFIG_ARM_ARCH_TIMER=y
|
|||
# CONFIG_ARM_DT_BL_CPUFREQ is not set
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_ARM_DMA_USE_IOMMU=y
|
||||
CONFIG_DMA_VIRTUAL_CHANNELS=y
|
||||
|
||||
# ARM AMBA generic HW
|
||||
CONFIG_ARM_AMBA=y
|
||||
|
@ -27,6 +33,7 @@ CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
|||
CONFIG_SERIAL_AMBA_PL011=y
|
||||
CONFIG_SERIO_AMBAKMI=y
|
||||
CONFIG_OC_ETM=y
|
||||
CONFIG_FB_ARMCLCD=y
|
||||
|
||||
# ARM VExpress
|
||||
CONFIG_ARCH_VEXPRESS=y
|
||||
|
@ -44,6 +51,7 @@ CONFIG_PROC_DEVICETREE=y
|
|||
CONFIG_OF=y
|
||||
CONFIG_OF_ADDRESS=y
|
||||
CONFIG_OF_DEVICE=y
|
||||
CONFIG_OF_DYNAMIC=y
|
||||
CONFIG_OF_EARLY_FLATTREE=y
|
||||
CONFIG_OF_FLATTREE=y
|
||||
CONFIG_OF_GPIO=y
|
||||
|
@ -57,6 +65,12 @@ CONFIG_OF_PCI=m
|
|||
# CONFIG_OF_SELFTEST is not set
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
|
||||
# External Connectors
|
||||
CONFIG_EXTCON=m
|
||||
CONFIG_OF_EXTCON=m
|
||||
CONFIG_EXTCON_GPIO=m
|
||||
CONFIG_EXTCON_ADC_JACK=m
|
||||
|
||||
# MTD
|
||||
CONFIG_MTD_BLKDEVS=m
|
||||
CONFIG_MTD_BLOCK=m
|
||||
|
@ -70,15 +84,29 @@ CONFIG_MTD_OF_PARTS=m
|
|||
CONFIG_MTD_PHYSMAP=m
|
||||
CONFIG_MTD_PHYSMAP_OF=m
|
||||
# CONFIG_MTD_PHYSMAP_COMPAT is not set
|
||||
CONFIG_OF_MTD=y
|
||||
|
||||
# GPIO
|
||||
CONFIG_GENERIC_GPIO=y
|
||||
CONFIG_GPIO_DEVRES=y
|
||||
CONFIG_GPIO_GENERIC=m
|
||||
CONFIG_GPIOLIB=y
|
||||
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
|
||||
CONFIG_ARCH_REQUIRE_GPIOLIB=y
|
||||
CONFIG_MDIO_GPIO=m
|
||||
CONFIG_POWER_RESET_GPIO=y
|
||||
CONFIG_RFKILL_GPIO=m
|
||||
CONFIG_POWER_RESET_RESTART=y
|
||||
|
||||
#i2c
|
||||
CONFIG_I2C_BOARDINFO=y
|
||||
CONFIG_I2C_GPIO=m
|
||||
CONFIG_I2C_MUX=m
|
||||
# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set
|
||||
CONFIG_I2C_MUX_GPIO=m
|
||||
CONFIG_I2C_MUX_PINCTRL=m
|
||||
CONFIG_I2C_MUX_PCA9541=m
|
||||
|
||||
# Sensors
|
||||
CONFIG_SENSORS_IIO_HWMON=m
|
||||
CONFIG_IIO_SYSFS_TRIGGER=m
|
||||
|
||||
# MFD
|
||||
CONFIG_MFD_CORE=m
|
||||
|
@ -96,8 +124,30 @@ CONFIG_SMC911X=m
|
|||
# CONFIG_I2C_NOMADIK is not set
|
||||
# CONFIG_IRQ_DOMAIN_DEBUG is not set
|
||||
# CONFIG_LEDS_RENESAS_TPU is not set
|
||||
# CONFIG_MMC_SDHCI_PXAV2 is not set
|
||||
# CONFIG_MMC_SDHCI_PXAV3 is not set
|
||||
# CONFIG_COMMON_CLK_SI5351 is not set
|
||||
# CONFIG_LOCK_STAT is not set
|
||||
# CONFIG_PCIEPORTBUS is not set
|
||||
|
||||
### turn off things which make no sense on embedded SoC
|
||||
|
||||
# core
|
||||
|
||||
# CONFIG_INFINIBAND is not set
|
||||
# CONFIG_ISDN is not set
|
||||
|
||||
# netdrv
|
||||
|
||||
# CONFIG_NET_VENDOR_DEC is not set
|
||||
# CONFIG_NET_VENDOR_CHELSIO is not set
|
||||
# CONFIG_NET_VENDOR_EXAR is not set
|
||||
# CONFIG_NET_VENDOR_INTEL is not set
|
||||
# CONFIG_NET_VENDOR_MELLANOX is not set
|
||||
|
||||
# scsi
|
||||
|
||||
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
|
||||
# CONFIG_SCSI_3W_SAS is not set
|
||||
# CONFIG_SCSI_PM8001 is not set
|
||||
# CONFIG_SCSI_IPS is not set
|
||||
# CONFIG_SCSI_CXGB3_ISCSI is not set
|
||||
# CONFIG_SCSI_CXGB4_ISCSI is not set
|
||||
|
||||
CONFIG_CRASH=m
|
||||
|
|
264
config-armv7
264
config-armv7
|
@ -10,29 +10,15 @@ CONFIG_ARCH_ROCKCHIP=y
|
|||
CONFIG_ARCH_SOCFPGA=y
|
||||
CONFIG_ARCH_SUNXI=y
|
||||
CONFIG_ARCH_TEGRA=y
|
||||
# CONFIG_ARCH_U8500 is not set
|
||||
CONFIG_ARCH_U8500=y
|
||||
# CONFIG_ARCH_VIRT is not set
|
||||
CONFIG_ARCH_ZYNQ=y
|
||||
|
||||
# These are supported in the LPAE kernel
|
||||
# CONFIG_ARM_LPAE is not set
|
||||
# CONFIG_XEN is not set
|
||||
# CONFIG_VIRTIO_CONSOLE is not set
|
||||
# CONFIG_ARM_VIRT_EXT is not set
|
||||
|
||||
# Generic
|
||||
CONFIG_REMOTEPROC=m
|
||||
|
||||
# FIXME should be generic (I think it's enabled by default)
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_ARMCLCD=m
|
||||
CONFIG_FB_CFB_COPYAREA=m
|
||||
CONFIG_FB_CFB_FILLRECT=m
|
||||
CONFIG_FB_CFB_IMAGEBLIT=m
|
||||
CONFIG_TOUCHSCREEN_ADS7846=m
|
||||
|
||||
CONFIG_OC_ETM=y
|
||||
|
||||
# mvebu
|
||||
CONFIG_MACH_ARMADA_370_XP=y
|
||||
CONFIG_MACH_ARMADA_370=y
|
||||
|
@ -69,12 +55,11 @@ CONFIG_ARCH_OMAP2PLUS_TYPICAL=y
|
|||
CONFIG_ARCH_OMAP3=y
|
||||
CONFIG_ARCH_OMAP4=y
|
||||
CONFIG_SOC_OMAP5=y
|
||||
# CONFIG_SOC_DRA7XX is not set
|
||||
# CONFIG_SOC_OMAP2420 is not set
|
||||
# CONFIG_SOC_OMAP2430 is not set
|
||||
CONFIG_SOC_OMAP3430=y
|
||||
CONFIG_SOC_TI81XX=y
|
||||
CONFIG_SOC_AM33XX=y
|
||||
CONFIG_SOC_AM43XX=y
|
||||
CONFIG_MACH_OMAP_GENERIC=y
|
||||
CONFIG_MACH_OMAP3_BEAGLE=y
|
||||
CONFIG_MACH_DEVKIT8000=y
|
||||
|
@ -82,8 +67,8 @@ CONFIG_MACH_OMAP_LDP=y
|
|||
CONFIG_MACH_OMAP3530_LV_SOM=y
|
||||
CONFIG_MACH_OMAP3_TORPEDO=y
|
||||
CONFIG_MACH_OVERO=y
|
||||
CONFIG_MACH_OMAP3EVM=y
|
||||
CONFIG_MACH_OMAP3517EVM=y
|
||||
# CONFIG_MACH_OMAP3EVM is not set
|
||||
# CONFIG_MACH_OMAP3517EVM is not set
|
||||
CONFIG_MACH_CRANEBOARD=y
|
||||
CONFIG_MACH_OMAP3_PANDORA=y
|
||||
CONFIG_MACH_TOUCHBOOK=y
|
||||
|
@ -98,8 +83,8 @@ CONFIG_MACH_CM_T3517=y
|
|||
CONFIG_MACH_IGEP0030=y
|
||||
CONFIG_MACH_SBC3530=y
|
||||
CONFIG_MACH_OMAP_3630SDP=y
|
||||
CONFIG_MACH_TI8168EVM=y
|
||||
CONFIG_MACH_TI8148EVM=y
|
||||
# CONFIG_MACH_TI8168EVM is not set
|
||||
# CONFIG_MACH_TI8148EVM is not set
|
||||
|
||||
CONFIG_SOC_HAS_REALTIME_COUNTER=y
|
||||
CONFIG_OMAP_RESET_CLOCKS=y
|
||||
|
@ -124,21 +109,6 @@ CONFIG_OMAP3_EMU=y
|
|||
CONFIG_OMAP_WATCHDOG=m
|
||||
CONFIG_TWL4030_WATCHDOG=m
|
||||
|
||||
CONFIG_TI_ST=m
|
||||
CONFIG_TI_EDMA=y
|
||||
CONFIG_TI_SOC_THERMAL=m
|
||||
CONFIG_TI_DAC7512=m
|
||||
CONFIG_TI_DAVINCI_EMAC=m
|
||||
CONFIG_TI_DAVINCI_MDIO=m
|
||||
CONFIG_TI_DAVINCI_CPDMA=m
|
||||
CONFIG_TI_CPSW=m
|
||||
CONFIG_TI_CPTS=y
|
||||
CONFIG_TI_EMIF=m
|
||||
CONFIG_MFD_TPS65217=m
|
||||
CONFIG_REGULATOR_TI_ABB=y
|
||||
CONFIG_REGULATOR_TPS65217=m
|
||||
CONFIG_BACKLIGHT_TPS65217=m
|
||||
|
||||
CONFIG_SERIAL_OMAP=y
|
||||
CONFIG_SERIAL_OMAP_CONSOLE=y
|
||||
|
||||
|
@ -151,31 +121,26 @@ CONFIG_TWL4030_CORE=y
|
|||
CONFIG_TWL4030_MADC=m
|
||||
CONFIG_TWL4030_POWER=y
|
||||
CONFIG_TWL4030_WATCHDOG=m
|
||||
CONFIG_BATTERY_TWL4030_MADC=m
|
||||
CONFIG_OMAP_USB2=m
|
||||
CONFIG_OMAP_USB3=m
|
||||
CONFIG_TWL4030_USB=m
|
||||
CONFIG_TWL6030_USB=m
|
||||
CONFIG_TWL6030_PWM=m
|
||||
CONFIG_TWL6040_CORE=y
|
||||
CONFIG_CLK_TWL6040=m
|
||||
CONFIG_OMAP_INTERCONNECT=m
|
||||
# CONFIG_MFD_TPS80031 is not set
|
||||
CONFIG_MFD_TI_AM335X_TSCADC=m
|
||||
CONFIG_MFD_OMAP_USB_HOST=y
|
||||
CONFIG_MTD_ONENAND_OMAP2=m
|
||||
CONFIG_HDQ_MASTER_OMAP=m
|
||||
CONFIG_REGULATOR_TWL4030=y
|
||||
CONFIG_BACKLIGHT_PANDORA=m
|
||||
CONFIG_OMAP_OCP2SCP=m
|
||||
CONFIG_OMAP_USB2=m
|
||||
CONFIG_OMAP_USB3=m
|
||||
CONFIG_USB_EHCI_HCD_OMAP=m
|
||||
CONFIG_USB_OHCI_HCD_PLATFORM=m
|
||||
CONFIG_USB_OHCI_HCD_OMAP3=y
|
||||
CONFIG_USB_MUSB_AM35X=m
|
||||
CONFIG_USB_MUSB_OMAP2PLUS=m
|
||||
CONFIG_USB_MUSB_HDRC=m
|
||||
CONFIG_USB_GADGET_MUSB_HDRC=m
|
||||
# CONFIG_MUSB_PIO_ONLY is not set
|
||||
# CONFIG_USB_MUSB_DEBUG is not set
|
||||
CONFIG_OMAP_CONTROL_USB=m
|
||||
CONFIG_MMC_OMAP=y
|
||||
CONFIG_MMC_OMAP_HS=y
|
||||
|
@ -184,23 +149,29 @@ CONFIG_RTC_DRV_MAX8907=m
|
|||
CONFIG_RTC_DRV_TWL4030=y
|
||||
CONFIG_RTC_DRV_OMAP=y
|
||||
CONFIG_SENSORS_TWL4030_MADC=m
|
||||
CONFIG_TWL6030_GPADC=m
|
||||
|
||||
# OMAP5 (possibly other devices too)
|
||||
CONFIG_MFD_PALMAS=y
|
||||
CONFIG_PINCTRL_PALMAS=y
|
||||
CONFIG_EXTCON_PALMAS=m
|
||||
CONFIG_RTC_DRV_PALMAS=m
|
||||
CONFIG_REGULATOR_PALMAS=m
|
||||
CONFIG_GPIO_PALMAS=y
|
||||
|
||||
CONFIG_WL_TI=y
|
||||
CONFIG_WLCORE_SDIO=m
|
||||
CONFIG_WLCORE_SPI=m
|
||||
CONFIG_WL1251_SPI=m
|
||||
CONFIG_WL12XX_SPI=m
|
||||
CONFIG_WL12XX_SDIO_TEST=m
|
||||
CONFIG_WL18XX=m
|
||||
CONFIG_WILINK_PLATFORM_DATA=y
|
||||
CONFIG_MFD_WL1273_CORE=m
|
||||
CONFIG_NFC_WILINK=m
|
||||
|
||||
CONFIG_MTD_NAND_OMAP2=m
|
||||
CONFIG_SPI_DAVINCI=m
|
||||
CONFIG_SPI_OMAP24XX=m
|
||||
CONFIG_MFD_TI_SSP=m
|
||||
CONFIG_SPI_TI_SSP=m
|
||||
CONFIG_SPI_TI_QSPI=m
|
||||
|
||||
CONFIG_INPUT_TWL4030_PWRBUTTON=m
|
||||
CONFIG_INPUT_TWL4030_VIBRA=m
|
||||
|
@ -211,6 +182,8 @@ CONFIG_TOUCHSCREEN_TI_TSCADC=m
|
|||
|
||||
# OMAP thermal temp. Can likely be built as module but doesn't autoload so build in to ensure performance on PandaES
|
||||
CONFIG_OMAP_BANDGAP=y
|
||||
CONFIG_TI_SOC_THERMAL=m
|
||||
CONFIG_TI_THERMAL=y
|
||||
CONFIG_OMAP4_THERMAL=y
|
||||
CONFIG_OMAP5_THERMAL=y
|
||||
|
||||
|
@ -230,7 +203,6 @@ CONFIG_CRYPTO_DEV_OMAP_SHAM=m
|
|||
CONFIG_CRYPTO_DEV_OMAP_AES=m
|
||||
CONFIG_HW_RANDOM_OMAP=m
|
||||
|
||||
CONFIG_DRM_TILCDC=m
|
||||
CONFIG_DRM_OMAP=m
|
||||
CONFIG_DRM_OMAP_NUM_CRTCS=2
|
||||
CONFIG_OMAP2_VRFB=y
|
||||
|
@ -253,17 +225,6 @@ CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0
|
|||
CONFIG_OMAP2_DSS_SLEEP_BEFORE_RESET=y
|
||||
CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y
|
||||
|
||||
CONFIG_PANEL_GENERIC_DPI=m
|
||||
CONFIG_PANEL_TFP410=m
|
||||
CONFIG_PANEL_SHARP_LS037V7DW01=m
|
||||
CONFIG_PANEL_PICODLP=m
|
||||
CONFIG_PANEL_TAAL=m
|
||||
CONFIG_PANEL_NEC_NL8048HL11_01B=m
|
||||
CONFIG_PANEL_TPO_TD043MTEA1=m
|
||||
CONFIG_PANEL_LGPHILIPS_LB035Q02=m
|
||||
CONFIG_PANEL_ACX565AKM=m
|
||||
# CONFIG_PANEL_N8X0 is not set
|
||||
|
||||
CONFIG_DISPLAY_ENCODER_TFP410=m
|
||||
CONFIG_DISPLAY_ENCODER_TPD12S015=m
|
||||
CONFIG_DISPLAY_CONNECTOR_DVI=m
|
||||
|
@ -294,15 +255,11 @@ CONFIG_V4L_PLATFORM_DRIVERS=y
|
|||
CONFIG_V4L_TEST_DRIVERS=y
|
||||
CONFIG_VIDEO_VIVI=m
|
||||
|
||||
CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040=m
|
||||
CONFIG_SND_OMAP_SOC_OMAP_HDMI=m
|
||||
CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m
|
||||
CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m
|
||||
|
||||
CONFIG_SND_OMAP_SOC=m
|
||||
CONFIG_SND_SOC_I2C_AND_SPI=m
|
||||
CONFIG_SND_OMAP_SOC_AM3517EVM=m
|
||||
CONFIG_SND_OMAP_SOC_DMIC=m
|
||||
CONFIG_SND_OMAP_SOC_HDMI=m
|
||||
CONFIG_SND_OMAP_SOC_IGEP0020=m
|
||||
CONFIG_SND_OMAP_SOC_MCBSP=m
|
||||
CONFIG_SND_OMAP_SOC_MCPDM=m
|
||||
|
@ -339,31 +296,65 @@ CONFIG_OMAP_REMOTEPROC=m
|
|||
# CONFIG_OMAP_MUX_DEBUG is not set
|
||||
# CONFIG_VIDEO_OMAP3_DEBUG is not set
|
||||
|
||||
# AM33xx
|
||||
CONFIG_SOC_AM33XX=y
|
||||
CONFIG_SOC_AM43XX=y
|
||||
CONFIG_AM335X_CONTROL_USB=m
|
||||
CONFIG_AM335X_PHY_USB=m
|
||||
CONFIG_USB_MUSB_AM335X_CHILD=y
|
||||
CONFIG_MFD_TI_AM335X_TSCADC=m
|
||||
CONFIG_TI_ST=m
|
||||
CONFIG_TI_DAC7512=m
|
||||
CONFIG_TI_DAVINCI_EMAC=m
|
||||
CONFIG_TI_DAVINCI_MDIO=m
|
||||
CONFIG_TI_DAVINCI_CPDMA=m
|
||||
CONFIG_TI_CPSW=m
|
||||
CONFIG_TI_CPTS=y
|
||||
CONFIG_TI_EMIF=m
|
||||
CONFIG_DRM_TILCDC=m
|
||||
CONFIG_SPI_DAVINCI=m
|
||||
CONFIG_REGULATOR_TI_ABB=m
|
||||
CONFIG_TI_PRIV_EDMA=y
|
||||
CONFIG_TI_EDMA=y
|
||||
# Terribly unstable so disable for now
|
||||
# CONFIG_USB_TI_CPPI41_DMA is not set
|
||||
# CONFIG_TI_CPPI41 is not set
|
||||
CONFIG_MFD_TI_AM335X_TSCADC=m
|
||||
CONFIG_CHARGER_BQ24190=m
|
||||
CONFIG_TI_ADC081C=m
|
||||
CONFIG_TI_AM335X_ADC=m
|
||||
CONFIG_PWM_TIPWMSS=y
|
||||
|
||||
# Allwinner a1x
|
||||
CONFIG_PINCTRL_SUNXI=y
|
||||
CONFIG_SUNXI_WATCHDOG=m
|
||||
CONFIG_MDIO_SUN4I=m
|
||||
CONFIG_NET_VENDOR_ALLWINNER=y
|
||||
CONFIG_SUN4I_EMAC=m
|
||||
|
||||
# imx
|
||||
# i.MX
|
||||
CONFIG_MXC_IRQ_PRIOR=y
|
||||
# CONFIG_MXC_DEBUG_BOARD is not set
|
||||
CONFIG_MACH_IMX51_DT=y
|
||||
# CONFIG_MACH_MX51_BABBAGE is not set
|
||||
# CONFIG_MACH_EUKREA_CPUIMX51SD is not set
|
||||
CONFIG_SOC_IMX53=y
|
||||
CONFIG_SOC_IMX6Q=y
|
||||
CONFIG_SOC_IMX6SL=y
|
||||
CONFIG_MACH_IMX51_DT=y
|
||||
# CONFIG_MACH_MX51_BABBAGE is not set
|
||||
# CONFIG_MACH_EUKREA_CPUIMX51SD is not set
|
||||
CONFIG_ARM_IMX6Q_CPUFREQ=m
|
||||
CONFIG_IMX_THERMAL=m
|
||||
CONFIG_PATA_IMX=m
|
||||
CONFIG_USB_CHIPIDEA=m
|
||||
CONFIG_USB_CHIPIDEA_UDC=y
|
||||
CONFIG_USB_CHIPIDEA_HOST=y
|
||||
# CONFIG_USB_CHIPIDEA_DEBUG is not set
|
||||
CONFIG_USB_FSL_USB2=m
|
||||
CONFIG_NET_VENDOR_FREESCALE=y
|
||||
CONFIG_FEC=m
|
||||
CONFIG_KEYBOARD_IMX=m
|
||||
CONFIG_SERIAL_IMX=y
|
||||
CONFIG_SERIAL_IMX_CONSOLE=y
|
||||
CONFIG_PINCTRL_IMX6SL=y
|
||||
CONFIG_I2C_IMX=m
|
||||
CONFIG_SPI_IMX=m
|
||||
CONFIG_MFD_MC13783=m
|
||||
|
@ -371,8 +362,11 @@ CONFIG_MFD_MC13XXX_SPI=m
|
|||
CONFIG_W1_MASTER_MXC=m
|
||||
CONFIG_IMX_WEIM=y
|
||||
CONFIG_IMX2_WDT=m
|
||||
CONFIG_HW_RANDOM_MXC_RNGA=m
|
||||
CONFIG_CRYPTO_DEV_SAHARA=m
|
||||
CONFIG_RTC_DRV_SNVS=m
|
||||
# CONFIG_FB_MX3 is not set
|
||||
|
||||
CONFIG_SND_IMX_SOC=m
|
||||
CONFIG_SND_SOC_FSL_SSI=m
|
||||
CONFIG_SND_SOC_FSL_UTILS=m
|
||||
|
@ -383,9 +377,12 @@ CONFIG_SND_SOC_IMX_PCM_DMA=m
|
|||
CONFIG_SND_SOC_IMX_SGTL5000=m
|
||||
CONFIG_SND_SOC_IMX_WM8962=m
|
||||
CONFIG_SND_SOC_IMX_MC13783=m
|
||||
CONFIG_SND_SOC_IMX_SPDIF=m
|
||||
|
||||
CONFIG_USB_EHCI_MXC=m
|
||||
CONFIG_USB_IMX21_HCD=m
|
||||
CONFIG_USB_MXS_PHY=m
|
||||
CONFIG_MMC_DW_SOCFPGA=m
|
||||
CONFIG_MMC_SDHCI_ESDHC_IMX=m
|
||||
CONFIG_MMC_MXC=m
|
||||
CONFIG_SPI_MXS=m
|
||||
|
@ -397,29 +394,51 @@ CONFIG_IMX_SDMA=m
|
|||
CONFIG_IMX_DMA=m
|
||||
CONFIG_AHCI_IMX=m
|
||||
# CONFIG_MXS_DMA is not set
|
||||
|
||||
CONFIG_PWM_IMX=m
|
||||
CONFIG_BACKLIGHT_PWM=m
|
||||
CONFIG_DRM_IMX=m
|
||||
CONFIG_DRM_IMX_FB_HELPER=m
|
||||
CONFIG_DRM_IMX_HDMI=m
|
||||
CONFIG_DRM_IMX_IPUV3_CORE=m
|
||||
CONFIG_DRM_IMX_IPUV3=m
|
||||
# CONFIG_DRM_IMX_LDB is not set
|
||||
CONFIG_DRM_IMX_PARALLEL_DISPLAY=m
|
||||
CONFIG_DRM_IMX_TVE=m
|
||||
CONFIG_VIDEO_CODA=m
|
||||
|
||||
CONFIG_MFD_SYSCON=y
|
||||
CONFIG_SENSORS_MC13783_ADC=m
|
||||
CONFIG_REGULATOR_ANATOP=m
|
||||
CONFIG_REGULATOR_MC13783=m
|
||||
CONFIG_REGULATOR_MC13892=m
|
||||
CONFIG_LEDS_MC13783=m
|
||||
CONFIG_RTC_DRV_MC13XXX=m
|
||||
CONFIG_CAN_FLEXCAN=m
|
||||
|
||||
CONFIG_INPUT_PWM_BEEPER=m
|
||||
CONFIG_INPUT_88PM80X_ONKEY=m
|
||||
|
||||
# exynos
|
||||
# CONFIG_DRM_EXYNOS is not set
|
||||
# CONFIG_PINCTRL_EXYNOS5440 is not set
|
||||
# CONFIG_PINCTRL_EXYNOS is not set
|
||||
# i.MX6Q (and likely Samsung among others)
|
||||
CONFIG_MFD_DA9052_I2C=y
|
||||
CONFIG_MFD_DA9052_SPI=y
|
||||
CONFIG_MFD_DA9055=y
|
||||
CONFIG_TOUCHSCREEN_DA9052=m
|
||||
CONFIG_INPUT_DA9052_ONKEY=m
|
||||
CONFIG_INPUT_DA9055_ONKEY=m
|
||||
CONFIG_GPIO_DA9052=m
|
||||
CONFIG_GPIO_DA9055=m
|
||||
CONFIG_BATTERY_DA9052=m
|
||||
CONFIG_SENSORS_DA9052_ADC=m
|
||||
CONFIG_SENSORS_DA9055=m
|
||||
CONFIG_DA9052_WATCHDOG=m
|
||||
CONFIG_DA9055_WATCHDOG=m
|
||||
CONFIG_BACKLIGHT_DA9052=m
|
||||
CONFIG_LEDS_DA9052=m
|
||||
CONFIG_RTC_DRV_DA9052=m
|
||||
CONFIG_RTC_DRV_DA9055=m
|
||||
CONFIG_REGULATOR_DA9052=m
|
||||
CONFIG_REGULATOR_DA9055=m
|
||||
|
||||
# picoxcell
|
||||
CONFIG_CRYPTO_DEV_PICOXCELL=m
|
||||
|
@ -431,6 +450,7 @@ CONFIG_MACH_SNOWBALL=y
|
|||
CONFIG_MACH_UX500_DT=y
|
||||
|
||||
CONFIG_ABX500_CORE=y
|
||||
CONFIG_ARM_U8500_CPUIDLE=y
|
||||
CONFIG_UX500_DEBUG_UART=2
|
||||
CONFIG_AB8500_CORE=y
|
||||
CONFIG_STE_DMA40=y
|
||||
|
@ -464,6 +484,19 @@ CONFIG_CW1200=m
|
|||
CONFIG_CW1200_WLAN_SDIO=m
|
||||
CONFIG_CW1200_WLAN_SPI=m
|
||||
CONFIG_UX500_WATCHDOG=m
|
||||
CONFIG_IIO_ST_ACCEL_3AXIS=m
|
||||
CONFIG_IIO_ST_GYRO_3AXIS=m
|
||||
CONFIG_IIO_ST_GYRO_I2C_3AXIS=m
|
||||
CONFIG_IIO_ST_GYRO_SPI_3AXIS=m
|
||||
CONFIG_IIO_ST_MAGN_3AXIS=m
|
||||
CONFIG_IIO_ST_MAGN_I2C_3AXIS=m
|
||||
CONFIG_IIO_ST_MAGN_SPI_3AXIS=m
|
||||
CONFIG_IIO_ST_PRESS=m
|
||||
CONFIG_IIO_ST_PRESS_I2C=m
|
||||
CONFIG_IIO_ST_PRESS_SPI=m
|
||||
CONFIG_IIO_ST_SENSORS_I2C=m
|
||||
CONFIG_IIO_ST_SENSORS_SPI=m
|
||||
CONFIG_IIO_ST_SENSORS_CORE=m
|
||||
|
||||
# tegra
|
||||
CONFIG_ARCH_TEGRA_2x_SOC=y
|
||||
|
@ -475,7 +508,7 @@ CONFIG_TEGRA30_MC=y
|
|||
|
||||
CONFIG_SERIAL_TEGRA=y
|
||||
|
||||
CONFIG_TEGRA_PCI=y
|
||||
CONFIG_PCI_TEGRA=y
|
||||
CONFIG_TEGRA_IOMMU_GART=y
|
||||
CONFIG_TEGRA_IOMMU_SMMU=y
|
||||
CONFIG_MMC_SDHCI_TEGRA=m
|
||||
|
@ -490,6 +523,7 @@ CONFIG_TEGRA20_APB_DMA=y
|
|||
CONFIG_SPI_TEGRA20_SFLASH=m
|
||||
CONFIG_SPI_TEGRA20_SLINK=m
|
||||
|
||||
CONFIG_MFD_MAX8907=m
|
||||
CONFIG_KEYBOARD_TEGRA=m
|
||||
CONFIG_PINCTRL_TEGRA=y
|
||||
CONFIG_PINCTRL_TEGRA20=y
|
||||
|
@ -519,7 +553,6 @@ CONFIG_NVEC_LEDS=y
|
|||
CONFIG_NVEC_PAZ00=y
|
||||
CONFIG_MFD_TPS6586X=y
|
||||
CONFIG_GPIO_TPS6586X=y
|
||||
CONFIG_REGULATOR_TPS6586X=m
|
||||
CONFIG_RTC_DRV_TPS6586X=m
|
||||
|
||||
CONFIG_PWM_TEGRA=m
|
||||
|
@ -534,16 +567,19 @@ CONFIG_DRM_TEGRA=y
|
|||
CONFIG_CRYPTO_DEV_TEGRA_AES=m
|
||||
|
||||
CONFIG_LEDS_RENESAS_TPU=y
|
||||
CONFIG_GPIO_PCA953X=m
|
||||
|
||||
# OLPC XO
|
||||
CONFIG_SERIO_OLPC_APSP=m
|
||||
|
||||
# Zynq-7xxx
|
||||
# likely needs usb/mmc still
|
||||
CONFIG_SERIAL_UARTLITE=y
|
||||
CONFIG_SERIAL_UARTLITE_CONSOLE=y
|
||||
CONFIG_SERIAL_XILINX_PS_UART=y
|
||||
CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
|
||||
CONFIG_COMMON_CLK_AXI_CLKGEN=m
|
||||
CONFIG_CPU_IDLE_ZYNQ=y
|
||||
CONFIG_ARM_ZYNQ_CPUIDLE=y
|
||||
CONFIG_LATTICE_ECP3_CONFIG=m
|
||||
CONFIG_NET_VENDOR_XILINX=y
|
||||
CONFIG_XILINX_EMACLITE=m
|
||||
|
@ -551,73 +587,32 @@ CONFIG_GPIO_XILINX=y
|
|||
CONFIG_I2C_XILINX=m
|
||||
CONFIG_SPI_XILINX=m
|
||||
|
||||
# MMC/SD
|
||||
CONFIG_MMC_TMIO=m
|
||||
CONFIG_MMC_SDHCI_PXAV3=m
|
||||
CONFIG_MMC_SDHCI_PXAV2=m
|
||||
|
||||
# Multi function devices
|
||||
CONFIG_MFD_88PM800=m
|
||||
CONFIG_MFD_88PM805=m
|
||||
CONFIG_MFD_T7L66XB=y
|
||||
CONFIG_MFD_TC6387XB=y
|
||||
|
||||
# Generic drivers
|
||||
CONFIG_REMOTEPROC=m
|
||||
|
||||
# Regulator drivers
|
||||
CONFIG_REGULATOR_FAN53555=m
|
||||
# CONFIG_CHARGER_MANAGER is not set
|
||||
# CONFIG_REGULATOR_DUMMY is not set
|
||||
# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
|
||||
# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
|
||||
# CONFIG_REGULATOR_88PM800 is not set
|
||||
CONFIG_REGULATOR_AD5398=m
|
||||
CONFIG_REGULATOR_ISL6271A=m
|
||||
CONFIG_REGULATOR_LP3971=m
|
||||
CONFIG_REGULATOR_LP3972=m
|
||||
CONFIG_REGULATOR_LP872X=y
|
||||
CONFIG_REGULATOR_LP8755=m
|
||||
CONFIG_REGULATOR_MAX1586=m
|
||||
CONFIG_REGULATOR_MAX8649=m
|
||||
CONFIG_REGULATOR_MAX8660=m
|
||||
CONFIG_REGULATOR_MAX8907=m
|
||||
CONFIG_REGULATOR_MAX8952=m
|
||||
CONFIG_REGULATOR_MAX8973=m
|
||||
CONFIG_REGULATOR_LP3971=m
|
||||
CONFIG_REGULATOR_LP3972=m
|
||||
CONFIG_REGULATOR_TPS51632=m
|
||||
CONFIG_REGULATOR_TPS62360=m
|
||||
CONFIG_REGULATOR_TPS65023=m
|
||||
CONFIG_REGULATOR_TPS6524X=m
|
||||
CONFIG_REGULATOR_TPS6507X=m
|
||||
CONFIG_REGULATOR_TPS65912=m
|
||||
CONFIG_REGULATOR_MAX8907=m
|
||||
CONFIG_REGULATOR_LP872X=y
|
||||
CONFIG_REGULATOR_LP8755=m
|
||||
|
||||
# usb gadget
|
||||
CONFIG_USB_GADGET=m
|
||||
CONFIG_USB_GADGET_VBUS_DRAW=100
|
||||
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
|
||||
# CONFIG_USB_FSL_USB2 is not set
|
||||
# CONFIG_USB_FUSB300 is not set
|
||||
# CONFIG_USB_RENESAS_USBHS is not set
|
||||
# CONFIG_USB_GADGET_DEBUG is not set
|
||||
# CONFIG_USB_GADGET_DEBUG_FILES is not set
|
||||
# CONFIG_USB_GADGET_DEBUG_FS is not set
|
||||
# CONFIG_USB_GADGET_VBUS_DRAW is not set
|
||||
# CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS is not set
|
||||
# CONFIG_USB_FOTG210_UDC is not set
|
||||
# CONFIG_USB_R8A66597 is not set
|
||||
# CONFIG_USB_PXA27X is not set
|
||||
# CONFIG_USB_MV_UDC is not set
|
||||
# CONFIG_USB_MV_U3D is not set
|
||||
# CONFIG_USB_M66592 is not set
|
||||
# CONFIG_USB_AMD5536UDC is not set
|
||||
# CONFIG_USB_NET2272 is not set
|
||||
# CONFIG_USB_NET2280 is not set
|
||||
# CONFIG_USB_GOKU is not set
|
||||
# CONFIG_USB_EG20T is not set
|
||||
# CONFIG_USB_DUMMY_HCD is not set
|
||||
# CONFIG_USB_ZERO_HNPTEST is not set
|
||||
# CONFIG_USB_ETH_RNDIS is not set
|
||||
# CONFIG_USB_ETH_EEM is not set
|
||||
|
||||
# Needs work/investigation
|
||||
|
||||
# CONFIG_ARM_CHARLCD is not set
|
||||
# CONFIG_MTD_AFS_PARTS is not set
|
||||
# CONFIG_IP_PNP_RARP is not set
|
||||
# CONFIG_PID_IN_CONTEXTIDR is not set
|
||||
|
@ -627,33 +622,22 @@ CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
|
|||
|
||||
# Defined config options we don't use yet
|
||||
# CONFIG_PINCTRL_IMX35 is not set
|
||||
# CONFIG_REGULATOR_ANATOP is not set
|
||||
|
||||
# CONFIG_BATTERY_RX51 is not set
|
||||
# CONFIG_IR_RX51 is not set
|
||||
# CONFIG_GENERIC_CPUFREQ_CPU0 is not set
|
||||
# CONFIG_MFD_SMSC is not set
|
||||
# CONFIG_MFD_SEC_CORE is not set
|
||||
# CONFIG_MFD_DA9055 is not set
|
||||
# CONFIG_MFD_LP8788 is not set
|
||||
# CONFIG_MFD_MAX8907 is not set
|
||||
# CONFIG_MFD_TPS65912_I2C is not set
|
||||
# CONFIG_MFD_DA9052_I2C is not set
|
||||
# CONFIG_MFD_MAX77686 is not set
|
||||
# CONFIG_MFD_MAX77693 is not set
|
||||
# CONFIG_MFD_MAX8997 is not set
|
||||
# CONFIG_MFD_TPS65090 is not set
|
||||
# CONFIG_MFD_AAT2870_CORE is not set
|
||||
# CONFIG_MFD_RC5T583 is not set
|
||||
# CONFIG_MFD_PALMAS is not set
|
||||
# CONFIG_MFD_DA9055 is not set
|
||||
# CONFIG_MFD_SMSC is not set
|
||||
# CONFIG_MFD_TPS65910 is not set
|
||||
# CONFIG_MFD_AS3711 is not set
|
||||
# CONFIG_PMIC_DA903X is not set
|
||||
# CONFIG_PMIC_ADP5520 is not set
|
||||
# CONFIG_REGULATOR_LP3972 is not set
|
||||
# CONFIG_REGULATOR_LP872X is not set
|
||||
|
||||
# CONFIG_DVB_USB_PCTV452E is not set
|
||||
# We need to fix these as they should be either generic includes or kconfig fixes
|
||||
|
@ -663,9 +647,7 @@ CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
|
|||
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
|
||||
|
||||
# CONFIG_VIRTUALIZATION is not set
|
||||
# CONFIG_CHARGER_MANAGER is not set
|
||||
# CONFIG_POWER_RESET_QNAP is not set
|
||||
# CONFIG_POWER_RESET_RESTART is not set
|
||||
# CONFIG_OMAP2_DSS_DEBUG is not set
|
||||
# CONFIG_DRM_TEGRA_DEBUG is not set
|
||||
# CONFIG_CRYPTO_DEV_UX500_DEBUG is not set
|
||||
|
@ -673,6 +655,4 @@ CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
|
|||
|
||||
# CONFIG_SOC_VF610 is not set
|
||||
# CONFIG_ARM_CCI is not set
|
||||
# CONFIG_GPIO_XILINX is not set
|
||||
# CONFIG_SERIAL_UARTLITE is not set
|
||||
|
||||
# CONFIG_MMC_TMIO is not set
|
||||
|
|
|
@ -14,6 +14,7 @@ CONFIG_AEABI=y
|
|||
CONFIG_VFP=y
|
||||
CONFIG_VFPv3=y
|
||||
CONFIG_NEON=y
|
||||
CONFIG_KERNEL_MODE_NEON=y
|
||||
|
||||
CONFIG_ARM_UNWIND=y
|
||||
CONFIG_ARM_THUMB=y
|
||||
|
@ -56,14 +57,15 @@ CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y
|
|||
# CONFIG_ARCH_SIRF is not set
|
||||
# CONFIG_ARCH_U8500 is not set
|
||||
# CONFIG_ARCH_WM8850 is not set
|
||||
# CONFIG_ARCH_SHMOBILE_MULTI is not set
|
||||
|
||||
# highbank
|
||||
# 2013/04/19 - stability issues
|
||||
# CONFIG_CPU_IDLE_CALXEDA is not set
|
||||
CONFIG_EDAC_HIGHBANK_MC=m
|
||||
CONFIG_EDAC_HIGHBANK_L2=m
|
||||
CONFIG_SATA_HIGHBANK=m
|
||||
CONFIG_ARM_HIGHBANK_CPUFREQ=m
|
||||
CONFIG_ARM_HIGHBANK_CPUIDLE=y
|
||||
|
||||
# errata
|
||||
# v5/v6
|
||||
|
@ -93,6 +95,7 @@ CONFIG_PL310_ERRATA_769419=y
|
|||
CONFIG_PJ4B_ERRATA_4742=y
|
||||
# Cortex-A15
|
||||
# CONFIG_ARM_ERRATA_798181 is not set
|
||||
# CONFIG_ARM_ERRATA_773022 is not set
|
||||
|
||||
# generic that deviates from or should be merged into config-generic
|
||||
CONFIG_SMP_ON_UP=y
|
||||
|
@ -104,11 +107,10 @@ CONFIG_SCHED_SMT=y
|
|||
|
||||
CONFIG_RCU_FANOUT=32
|
||||
|
||||
# 2013/04/19 - disable due to stability issues in 3.9 for the moment
|
||||
# CONFIG_CPU_IDLE is not set
|
||||
## CONFIG_CPU_IDLE_GOV_LADDER is not set
|
||||
# CONFIG_CPU_IDLE_GOV_MENU is not set
|
||||
# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set
|
||||
CONFIG_CPU_IDLE=y
|
||||
# CONFIG_CPU_IDLE_GOV_LADDER is not set
|
||||
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y
|
||||
|
||||
# CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set
|
||||
|
||||
|
@ -136,7 +138,6 @@ CONFIG_LBDAF=y
|
|||
CONFIG_USE_OF=y
|
||||
CONFIG_ARM_ATAG_DTB_COMPAT=y
|
||||
CONFIG_ARM_APPENDED_DTB=y
|
||||
CONFIG_I2C_MUX_PINCTRL=m
|
||||
|
||||
# General vexpress ARM drivers
|
||||
CONFIG_ARM_TIMER_SP804=y
|
||||
|
@ -154,7 +155,7 @@ CONFIG_PL330_DMA=m
|
|||
CONFIG_AMBA_PL08X=y
|
||||
CONFIG_ARM_SP805_WATCHDOG=m
|
||||
CONFIG_GPIO_PL061=y
|
||||
CONFIG_FB_ARMCLCD=m
|
||||
CONFIG_PL320_MBOX=y
|
||||
|
||||
# usb
|
||||
CONFIG_USB_OTG=y
|
||||
|
@ -166,8 +167,68 @@ CONFIG_AX88796_93CX6=y
|
|||
CONFIG_USB_ISP1760_HCD=m
|
||||
# CONFIG_USB_EHCI_HCD_ORION is not set
|
||||
|
||||
# usb gadget
|
||||
CONFIG_USB_GADGET=m
|
||||
CONFIG_USB_GADGET_MUSB_HDRC=m
|
||||
CONFIG_USB_GADGET_VBUS_DRAW=100
|
||||
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
|
||||
CONFIG_USB_MUSB_HDRC=m
|
||||
CONFIG_USB_MUSB_DUAL_ROLE=y
|
||||
CONFIG_USB_MUSB_DSPS=m
|
||||
CONFIG_USB_GPIO_VBUS=m
|
||||
CONFIG_USB_G_ACM_MS=m
|
||||
CONFIG_USB_G_DBGP=m
|
||||
CONFIG_USB_G_DBGP_PRINTK=y
|
||||
CONFIG_USB_G_DBGP_SERIAL=y
|
||||
CONFIG_USB_G_MULTI=m
|
||||
CONFIG_USB_G_MULTI_CDC=y
|
||||
# CONFIG_USB_G_MULTI_RNDIS is not set
|
||||
CONFIG_USB_G_NCM=m
|
||||
CONFIG_USB_G_SERIAL=m
|
||||
CONFIG_USB_ETH_EEM=y
|
||||
# CONFIG_USB_ETH_RNDIS is not set
|
||||
CONFIG_USB_CDC_COMPOSITE=m
|
||||
CONFIG_USB_GADGET_TARGET=m
|
||||
CONFIG_USB_MASS_STORAGE=m
|
||||
CONFIG_USB_CONFIGFS=m
|
||||
CONFIG_USB_CONFIGFS_ACM=y
|
||||
CONFIG_USB_CONFIGFS_ECM=y
|
||||
CONFIG_USB_CONFIGFS_ECM_SUBSET=y
|
||||
CONFIG_USB_CONFIGFS_EEM=y
|
||||
CONFIG_USB_CONFIGFS_MASS_STORAGE=y
|
||||
CONFIG_USB_CONFIGFS_NCM=y
|
||||
CONFIG_USB_CONFIGFS_OBEX=y
|
||||
# CONFIG_USB_CONFIGFS_RNDIS is not set
|
||||
CONFIG_USB_CONFIGFS_SERIAL=y
|
||||
CONFIG_USB_CONFIGFS_STORAGE=y
|
||||
|
||||
# CONFIG_MUSB_PIO_ONLY is not set
|
||||
# CONFIG_USB_MUSB_DEBUG is not set
|
||||
# CONFIG_USB_GADGET_DEBUG is not set
|
||||
# CONFIG_USB_GADGET_DEBUG_FILES is not set
|
||||
# CONFIG_USB_GADGET_DEBUG_FS is not set
|
||||
# CONFIG_USB_FUSB300 is not set
|
||||
# CONFIG_USB_RENESAS_USBHS is not set
|
||||
# CONFIG_USB_FOTG210_UDC is not set
|
||||
# CONFIG_USB_R8A66597 is not set
|
||||
# CONFIG_USB_PXA27X is not set
|
||||
# CONFIG_USB_MV_UDC is not set
|
||||
# CONFIG_USB_MV_U3D is not set
|
||||
# CONFIG_USB_M66592 is not set
|
||||
# CONFIG_USB_AMD5536UDC is not set
|
||||
# CONFIG_USB_NET2272 is not set
|
||||
# CONFIG_USB_NET2280 is not set
|
||||
# CONFIG_USB_GOKU is not set
|
||||
# CONFIG_USB_EG20T is not set
|
||||
# CONFIG_USB_DUMMY_HCD is not set
|
||||
# CONFIG_USB_ZERO_HNPTEST is not set
|
||||
|
||||
# Multifunction Devices
|
||||
CONFIG_MFD_SYSCON=y
|
||||
CONFIG_MFD_TPS65090=y
|
||||
CONFIG_MFD_TPS65217=y
|
||||
CONFIG_MFD_TPS65910=y
|
||||
CONFIG_MFD_TPS65912=y
|
||||
CONFIG_MFD_TPS65912_I2C=y
|
||||
CONFIG_MFD_TPS65912_SPI=y
|
||||
# CONFIG_MFD_DA9052_SPI is not set
|
||||
# CONFIG_MFD_ARIZONA_SPI is not set
|
||||
|
@ -179,16 +240,15 @@ CONFIG_PINMUX=y
|
|||
CONFIG_PINCONF=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_PINCTRL_SINGLE=y
|
||||
CONFIG_GENERIC_PINCONF=y
|
||||
# CONFIG_PINCTRL_SAMSUNG is not set
|
||||
# CONFIG_PINCTRL_EXYNOS4 is not set
|
||||
|
||||
# GPIO
|
||||
CONFIG_GPIO_GENERIC_PLATFORM=m
|
||||
CONFIG_EXTCON_GPIO=m
|
||||
# CONFIG_GPIO_EM is not set
|
||||
CONFIG_GPIO_ADNP=m
|
||||
CONFIG_GPIO_MCP23S08=m
|
||||
CONFIG_POWER_RESET_GPIO=y
|
||||
CONFIG_SERIAL_8250_EM=m
|
||||
CONFIG_INPUT_GPIO_TILT_POLLED=m
|
||||
CONFIG_MDIO_BUS_MUX_GPIO=m
|
||||
|
@ -197,11 +257,13 @@ CONFIG_LEDS_GPIO=m
|
|||
CONFIG_GPIO_MAX7301=m
|
||||
CONFIG_GPIO_MC33880=m
|
||||
CONFIG_GPIO_74X164=m
|
||||
CONFIG_GPIO_TPS65910=y
|
||||
CONFIG_GPIO_TPS65912=m
|
||||
# CONFIG_GPIO_RCAR is not set
|
||||
CONFIG_W1_MASTER_GPIO=m
|
||||
CONFIG_CHARGER_GPIO=m
|
||||
|
||||
# SPI
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_MASTER=y
|
||||
CONFIG_SPI_GPIO=m
|
||||
|
@ -222,6 +284,10 @@ CONFIG_SPI_TLE62X0=m
|
|||
|
||||
CONFIG_NFC_NCI_SPI=y
|
||||
|
||||
# i2c
|
||||
CONFIG_I2C_DESIGNWARE_CORE=m
|
||||
CONFIG_I2C_DESIGNWARE_PLATFORM=m
|
||||
|
||||
# HW crypto and rng
|
||||
CONFIG_CRYPTO_SHA1_ARM=m
|
||||
CONFIG_CRYPTO_AES_ARM=m
|
||||
|
@ -236,9 +302,11 @@ CONFIG_MPCORE_WATCHDOG=m
|
|||
|
||||
# Thermal / powersaving
|
||||
CONFIG_THERMAL=y
|
||||
CONFIG_POWER_RESET_RESTART=y
|
||||
CONFIG_ARM_PSCI=y
|
||||
|
||||
# Mailbox
|
||||
CONFIG_MAILBOX=y
|
||||
|
||||
# MTD
|
||||
# CONFIG_MG_DISK is not set
|
||||
CONFIG_MTD_DATAFLASH=m
|
||||
|
@ -258,76 +326,104 @@ CONFIG_MMC_DW_PLTFM=m
|
|||
CONFIG_MMC_DW_PCI=m
|
||||
CONFIG_SPI_DW_MMIO=m
|
||||
CONFIG_SPI_DW_PCI=m
|
||||
CONFIG_MMC_DW_SOCFPGA=m
|
||||
# CONFIG_MMC_DW_SOCFPGA is not set
|
||||
# CONFIG_MMC_DW_EXYNOS is not set
|
||||
# CONFIG_MMC_DW_IDMAC is not set
|
||||
CONFIG_USB_DWC2=m
|
||||
# CONFIG_USB_DWC2_DEBUG is not set
|
||||
# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set
|
||||
CONFIG_USB_DWC3=m
|
||||
CONFIG_USB_DWC3_OMAP=m
|
||||
CONFIG_USB_DWC3_EXYNOS=m
|
||||
CONFIG_USB_DWC3_PCI=m
|
||||
# CONFIG_USB_DWC3_DEBUG is not set
|
||||
CONFIG_DW_WATCHDOG=m
|
||||
|
||||
# Sound
|
||||
CONFIG_SND_ARM=y
|
||||
CONFIG_SND_ARMAACI=m
|
||||
CONFIG_SND_SOC=m
|
||||
CONFIG_SND_SPI=y
|
||||
CONFIG_SND_ARM=y
|
||||
CONFIG_SND_ARMAACI=m
|
||||
CONFIG_SND_COMPRESS_OFFLOAD=m
|
||||
CONFIG_SND_DESIGNWARE_I2S=m
|
||||
CONFIG_SND_DMAENGINE_PCM=m
|
||||
CONFIG_SND_JACK=y
|
||||
CONFIG_SND_SIMPLE_CARD=m
|
||||
CONFIG_SND_SOC_CACHE_LZO=y
|
||||
CONFIG_SND_SOC_ALL_CODECS=m
|
||||
CONFIG_SND_SOC_DMAENGINE_PCM=y
|
||||
CONFIG_SND_SOC_CACHE_LZO=y
|
||||
CONFIG_SND_SOC_DMIC=m
|
||||
CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
|
||||
# CONFIG_SND_ATMEL_SOC is not set
|
||||
|
||||
# Displays
|
||||
CONFIG_BACKLIGHT_TPS65217=m
|
||||
|
||||
# RTC
|
||||
CONFIG_RTC_DRV_M41T93=m
|
||||
CONFIG_RTC_DRV_M41T94=m
|
||||
CONFIG_RTC_DRV_DS1305=m
|
||||
CONFIG_RTC_DRV_DS1390=m
|
||||
CONFIG_RTC_DRV_DS3234=m
|
||||
CONFIG_RTC_DRV_M41T93=m
|
||||
CONFIG_RTC_DRV_M41T94=m
|
||||
CONFIG_RTC_DRV_MAX6902=m
|
||||
CONFIG_RTC_DRV_PCF2123=m
|
||||
CONFIG_RTC_DRV_R9701=m
|
||||
CONFIG_RTC_DRV_RS5C348=m
|
||||
CONFIG_RTC_DRV_DS3234=m
|
||||
CONFIG_RTC_DRV_PCF2123=m
|
||||
CONFIG_RTC_DRV_RX4581=m
|
||||
CONFIG_RTC_DRV_TPS65910=m
|
||||
CONFIG_RTC_DRV_TPS80031=m
|
||||
|
||||
# Regulators
|
||||
CONFIG_REGULATOR=y
|
||||
CONFIG_RFKILL_REGULATOR=m
|
||||
CONFIG_CHARGER_MANAGER=y
|
||||
# CONFIG_REGULATOR_DUMMY is not set
|
||||
CONFIG_REGULATOR_FIXED_VOLTAGE=m
|
||||
CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
|
||||
CONFIG_REGULATOR_USERSPACE_CONSUMER=m
|
||||
CONFIG_REGULATOR_GPIO=m
|
||||
CONFIG_REGULATOR_AD5398=m
|
||||
CONFIG_REGULATOR_DA9210=m
|
||||
CONFIG_REGULATOR_FAN53555=m
|
||||
CONFIG_REGULATOR_ANATOP=m
|
||||
CONFIG_REGULATOR_ISL6271A=m
|
||||
CONFIG_REGULATOR_LP3971=m
|
||||
CONFIG_REGULATOR_LP3972=m
|
||||
CONFIG_REGULATOR_LP872X=m
|
||||
CONFIG_REGULATOR_LP8755=m
|
||||
CONFIG_REGULATOR_MAX1586=m
|
||||
CONFIG_REGULATOR_MAX8649=m
|
||||
CONFIG_REGULATOR_MAX8660=m
|
||||
CONFIG_REGULATOR_MAX8952=m
|
||||
CONFIG_REGULATOR_MAX8973=m
|
||||
CONFIG_REGULATOR_LP3971=m
|
||||
CONFIG_REGULATOR_LP3972=m
|
||||
CONFIG_REGULATOR_LP8755=m
|
||||
CONFIG_REGULATOR_PFUZE100=m
|
||||
CONFIG_REGULATOR_TPS51632=m
|
||||
CONFIG_REGULATOR_TPS62360=m
|
||||
CONFIG_REGULATOR_TPS65023=m
|
||||
CONFIG_REGULATOR_TPS6507X=m
|
||||
CONFIG_REGULATOR_TPS65090=m
|
||||
CONFIG_REGULATOR_TPS65217=m
|
||||
CONFIG_REGULATOR_TPS6524X=m
|
||||
CONFIG_REGULATOR_TPS6586X=m
|
||||
CONFIG_REGULATOR_TPS65910=m
|
||||
CONFIG_REGULATOR_TPS65912=m
|
||||
CONFIG_REGULATOR_TPS80031=m
|
||||
|
||||
CONFIG_CHARGER_MANAGER=y
|
||||
CONFIG_CHARGER_TPS65090=m
|
||||
CONFIG_PDA_POWER=m
|
||||
CONFIG_GENERIC_ADC_BATTERY=m
|
||||
|
||||
# Sensors
|
||||
CONFIG_TMP006=m
|
||||
CONFIG_BMP085=y
|
||||
CONFIG_BMP085_I2C=m
|
||||
CONFIG_BMP085_SPI=m
|
||||
CONFIG_SENSORS_AD7314=m
|
||||
CONFIG_SENSORS_ADCXX=m
|
||||
CONFIG_SENSORS_ADS7871=m
|
||||
CONFIG_SENSORS_GPIO_FAN=m
|
||||
CONFIG_SENSORS_HTU21=m
|
||||
CONFIG_SENSORS_LIS3_SPI=m
|
||||
CONFIG_SENSORS_LM70=m
|
||||
CONFIG_SENSORS_MAX1111=m
|
||||
CONFIG_SENSORS_ADS7871=m
|
||||
CONFIG_SENSORS_LIS3_SPI=m
|
||||
CONFIG_SENSORS_GPIO_FAN=m
|
||||
|
||||
CONFIG_LCD_L4F00242T03=m
|
||||
CONFIG_LCD_LMS283GF05=m
|
||||
|
@ -356,9 +452,10 @@ CONFIG_LEDS_DAC124S085=m
|
|||
CONFIG_LEDS_PWM=m
|
||||
CONFIG_BMP085_SPI=m
|
||||
|
||||
# Display
|
||||
|
||||
# Contiguous Memory Allocator
|
||||
CONFIG_OF_RESERVED_MEM=y
|
||||
CONFIG_CMA=y
|
||||
CONFIG_DMA_CMA=y
|
||||
# CONFIG_CMA_DEBUG is not set
|
||||
CONFIG_CMA_SIZE_MBYTES=16
|
||||
CONFIG_CMA_SIZE_SEL_MBYTES=y
|
||||
|
@ -367,6 +464,7 @@ CONFIG_CMA_SIZE_SEL_MBYTES=y
|
|||
# CONFIG_CMA_SIZE_SEL_MAX is not set
|
||||
CONFIG_CMA_ALIGNMENT=8
|
||||
CONFIG_CMA_AREAS=7
|
||||
CONFIG_SRAM=y
|
||||
|
||||
# Ethernet
|
||||
CONFIG_KS8851=m
|
||||
|
@ -401,6 +499,9 @@ CONFIG_UBIFS_FS_LZO=y
|
|||
CONFIG_UBIFS_FS_ZLIB=y
|
||||
# CONFIG_UBIFS_FS_DEBUG is not set
|
||||
|
||||
# Sensors
|
||||
CONFIG_SENSORS_HTU21=m
|
||||
|
||||
# Should be in generic
|
||||
CONFIG_BPF_JIT=y
|
||||
# CONFIG_NET_VENDOR_CIRRUS is not set
|
||||
|
@ -434,6 +535,7 @@ CONFIG_BPF_JIT=y
|
|||
# CONFIG_COMMON_CLK_AXI_CLKGEN is not set
|
||||
# CONFIG_SPI_TOPCLIFF_PCH is not set
|
||||
# CONFIG_SPI_PXA2XX is not set
|
||||
# CONFIG_SPI_FSL_DSPI is not set
|
||||
|
||||
# these modules all fail with missing __bad_udelay
|
||||
# http://www.spinics.net/lists/arm/msg15615.html provides some background
|
||||
|
|
|
@ -25,7 +25,6 @@ CONFIG_ARCH_EXYNOS5=y
|
|||
CONFIG_ARM_LPAE=y
|
||||
CONFIG_SYS_SUPPORTS_HUGETLBFS=y
|
||||
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_VIRTIO_CONSOLE=m
|
||||
CONFIG_ARM_VIRT_EXT=y
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_ARM_SMMU=y
|
||||
|
@ -33,6 +32,7 @@ CONFIG_ARM_DMA_IOMMU_ALIGNMENT=8
|
|||
|
||||
# Cortex-A15
|
||||
CONFIG_ARM_ERRATA_798181=y
|
||||
CONFIG_ARM_ERRATA_773022=y
|
||||
|
||||
CONFIG_KVM=y
|
||||
CONFIG_KVM_ARM_HOST=y
|
||||
|
@ -66,7 +66,9 @@ CONFIG_SERIAL_SAMSUNG_CONSOLE=y
|
|||
CONFIG_SOC_EXYNOS5250=y
|
||||
CONFIG_SOC_EXYNOS5420=y
|
||||
CONFIG_SOC_EXYNOS5440=y
|
||||
CONFIG_ARM_EXYNOS_CPUFREQ=y
|
||||
# CONFIG_ARM_EXYNOS5250_CPUFREQ is not set
|
||||
# CONFIG_ARM_EXYNOS5440_CPUFREQ is not set
|
||||
# CONFIG_ARM_EXYNOS_CPUFREQ is not set
|
||||
# CONFIG_GENERIC_CPUFREQ_CPU0 is not set
|
||||
CONFIG_EXYNOS_THERMAL=m
|
||||
CONFIG_PCI_EXYNOS=y
|
||||
|
@ -135,3 +137,6 @@ CONFIG_S3C_LOWLEVEL_UART_PORT=1
|
|||
# CONFIG_S3C2410_WATCHDOG is not set
|
||||
# CONFIG_MMC_SDHCI_S3C is not set
|
||||
# CONFIG_TEGRA_HOST1X is not set
|
||||
# CONFIG_SPI_DAVINCI is not set
|
||||
# CONFIG_I2C_DAVINCI is not set
|
||||
# CONFIG_TI_SOC_THERMAL is not set
|
||||
|
|
238
config-generic
238
config-generic
|
@ -61,6 +61,8 @@ CONFIG_PID_NS=y
|
|||
CONFIG_UTS_NS=y
|
||||
CONFIG_IPC_NS=y
|
||||
CONFIG_NET_NS=y
|
||||
# CONFIG_USER_NS is not set
|
||||
# CONFIG_UIDGID_STRICT_TYPE_CHECKS is not set
|
||||
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
# CONFIG_PREEMPT_NONE is not set
|
||||
|
@ -104,7 +106,6 @@ CONFIG_HOTPLUG_PCI_PCIE=y
|
|||
CONFIG_HOTPLUG_PCI_FAKE=m
|
||||
|
||||
# CONFIG_SGI_IOC4 is not set
|
||||
#
|
||||
|
||||
# CONFIG_ISA is not set
|
||||
# CONFIG_SCx200 is not set
|
||||
|
@ -144,6 +145,9 @@ CONFIG_MMC_RICOH_MMC=y
|
|||
CONFIG_MMC_USHC=m
|
||||
CONFIG_MMC_REALTEK_PCI=m
|
||||
CONFIG_MMC_VUB300=m
|
||||
# CONFIG_MMC_SDHCI_PXAV2 is not set
|
||||
# CONFIG_MMC_SDHCI_PXAV3 is not set
|
||||
|
||||
|
||||
CONFIG_CB710_CORE=m
|
||||
# CONFIG_CB710_DEBUG is not set
|
||||
|
@ -159,6 +163,7 @@ CONFIG_INFINIBAND_SRP=m
|
|||
CONFIG_INFINIBAND_SRPT=m
|
||||
CONFIG_INFINIBAND_USER_MAD=m
|
||||
CONFIG_INFINIBAND_USER_ACCESS=m
|
||||
# CONFIG_INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING is not set #staging
|
||||
CONFIG_INFINIBAND_IPATH=m
|
||||
CONFIG_INFINIBAND_ISER=m
|
||||
CONFIG_INFINIBAND_ISERT=m
|
||||
|
@ -190,6 +195,9 @@ CONFIG_BINFMT_MISC=m
|
|||
# Device Drivers
|
||||
#
|
||||
|
||||
# CONFIG_COMMON_CLK_DEBUG is not set
|
||||
# CONFIG_COMMON_CLK_SI5351 is not set
|
||||
|
||||
#
|
||||
# Generic Driver Options
|
||||
#
|
||||
|
@ -201,6 +209,7 @@ CONFIG_EXTRA_FIRMWARE=""
|
|||
# CONFIG_FW_LOADER_USER_HELPER is not set
|
||||
|
||||
# CONFIG_CMA is not set
|
||||
# CONFIG_DMA_CMA is not set
|
||||
|
||||
# CONFIG_SPI is not set
|
||||
|
||||
|
@ -310,9 +319,10 @@ CONFIG_BLK_DEV_DAC960=m
|
|||
# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
|
||||
CONFIG_BLK_DEV_DRBD=m
|
||||
CONFIG_BLK_DEV_UMEM=m
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
|
||||
CONFIG_BLK_DEV_LOOP=m
|
||||
CONFIG_BLK_DEV_LOOP_MIN_COUNT=0
|
||||
# Fedora 18 util-linux is the last release that supports cryptoloop devices
|
||||
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
|
||||
CONFIG_BLK_DEV_NBD=m
|
||||
CONFIG_BLK_DEV_NVME=m
|
||||
CONFIG_BLK_DEV_OSD=m
|
||||
|
@ -326,6 +336,7 @@ CONFIG_BLK_DEV_BSG=y
|
|||
CONFIG_BLK_DEV_BSGLIB=y
|
||||
CONFIG_BLK_DEV_INTEGRITY=y
|
||||
CONFIG_BLK_DEV_THROTTLING=y
|
||||
# CONFIG_BLK_CMDLINE_PARSER is not set
|
||||
|
||||
|
||||
#
|
||||
|
@ -338,13 +349,13 @@ CONFIG_BLK_DEV_THROTTLING=y
|
|||
|
||||
CONFIG_SCSI_VIRTIO=m
|
||||
CONFIG_VIRTIO_BLK=m
|
||||
CONFIG_VIRTIO_PCI=y
|
||||
CONFIG_VIRTIO_PCI=m
|
||||
CONFIG_VIRTIO_BALLOON=m
|
||||
CONFIG_VIRTIO_MMIO=m
|
||||
# CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set
|
||||
CONFIG_VIRTIO_NET=m
|
||||
CONFIG_HW_RANDOM_VIRTIO=m
|
||||
CONFIG_VIRTIO_CONSOLE=y
|
||||
CONFIG_VIRTIO_CONSOLE=m
|
||||
CONFIG_VHOST_NET=m
|
||||
CONFIG_TCM_VHOST=m
|
||||
CONFIG_VHOST_SCSI=m
|
||||
|
@ -433,6 +444,7 @@ CONFIG_MEGARAID_MM=m
|
|||
CONFIG_MEGARAID_MAILBOX=m
|
||||
CONFIG_MEGARAID_LEGACY=m
|
||||
CONFIG_MEGARAID_SAS=m
|
||||
CONFIG_SCSI_ESAS2R=m
|
||||
CONFIG_SCSI_MVSAS=m
|
||||
# CONFIG_SCSI_MVSAS_DEBUG is not set
|
||||
CONFIG_SCSI_MVSAS_TASKLET=y
|
||||
|
@ -598,14 +610,14 @@ CONFIG_MD_RAID0=m
|
|||
CONFIG_MD_RAID1=m
|
||||
CONFIG_MD_RAID10=m
|
||||
CONFIG_MD_RAID456=m
|
||||
# CONFIG_MULTICORE_RAID456 is not set
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
|
||||
CONFIG_BCACHE=m
|
||||
# CONFIG_BCACHE_DEBUG is not set
|
||||
# CONFIG_BCACHE_EDEBUG is not set
|
||||
# CONFIG_BCACHE_CLOSURES_DEBUG is not set
|
||||
|
||||
# CONFIG_MULTICORE_RAID456 is not set
|
||||
CONFIG_ASYNC_RAID6_TEST=m
|
||||
CONFIG_BLK_DEV_DM=y
|
||||
CONFIG_DM_CRYPT=m
|
||||
CONFIG_DM_DEBUG=y
|
||||
|
@ -930,6 +942,7 @@ CONFIG_IP_NF_TARGET_ECN=m
|
|||
CONFIG_IP_NF_TARGET_LOG=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=y
|
||||
CONFIG_IP_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP_NF_TARGET_TTL=m
|
||||
CONFIG_NF_NAT_IPV4=m
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
|
@ -963,6 +976,7 @@ CONFIG_IP6_NF_RAW=m
|
|||
CONFIG_IP6_NF_SECURITY=m
|
||||
CONFIG_IP6_NF_TARGET_LOG=m
|
||||
CONFIG_IP6_NF_TARGET_REJECT=m
|
||||
CONFIG_IP6_NF_TARGET_SYNPROXY=m
|
||||
CONFIG_IP6_NF_TARGET_HL=m
|
||||
CONFIG_NF_NAT_IPV6=m
|
||||
CONFIG_IP6_NF_TARGET_MASQUERADE=m
|
||||
|
@ -1092,6 +1106,7 @@ CONFIG_NET_SCH_CHOKE=m
|
|||
CONFIG_NET_SCH_QFQ=m
|
||||
CONFIG_NET_SCH_CODEL=m
|
||||
CONFIG_NET_SCH_FQ_CODEL=m
|
||||
CONFIG_NET_SCH_FQ=m
|
||||
CONFIG_NET_SCH_PLUG=m
|
||||
CONFIG_NET_CLS=y
|
||||
CONFIG_NET_CLS_ACT=y
|
||||
|
@ -1134,9 +1149,11 @@ CONFIG_BATMAN_ADV=m
|
|||
CONFIG_BATMAN_ADV_BLA=y
|
||||
CONFIG_BATMAN_ADV_DAT=y
|
||||
CONFIG_BATMAN_ADV_NC=y
|
||||
|
||||
# CONFIG_BATMAN_ADV_DEBUG is not set
|
||||
CONFIG_OPENVSWITCH=m
|
||||
CONFIG_OPENVSWITCH_GRE=y
|
||||
CONFIG_OPENVSWITCH_VXLAN=y
|
||||
CONFIG_VSOCKETS=m
|
||||
CONFIG_NETPRIO_CGROUP=m
|
||||
|
||||
|
@ -1225,6 +1242,7 @@ CONFIG_L2TP_ETH=m
|
|||
# CONFIG_CAIF is not set
|
||||
|
||||
CONFIG_RFKILL=m
|
||||
CONFIG_RFKILL_GPIO=m
|
||||
CONFIG_RFKILL_INPUT=y
|
||||
|
||||
CONFIG_ETHERNET=y
|
||||
|
@ -1324,7 +1342,7 @@ CONFIG_IXGBE_DCA=y
|
|||
CONFIG_IXGBE_DCB=y
|
||||
CONFIG_IXGBE_HWMON=y
|
||||
CONFIG_IXGBE_PTP=y
|
||||
|
||||
CONFIG_I40E=m
|
||||
|
||||
# CONFIG_NET_VENDOR_I825XX is not set
|
||||
CONFIG_NET_VENDOR_MARVELL=y
|
||||
|
@ -1369,6 +1387,7 @@ CONFIG_NET_VENDOR_QLOGIC=y
|
|||
CONFIG_QLA3XXX=m
|
||||
CONFIG_QLCNIC=m
|
||||
CONFIG_QLCNIC_SRIOV=y
|
||||
CONFIG_QLCNIC_DCB=y
|
||||
CONFIG_QLGE=m
|
||||
CONFIG_NETXEN_NIC=m
|
||||
|
||||
|
@ -1546,12 +1565,7 @@ CONFIG_MAC80211_LEDS=y
|
|||
CONFIG_MAC80211_DEBUGFS=y
|
||||
# CONFIG_MAC80211_DEBUG_MENU is not set
|
||||
|
||||
CONFIG_WIMAX=m
|
||||
CONFIG_WIMAX_DEBUG_LEVEL=8
|
||||
CONFIG_WIMAX_I2400M_USB=m
|
||||
CONFIG_WIMAX_I2400M_SDIO=m
|
||||
CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
|
||||
# CONFIG_WIMAX_IWMC3200_SDIO is not set
|
||||
# CONFIG_WIMAX is not set
|
||||
|
||||
# CONFIG_ADM8211 is not set
|
||||
CONFIG_ATH_COMMON=m
|
||||
|
@ -1677,6 +1691,7 @@ CONFIG_RT2500USB=m
|
|||
CONFIG_RT2800USB=m
|
||||
CONFIG_RT2800USB_RT33XX=y
|
||||
CONFIG_RT2800USB_RT35XX=y
|
||||
CONFIG_RT2800USB_RT3573=y
|
||||
CONFIG_RT2800USB_RT53XX=y
|
||||
CONFIG_RT2800USB_RT55XX=y
|
||||
CONFIG_RT2800USB_UNKNOWN=y
|
||||
|
@ -1697,12 +1712,9 @@ CONFIG_USB_NET_SMSC75XX=m
|
|||
CONFIG_ZD1211RW=m
|
||||
# CONFIG_ZD1211RW_DEBUG is not set
|
||||
|
||||
CONFIG_WL12XX_MENU=m
|
||||
CONFIG_WL12XX=m
|
||||
# CONFIG_WL12XX_HT is not set
|
||||
CONFIG_WL12XX_SPI=m
|
||||
CONFIG_WL12XX_SDIO=m
|
||||
# CONFIG_WL12XX_SDIO_TEST is not set
|
||||
|
||||
CONFIG_WL1251=m
|
||||
CONFIG_WL1251_SPI=m
|
||||
|
@ -2015,6 +2027,7 @@ CONFIG_INPUT_SPARSEKMAP=m
|
|||
# CONFIG_INPUT_IMS_PCU is not set
|
||||
CONFIG_INPUT_CMA3000=m
|
||||
CONFIG_INPUT_CMA3000_I2C=m
|
||||
CONFIG_INPUT_IDEAPAD_SLIDEBAR=m
|
||||
|
||||
#
|
||||
# Input I/O drivers
|
||||
|
@ -2198,6 +2211,7 @@ CONFIG_TCG_NSC=m
|
|||
CONFIG_TCG_ATMEL=m
|
||||
# CONFIG_TCG_INFINEON is not set
|
||||
# CONFIG_TCG_ST33_I2C is not set
|
||||
# CONFIG_TCG_XEN is not set
|
||||
CONFIG_TELCLOCK=m
|
||||
|
||||
#
|
||||
|
@ -2236,6 +2250,13 @@ CONFIG_SERIAL_CORE=y
|
|||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_XILINX_PS_UART is not set
|
||||
# CONFIG_SERIAL_TIMBERDALE is not set
|
||||
CONFIG_SERIAL_ARC=m
|
||||
CONFIG_SERIAL_ARC_NR_PORTS=1
|
||||
# CONFIG_SERIAL_RP2 is not set
|
||||
# CONFIG_SERIAL_FSL_LPUART is not set
|
||||
# CONFIG_SERIAL_ST_ASC is not set
|
||||
# CONFIG_SERIAL_PCH_UART is not set
|
||||
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
|
@ -2345,10 +2366,12 @@ CONFIG_SENSORS_GL518SM=m
|
|||
CONFIG_SENSORS_GL520SM=m
|
||||
CONFIG_SENSORS_HDAPS=m
|
||||
# CONFIG_SENSORS_HIH6130 is not set
|
||||
# CONFIG_SENSORS_HTU21 is not set
|
||||
# CONFIG_SENSORS_I5K_AMB is not set
|
||||
# FIXME: IBMAEM x86 only?
|
||||
CONFIG_SENSORS_IBMAEM=m
|
||||
CONFIG_SENSORS_IBMPEX=m
|
||||
# CONFIG_SENSORS_IIO_HWMON is not set
|
||||
CONFIG_SENSORS_IT87=m
|
||||
CONFIG_SENSORS_K8TEMP=m
|
||||
CONFIG_SENSORS_K10TEMP=m
|
||||
|
@ -2450,17 +2473,125 @@ CONFIG_SENSORS_MAX8688=m
|
|||
CONFIG_SENSORS_MAX1668=m
|
||||
CONFIG_SENSORS_MAX197=m
|
||||
|
||||
# Industrial I/O subsystem configuration
|
||||
CONFIG_IIO=m
|
||||
CONFIG_IIO_BUFFER=y
|
||||
CONFIG_IIO_BUFFER_CB=y
|
||||
# CONFIG_IIO_KFIFO_BUF is not set
|
||||
CONFIG_IIO_TRIGGERED_BUFFER=m
|
||||
CONFIG_IIO_TRIGGER=y
|
||||
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
|
||||
CONFIG_IIO_INTERRUPT_TRIGGER=m
|
||||
CONFIG_HID_SENSOR_IIO_COMMON=m
|
||||
CONFIG_HID_SENSOR_IIO_TRIGGER=m
|
||||
CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS=y
|
||||
# CONFIG_IIO_SYSFS_TRIGGER is not set
|
||||
# CONFIG_AD5446 is not set
|
||||
# CONFIG_AD5380 is not set
|
||||
# CONFIG_AD5064 is not set
|
||||
# CONFIG_BMA180 is not set
|
||||
# CONFIG_MAX1363 is not set
|
||||
# CONFIG_MAX517 is not set
|
||||
# CONFIG_MCP4725 is not set
|
||||
# CONFIG_ITG3200 is not set
|
||||
# CONFIG_APDS9300 is not set
|
||||
# CONFIG_TSL2583 is not set
|
||||
# CONFIG_TSL2x7x is not set
|
||||
# CONFIG_NAU7802 is not set
|
||||
# CONFIG_TI_ADC081C is not set
|
||||
# CONFIG_EXYNOS_ADC is not set
|
||||
# CONFIG_VIPERBOARD_ADC is not set
|
||||
# CONFIG_INV_MPU6050_IIO is not set
|
||||
CONFIG_IIO_ST_GYRO_3AXIS=m
|
||||
CONFIG_IIO_ST_MAGN_3AXIS=m
|
||||
CONFIG_IIO_ST_ACCEL_3AXIS=m
|
||||
# CONFIG_ADJD_S311 is not set
|
||||
# CONFIG_SENSORS_TSL2563 is not set
|
||||
# CONFIG_VCNL4000 is not set
|
||||
# CONFIG_AK8975 is not set
|
||||
# CONFIG_TMP006 is not set
|
||||
# CONFIG_IIO_ST_PRESS is not set
|
||||
# CONFIG_KXSD9 is not set
|
||||
# CONFIG_AD7266 is not set
|
||||
# CONFIG_AD7298 is not set
|
||||
# CONFIG_AD7476 is not set
|
||||
# CONFIG_AD7791 is not set
|
||||
# CONFIG_AD7793 is not set
|
||||
# CONFIG_AD7887 is not set
|
||||
# CONFIG_AD7923 is not set
|
||||
# CONFIG_MCP320X is not set
|
||||
# CONFIG_AD8366 is not set
|
||||
# CONFIG_AD5360 is not set
|
||||
# CONFIG_AD5421 is not set
|
||||
# CONFIG_AD5449 is not set
|
||||
# CONFIG_AD5504 is not set
|
||||
# CONFIG_AD5624R_SPI is not set
|
||||
# CONFIG_AD5686 is not set
|
||||
# CONFIG_AD5755 is not set
|
||||
# CONFIG_AD5764 is not set
|
||||
# CONFIG_AD5791 is not set
|
||||
# CONFIG_AD7303 is not set
|
||||
# CONFIG_AD9523 is not set
|
||||
# CONFIG_ADF4350 is not set
|
||||
# CONFIG_ADIS16080 is not set
|
||||
# CONFIG_ADIS16130 is not set
|
||||
# CONFIG_ADIS16136 is not set
|
||||
# CONFIG_ADIS16260 is not set
|
||||
# CONFIG_ADXRS450 is not set
|
||||
# CONFIG_ADIS16400 is not set
|
||||
# CONFIG_ADIS16480 is not set
|
||||
|
||||
# staging IIO drivers
|
||||
# CONFIG_AD7291 is not set
|
||||
# CONFIG_AD7606 is not set
|
||||
# CONFIG_AD799X is not set
|
||||
# CONFIG_ADT7316 is not set
|
||||
# CONFIG_AD7150 is not set
|
||||
# CONFIG_AD7152 is not set
|
||||
# CONFIG_AD7746 is not set
|
||||
# CONFIG_AD5933 is not set
|
||||
# CONFIG_ADE7854 is not set
|
||||
# CONFIG_SENSORS_ISL29018 is not set
|
||||
# CONFIG_SENSORS_ISL29028 is not set
|
||||
# CONFIG_SENSORS_HMC5843 is not set
|
||||
# CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set
|
||||
# CONFIG_IIO_SIMPLE_DUMMY is not set
|
||||
# CONFIG_ADIS16201 is not set
|
||||
# CONFIG_ADIS16203 is not set
|
||||
# CONFIG_ADIS16204 is not set
|
||||
# CONFIG_ADIS16209 is not set
|
||||
# CONFIG_ADIS16220 is not set
|
||||
# CONFIG_ADIS16240 is not set
|
||||
# CONFIG_LIS3L02DQ is not set
|
||||
# CONFIG_SCA3000 is not set
|
||||
# CONFIG_AD7780 is not set
|
||||
# CONFIG_AD7816 is not set
|
||||
# CONFIG_AD7192 is not set
|
||||
# CONFIG_AD7280 is not set
|
||||
# CONFIG_AD5930 is not set
|
||||
# CONFIG_AD9832 is not set
|
||||
# CONFIG_AD9834 is not set
|
||||
# CONFIG_AD9850 is not set
|
||||
# CONFIG_AD9852 is not set
|
||||
# CONFIG_AD9910 is not set
|
||||
# CONFIG_AD9951 is not set
|
||||
# CONFIG_ADIS16060 is not set
|
||||
# CONFIG_ADE7753 is not set
|
||||
# CONFIG_ADE7754 is not set
|
||||
# CONFIG_ADE7758 is not set
|
||||
# CONFIG_ADE7759 is not set
|
||||
# CONFIG_AD2S90 is not set
|
||||
# CONFIG_AD2S1200 is not set
|
||||
# CONFIG_AD2S1210 is not set
|
||||
|
||||
|
||||
|
||||
# CONFIG_HMC6352 is not set
|
||||
# CONFIG_BMP085 is not set
|
||||
# CONFIG_BMP085_I2C is not set
|
||||
# CONFIG_PCH_PHUB is not set
|
||||
# CONFIG_SERIAL_PCH_UART is not set
|
||||
# CONFIG_USB_SWITCH_FSA9480 is not set
|
||||
# CONFIG_SRAM is not set
|
||||
CONFIG_SERIAL_ARC=m
|
||||
CONFIG_SERIAL_ARC_NR_PORTS=1
|
||||
# CONFIG_SERIAL_RP2 is not set
|
||||
# CONFIG_SERIAL_FSL_LPUART is not set
|
||||
|
||||
CONFIG_W1=m
|
||||
CONFIG_W1_CON=y
|
||||
|
@ -2544,6 +2675,8 @@ CONFIG_W83697UG_WDT=m
|
|||
CONFIG_HW_RANDOM=y
|
||||
CONFIG_HW_RANDOM_TIMERIOMEM=m
|
||||
CONFIG_HW_RANDOM_TPM=m
|
||||
# CONFIG_HW_RANDOM_ATMEL is not set
|
||||
# CONFIG_HW_RANDOM_EXYNOS is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_RTC is not set
|
||||
# CONFIG_RTC_DEBUG is not set
|
||||
|
@ -2600,6 +2733,7 @@ CONFIG_RTC_DRV_PCF50633=m
|
|||
CONFIG_RTC_DRV_DS3232=m
|
||||
CONFIG_RTC_DRV_ISL12022=m
|
||||
# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set
|
||||
# CONFIG_RTC_DRV_MOXART is not set
|
||||
|
||||
CONFIG_R3964=m
|
||||
# CONFIG_APPLICOM is not set
|
||||
|
@ -2641,6 +2775,7 @@ CONFIG_DRM_MGAG200=m # do not enable on f17 or older
|
|||
# CONFIG_DRM_SAVAGE is not set
|
||||
CONFIG_DRM_I915=m
|
||||
CONFIG_DRM_I915_KMS=y
|
||||
# CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT is not set
|
||||
CONFIG_DRM_VIA=m
|
||||
CONFIG_DRM_NOUVEAU=m
|
||||
CONFIG_NOUVEAU_DEBUG=5
|
||||
|
@ -2654,7 +2789,6 @@ CONFIG_DRM_I2C_NXP_TDA998X=m
|
|||
CONFIG_DRM_UDL=m
|
||||
CONFIG_DRM_VMWGFX=m
|
||||
CONFIG_DRM_VMWGFX_FBCON=y
|
||||
CONFIG_DRM_VGEM=m
|
||||
CONFIG_DRM_QXL=m
|
||||
|
||||
#
|
||||
|
@ -2719,6 +2853,7 @@ CONFIG_VIDEO_CX88=m
|
|||
CONFIG_VIDEO_CX88_DVB=m
|
||||
CONFIG_VIDEO_CX88_ALSA=m
|
||||
CONFIG_VIDEO_CX88_BLACKBIRD=m
|
||||
CONFIG_VIDEO_CX88_ENABLE_VP3054=y
|
||||
CONFIG_VIDEO_CX88_VP3054=m
|
||||
CONFIG_VIDEO_EM28XX=m
|
||||
CONFIG_VIDEO_EM28XX_ALSA=m
|
||||
|
@ -2743,6 +2878,7 @@ CONFIG_VIDEO_SAA7134_ALSA=m
|
|||
CONFIG_VIDEO_SAA7134_DVB=m
|
||||
CONFIG_VIDEO_SAA7134_RC=y
|
||||
CONFIG_VIDEO_USBVISION=m
|
||||
CONFIG_VIDEO_STK1160_COMMON=m
|
||||
CONFIG_VIDEO_STK1160=m
|
||||
CONFIG_VIDEO_STK1160_AC97=y
|
||||
CONFIG_VIDEO_W9966=m
|
||||
|
@ -2923,6 +3059,7 @@ CONFIG_IR_GPIO_CIR=m
|
|||
CONFIG_V4L_MEM2MEM_DRIVERS=y
|
||||
# CONFIG_VIDEO_MEM2MEM_DEINTERLACE is not set
|
||||
# CONFIG_VIDEO_SH_VEU is not set
|
||||
# CONFIG_VIDEO_RENESAS_VSP1 is not set
|
||||
# CONFIG_V4L_TEST_DRIVERS is not set
|
||||
|
||||
# CONFIG_VIDEO_MEM2MEM_TESTDEV is not set
|
||||
|
@ -2998,7 +3135,7 @@ CONFIG_FB_TILEBLITTING=y
|
|||
CONFIG_FB_VESA=y
|
||||
CONFIG_FB_VGA16=m
|
||||
CONFIG_FB_VIRTUAL=m
|
||||
CONFIG_FB_VOODOO1=m
|
||||
# CONFIG_FB_VOODOO1 is not set
|
||||
# CONFIG_FB_VT8623 is not set
|
||||
CONFIG_FB_EFI=y
|
||||
# CONFIG_FB_VIA is not set
|
||||
|
@ -3228,9 +3365,15 @@ CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
|||
CONFIG_USB_EHCI_TT_NEWSCHED=y
|
||||
# CONFIG_USB_EHCI_MV is not set
|
||||
# CONFIG_USB_EHCI_HCD_PLATFORM is not set
|
||||
# CONFIG_USB_ISP116X_HCD is not set
|
||||
# CONFIG_USB_ISP1760_HCD is not set
|
||||
CONFIG_USB_ISP1362_HCD=m
|
||||
CONFIG_USB_FUSBH200_HCD=m
|
||||
# CONFIG_USB_FOTG210_HCD is not set
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_OHCI_HCD_PCI=y
|
||||
# CONFIG_USB_OHCI_HCD_SSB is not set
|
||||
# CONFIG_USB_HCD_TEST_MODE is not set
|
||||
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
|
||||
CONFIG_USB_UHCI_HCD=y
|
||||
CONFIG_USB_SL811_HCD=m
|
||||
|
@ -3239,8 +3382,6 @@ CONFIG_USB_SL811_HCD_ISO=y
|
|||
# CONFIG_USB_R8A66597_HCD is not set
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
# CONFIG_USB_XHCI_HCD_DEBUGGING is not set
|
||||
CONFIG_USB_ISP1362_HCD=m
|
||||
CONFIG_USB_FUSBH200_HCD=m
|
||||
|
||||
#
|
||||
# USB Device Class drivers
|
||||
|
@ -3330,9 +3471,14 @@ CONFIG_HID_SMARTJOYPLUS=m
|
|||
CONFIG_HID_TOPSEED=m
|
||||
CONFIG_HID_THINGM=m
|
||||
CONFIG_HID_THRUSTMASTER=m
|
||||
CONFIG_HID_XINMO=m
|
||||
CONFIG_HID_ZEROPLUS=m
|
||||
CONFIG_HID_ZYDACRON=m
|
||||
CONFIG_HID_SENSOR_HUB=m
|
||||
CONFIG_HID_SENSOR_GYRO_3D=m
|
||||
CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
|
||||
CONFIG_HID_SENSOR_ALS=m
|
||||
CONFIG_HID_SENSOR_ACCEL_3D=m
|
||||
CONFIG_HID_EMS_FF=m
|
||||
CONFIG_HID_ELECOM=m
|
||||
CONFIG_HID_ELO=m
|
||||
|
@ -3400,6 +3546,7 @@ CONFIG_USB_GSPCA_SPCA506=m
|
|||
CONFIG_USB_GSPCA_SPCA508=m
|
||||
CONFIG_USB_GSPCA_SPCA561=m
|
||||
CONFIG_USB_GSPCA_STK014=m
|
||||
CONFIG_USB_GSPCA_STK1135=m
|
||||
CONFIG_USB_GSPCA_SUNPLUS=m
|
||||
CONFIG_USB_GSPCA_T613=m
|
||||
CONFIG_USB_GSPCA_TOPRO=m
|
||||
|
@ -3443,6 +3590,7 @@ CONFIG_USB_SPEEDTOUCH=m
|
|||
CONFIG_USB_NET_AX8817X=m
|
||||
CONFIG_USB_NET_AX88179_178A=m
|
||||
CONFIG_USB_NET_DM9601=m
|
||||
CONFIG_USB_NET_SR9700=m
|
||||
CONFIG_USB_NET_SMSC95XX=m
|
||||
CONFIG_USB_NET_GL620A=m
|
||||
CONFIG_USB_NET_NET1080=m
|
||||
|
@ -3487,6 +3635,7 @@ CONFIG_USB_USS720=m
|
|||
#
|
||||
CONFIG_USB_SERIAL=y
|
||||
CONFIG_USB_SERIAL_GENERIC=y
|
||||
CONFIG_USB_SERIAL_SIMPLE=m
|
||||
CONFIG_USB_SERIAL_AIRCABLE=m
|
||||
CONFIG_USB_SERIAL_ARK3116=m
|
||||
CONFIG_USB_SERIAL_BELKIN=m
|
||||
|
@ -3581,6 +3730,7 @@ CONFIG_USB_PHY=y
|
|||
# CONFIG_OMAP_USB2 is not set
|
||||
# CONFIG_OMAP_USB3 is not set
|
||||
# CONFIG_OMAP_CONTROL_USB is not set
|
||||
# CONFIG_AM335X_PHY_USB is not set
|
||||
# CONFIG_SAMSUNG_USBPHY is not set
|
||||
# CONFIG_SAMSUNG_USB2PHY is not set
|
||||
# CONFIG_SAMSUNG_USB3PHY is not set
|
||||
|
@ -3597,8 +3747,6 @@ CONFIG_USB_FILE_STORAGE=m
|
|||
# CONFIG_USB_GADGET is not set
|
||||
# CONFIG_USB_DWC3 is not set
|
||||
# CONFIG_USB_GADGETFS is not set
|
||||
# CONFIG_USB_ISP116X_HCD is not set
|
||||
# CONFIG_USB_ISP1760_HCD is not set
|
||||
# CONFIG_USB_OXU210HP_HCD is not set
|
||||
CONFIG_USB_IOWARRIOR=m
|
||||
CONFIG_USB_ISIGHTFW=m
|
||||
|
@ -3625,6 +3773,7 @@ CONFIG_RADIO_SI4713=m
|
|||
CONFIG_USB_MR800=m
|
||||
CONFIG_USB_STKWEBCAM=m
|
||||
# CONFIG_USB_TEST is not set
|
||||
# CONFIG_USB_EHSET_TEST_FIXTURE is not set
|
||||
CONFIG_USB_TRANCEVIBRATOR=m
|
||||
CONFIG_USB_U132_HCD=m
|
||||
CONFIG_USB_UEAGLEATM=m
|
||||
|
@ -3703,6 +3852,7 @@ CONFIG_MFD_VIPERBOARD=m
|
|||
# CONFIG_MFD_SI476X_CORE is not set
|
||||
# CONFIG_MFD_TPS65912 is not set
|
||||
# CONFIG_MFD_SYSCON is not set
|
||||
# CONFIG_MFD_DA9063 is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
|
@ -3752,6 +3902,7 @@ CONFIG_AUTOFS4_FS=y
|
|||
CONFIG_NILFS2_FS=m
|
||||
# CONFIG_LOGFS is not set
|
||||
CONFIG_CEPH_FS=m
|
||||
CONFIG_CEPH_FSCACHE=y
|
||||
CONFIG_BLK_DEV_RBD=m
|
||||
CONFIG_CEPH_LIB=m
|
||||
# CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not set
|
||||
|
@ -3806,6 +3957,7 @@ CONFIG_ECRYPT_FS=m
|
|||
# CONFIG_ECRYPT_FS_MESSAGING is not set
|
||||
CONFIG_HFS_FS=m
|
||||
CONFIG_HFSPLUS_FS=m
|
||||
# CONFIG_HFSPLUS_FS_POSIX_ACL is not set
|
||||
CONFIG_BEFS_FS=m
|
||||
# CONFIG_BEFS_DEBUG is not set
|
||||
# CONFIG_BFS_FS is not set
|
||||
|
@ -3907,6 +4059,7 @@ CONFIG_BTRFS_FS_POSIX_ACL=y
|
|||
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
|
||||
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
|
||||
# CONFIG_BTRFS_DEBUG is not set
|
||||
# CONFIG_BTRFS_ASSERT is not set
|
||||
|
||||
CONFIG_CONFIGFS_FS=y
|
||||
|
||||
|
@ -3944,6 +4097,7 @@ CONFIG_SUN_PARTITION=y
|
|||
# CONFIG_SYSV68_PARTITION is not set
|
||||
CONFIG_UNIXWARE_DISKLABEL=y
|
||||
# CONFIG_ULTRIX_PARTITION is not set
|
||||
# CONFIG_CMDLINE_PARTITION is not set
|
||||
|
||||
CONFIG_NLS=y
|
||||
|
||||
|
@ -4032,6 +4186,9 @@ CONFIG_HEADERS_CHECK=y
|
|||
# This generates a huge amount of dmesg spew
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
#
|
||||
# This breaks booting until the module patches are in-tree
|
||||
# CONFIG_DEBUG_KOBJECT_RELEASE is not set
|
||||
#
|
||||
#
|
||||
# These debug options are deliberatly left on (even in 'make release' kernels).
|
||||
# They aren't that much of a performance impact, and the value
|
||||
|
@ -4233,6 +4390,9 @@ CONFIG_FB_ATY_BACKLIGHT=y
|
|||
# CONFIG_BACKLIGHT_SAHARA is not set
|
||||
CONFIG_BACKLIGHT_WM831X=m
|
||||
CONFIG_BACKLIGHT_LP855X=m
|
||||
# CONFIG_BACKLIGHT_GPIO is not set
|
||||
# CONFIG_BACKLIGHT_LV5207LP is not set
|
||||
# CONFIG_BACKLIGHT_BD6107 is not set
|
||||
|
||||
CONFIG_LCD_CLASS_DEVICE=m
|
||||
CONFIG_LCD_PLATFORM=m
|
||||
|
@ -4382,6 +4542,8 @@ CONFIG_LEDS_DELL_NETBOOKS=m
|
|||
# CONFIG_LEDS_LM355x is not set
|
||||
# CONFIG_LEDS_OT200 is not set
|
||||
# CONFIG_LEDS_PWM is not set
|
||||
# CONFIG_LEDS_LP8501 is not set
|
||||
# CONFIG_LEDS_PCA963X is not set
|
||||
CONFIG_LEDS_TRIGGERS=y
|
||||
CONFIG_LEDS_TRIGGER_TIMER=m
|
||||
CONFIG_LEDS_TRIGGER_ONESHOT=m
|
||||
|
@ -4471,6 +4633,7 @@ CONFIG_POWER_SUPPLY=y
|
|||
|
||||
# CONFIG_TEST_POWER is not set
|
||||
CONFIG_APM_POWER=m
|
||||
# CONFIG_GENERIC_ADC_BATTERY is not set
|
||||
# CONFIG_WM831X_POWER is not set
|
||||
|
||||
# CONFIG_BATTERY_DS2760 is not set
|
||||
|
@ -4490,6 +4653,7 @@ CONFIG_APM_POWER=m
|
|||
# CONFIG_CHARGER_GPIO is not set
|
||||
# CONFIG_CHARGER_PCF50633 is not set
|
||||
# CONFIG_CHARGER_BQ2415X is not set
|
||||
# CONFIG_CHARGER_BQ24190 is not set
|
||||
CONFIG_POWER_RESET=y
|
||||
|
||||
# CONFIG_PDA_POWER is not set
|
||||
|
@ -4505,6 +4669,7 @@ CONFIG_UIO_AEC=m
|
|||
CONFIG_UIO_SERCOS3=m
|
||||
CONFIG_UIO_PCI_GENERIC=m
|
||||
# CONFIG_UIO_NETX is not set
|
||||
# CONFIG_UIO_MF624 is not set
|
||||
|
||||
CONFIG_VFIO=m
|
||||
CONFIG_VFIO_IOMMU_TYPE1=m
|
||||
|
@ -4544,6 +4709,7 @@ CONFIG_MEMSTICK=m
|
|||
# CONFIG_MEMSTICK_DEBUG is not set
|
||||
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
|
||||
CONFIG_MSPRO_BLOCK=m
|
||||
# CONFIG_MS_BLOCK is not set
|
||||
CONFIG_MEMSTICK_TIFM_MS=m
|
||||
CONFIG_MEMSTICK_JMICRON_38X=m
|
||||
CONFIG_MEMSTICK_R592=m
|
||||
|
@ -4563,6 +4729,9 @@ CONFIG_OPTIMIZE_INLINING=y
|
|||
|
||||
# CONFIG_GPIOLIB is not set
|
||||
# CONFIG_PINCTRL is not set
|
||||
# CONFIG_DEBUG_PINCTRL is not set
|
||||
# CONFIG_PINMUX is not set
|
||||
# CONFIG_PINCONF is not set
|
||||
|
||||
CONFIG_NET_DSA=m
|
||||
CONFIG_NET_DSA_MV88E6060=m
|
||||
|
@ -4609,6 +4778,7 @@ CONFIG_STAGING_MEDIA=y
|
|||
# CONFIG_TI_ST is not set
|
||||
# CONFIG_FB_XGI is not set
|
||||
# CONFIG_VIDEO_GO7007 is not set
|
||||
# CONFIG_USB_MSI3101 is not set
|
||||
# CONFIG_DT3155 is not set
|
||||
# CONFIG_W35UND is not set
|
||||
# CONFIG_PRISM2_USB is not set
|
||||
|
@ -4621,7 +4791,6 @@ CONFIG_USB_ATMEL=m
|
|||
# CONFIG_POHMELFS is not set
|
||||
# CONFIG_IDE_PHISON is not set
|
||||
# CONFIG_LINE6_USB is not set
|
||||
# CONFIG_IIO is not set
|
||||
# CONFIG_VME_BUS is not set
|
||||
# CONFIG_RAR_REGISTER is not set
|
||||
# CONFIG_VT6656 is not set
|
||||
|
@ -4635,6 +4804,7 @@ CONFIG_RTL8192E=m
|
|||
# CONFIG_INPUT_GPIO is not set
|
||||
# CONFIG_VIDEO_CX25821 is not set
|
||||
# CONFIG_R8187SE is not set
|
||||
# CONFIG_R8188EU is not set
|
||||
# CONFIG_RTL8192U is not set
|
||||
# CONFIG_FB_SM7XX is not set
|
||||
# CONFIG_SPECTRA is not set
|
||||
|
@ -4642,6 +4812,7 @@ CONFIG_RTL8192E=m
|
|||
# CONFIG_EASYCAP is not set
|
||||
# CONFIG_SOLO6X10 is not set
|
||||
# CONFIG_ACPI_QUICKSTART is not set
|
||||
# CONFIG_LTE_GDM724X is not set
|
||||
CONFIG_R8712U=m # Larry Finger maintains this (rhbz 699618)
|
||||
# CONFIG_R8712_AP is not set
|
||||
# CONFIG_ATH6K_LEGACY is not set
|
||||
|
@ -4675,6 +4846,10 @@ CONFIG_ALTERA_STAPL=m
|
|||
# CONFIG_CED1401 is not set
|
||||
# CONFIG_DGRP is not set
|
||||
# CONFIG_SB105X is not set
|
||||
# CONFIG_LUSTRE_FS is not set
|
||||
# CONFIG_XILLYBUS is not set
|
||||
# CONFIG_DGAP is not set
|
||||
# CONFIG_DGNC is not set
|
||||
# END OF STAGING
|
||||
|
||||
#
|
||||
|
@ -4730,6 +4905,7 @@ CONFIG_MAC802154=m
|
|||
CONFIG_NET_MPLS_GSO=m
|
||||
|
||||
# CONFIG_EXTCON is not set
|
||||
# CONFIG_EXTCON_ADC_JACK is not set
|
||||
# CONFIG_MEMORY is not set
|
||||
|
||||
CONFIG_PPS=m
|
||||
|
@ -4759,6 +4935,7 @@ CONFIG_ZSWAP=y
|
|||
# CONFIG_W1_MASTER_GPIO is not set
|
||||
# CONFIG_LEDS_GPIO is not set
|
||||
CONFIG_GPIO_SYSFS=y
|
||||
# CONFIG_GPIO_GENERIC_PLATFORM is not set
|
||||
# CONFIG_GPIO_MAX732X is not set
|
||||
# CONFIG_GPIO_PCA953X is not set
|
||||
# CONFIG_GPIO_PCF857X is not set
|
||||
|
@ -4827,6 +5004,7 @@ CONFIG_BCMA=m
|
|||
CONFIG_BCMA_BLOCKIO=y
|
||||
CONFIG_BCMA_HOST_PCI_POSSIBLE=y
|
||||
CONFIG_BCMA_HOST_PCI=y
|
||||
# CONFIG_BCMA_HOST_SOC is not set
|
||||
CONFIG_BCMA_DRIVER_GMAC_CMN=y
|
||||
CONFIG_BCMA_DRIVER_GPIO=y
|
||||
# CONFIG_BCMA_DEBUG is not set
|
||||
|
|
|
@ -331,12 +331,9 @@ CONFIG_I2C_MPC=m
|
|||
# CONFIG_IMA is not set
|
||||
# CONFIG_TCG_TPM is not set
|
||||
|
||||
CONFIG_RFKILL_GPIO=m
|
||||
|
||||
# CONFIG_CRYPTO_DEV_FSL_CAAM is not set
|
||||
# CONFIG_CRYPTO_SHA1_PPC is not set
|
||||
|
||||
# CONFIG_GPIO_GENERIC_PLATFORM is not set
|
||||
# CONFIG_GPIO_MCP23S08 is not set
|
||||
|
||||
# CONFIG_CAN_FLEXCAN is not set
|
||||
|
@ -382,3 +379,5 @@ CONFIG_BACKLIGHT_PWM=m
|
|||
CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=n
|
||||
|
||||
CONFIG_XZ_DEC_POWERPC=y
|
||||
|
||||
CONFIG_CRASH=m
|
||||
|
|
|
@ -97,6 +97,8 @@ CONFIG_HZ_100=y
|
|||
|
||||
CONFIG_MEMORY_HOTREMOVE=y
|
||||
|
||||
CONFIG_CGROUP_HUGETLB=y
|
||||
|
||||
# CONFIG_MV643XX_ETH is not set
|
||||
CONFIG_IRQSTACKS=y
|
||||
CONFIG_DEBUG_STACKOVERFLOW=y
|
||||
|
@ -134,6 +136,8 @@ CONFIG_RELOCATABLE=y
|
|||
|
||||
CONFIG_RCU_FANOUT=64
|
||||
|
||||
CONFIG_CMA=y
|
||||
# CONFIG_CMA_DEBUG is not set
|
||||
CONFIG_KVM_BOOK3S_64=m
|
||||
CONFIG_KVM_BOOK3S_64_HV=y
|
||||
# CONFIG_KVM_EXIT_TIMING is not set
|
||||
|
|
|
@ -88,6 +88,8 @@ CONFIG_HZ_100=y
|
|||
|
||||
CONFIG_MEMORY_HOTREMOVE=y
|
||||
|
||||
CONFIG_CGROUP_HUGETLB=y
|
||||
|
||||
# CONFIG_MV643XX_ETH is not set
|
||||
CONFIG_IRQSTACKS=y
|
||||
CONFIG_DEBUG_STACKOVERFLOW=y
|
||||
|
@ -125,6 +127,8 @@ CONFIG_RELOCATABLE=y
|
|||
|
||||
CONFIG_RCU_FANOUT=64
|
||||
|
||||
CONFIG_CMA=y
|
||||
# CONFIG_CMA_DEBUG is not set
|
||||
CONFIG_KVM_BOOK3S_64=m
|
||||
CONFIG_KVM_BOOK3S_64_HV=y
|
||||
# CONFIG_KVM_EXIT_TIMING is not set
|
||||
|
|
|
@ -194,6 +194,7 @@ CONFIG_VIRTUALIZATION=y
|
|||
CONFIG_KVM=m
|
||||
# CONFIG_KVM_S390_UCONTROL is not set
|
||||
CONFIG_S390_GUEST=y
|
||||
CONFIG_VIRTIO_CONSOLE=y
|
||||
|
||||
|
||||
CONFIG_MEMORY_HOTPLUG=y
|
||||
|
@ -234,8 +235,6 @@ CONFIG_SCM_BLOCK_CLUSTER_WRITE=y
|
|||
# CONFIG_S390_PTDUMP is not set
|
||||
# CONFIG_ASYMMETRIC_KEY_TYPE is not set
|
||||
# CONFIG_PCI is not set
|
||||
# CONFIG_GPIO_GENERIC_PLATFORM is not set
|
||||
# CONFIG_GPIO_MCP23S08 is not set
|
||||
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
# CONFIG_HID is not set
|
||||
|
@ -248,6 +247,7 @@ CONFIG_SCM_BLOCK_CLUSTER_WRITE=y
|
|||
# CONFIG_INPUT_TABLET is not set
|
||||
# CONFIG_INPUT_TOUCHSCREEN is not set
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
# CONFIG_SERIO is not set
|
||||
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
# CONFIG_AUXDISPLAY is not set
|
||||
|
@ -266,6 +266,8 @@ CONFIG_SCM_BLOCK_CLUSTER_WRITE=y
|
|||
# CONFIG_I2C_PARPORT is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_PTP_1588_CLOCK is not set
|
||||
# CONFIG_PPS is not set
|
||||
|
||||
# CONFIG_PHYLIB is not set
|
||||
# CONFIG_ATM_DRIVERS is not set
|
||||
|
@ -278,3 +280,5 @@ CONFIG_SCM_BLOCK_CLUSTER_WRITE=y
|
|||
# CONFIG_IEEE802154_DRIVERS is not set
|
||||
|
||||
# CONFIG_FMC is not set
|
||||
|
||||
CONFIG_CRASH=m
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# CONFIG_64BIT is not set
|
||||
|
||||
CONFIG_X86_32_NON_STANDARD=y
|
||||
# CONFIG_X86_32_NON_STANDARD is not set
|
||||
|
||||
# CONFIG_X86_ELAN is not set
|
||||
# CONFIG_X86_GOLDFISH is not set
|
||||
|
@ -230,3 +230,4 @@ CONFIG_BACKLIGHT_PWM=m
|
|||
# CONFIG_OF_VIDEOMODE is not set
|
||||
|
||||
# CONFIG_MLX5_INFINIBAND is not set
|
||||
# CONFIG_PINCTRL_SINGLE is not set
|
||||
|
|
|
@ -40,6 +40,8 @@ CONFIG_EFI_VARS_PSTORE=y
|
|||
CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE=y
|
||||
CONFIG_EFI_PCDP=y
|
||||
CONFIG_FB_EFI=y
|
||||
# needs FB_SIMPLE to work correctly
|
||||
# CONFIG_X86_SYSFB is not set
|
||||
|
||||
# FIXME: 32bit only?
|
||||
# CONFIG_FB_N411 is not set
|
||||
|
@ -145,6 +147,8 @@ CONFIG_I2C_PIIX4=m
|
|||
CONFIG_I2C_SIS96X=m
|
||||
CONFIG_I2C_VIA=m
|
||||
CONFIG_I2C_VIAPRO=m
|
||||
CONFIG_I2C_DESIGNWARE_CORE=m
|
||||
CONFIG_I2C_DESIGNWARE_PLATFORM=m
|
||||
|
||||
#rhbz 997149
|
||||
# CONFIG_DELL_RBU is not set
|
||||
|
@ -252,6 +256,7 @@ CONFIG_PARAVIRT_TIME_ACCOUNTING=y
|
|||
CONFIG_KVM_CLOCK=y
|
||||
CONFIG_KVM_GUEST=y
|
||||
CONFIG_KVM_MMU_AUDIT=y # default $x would be nice...
|
||||
# CONFIG_KVM_DEBUG_FS is not set
|
||||
|
||||
CONFIG_XEN=y
|
||||
# CONFIG_XEN_DEBUG is not set
|
||||
|
@ -360,6 +365,9 @@ CONFIG_LPC_ICH=m
|
|||
|
||||
CONFIG_GPIO_ICH=m
|
||||
# CONFIG_GPIO_LYNXPOINT is not set
|
||||
# CONFIG_GPIO_MCP23S08 is not set
|
||||
# CONFIG_GPIO_F7188X is not set
|
||||
|
||||
|
||||
CONFIG_PCI_CNB20LE_QUIRK=y
|
||||
|
||||
|
@ -396,9 +404,6 @@ CONFIG_HP_ACCEL=m
|
|||
|
||||
# CONFIG_RAPIDIO is not set
|
||||
|
||||
# CONFIG_GPIO_GENERIC_PLATFORM is not set
|
||||
# CONFIG_GPIO_MCP23S08 is not set
|
||||
|
||||
CONFIG_SCHED_SMT=y
|
||||
CONFIG_CC_STACKPROTECTOR=y
|
||||
CONFIG_RELOCATABLE=y
|
||||
|
@ -430,7 +435,9 @@ CONFIG_NFC_MICROREAD_MEI=m
|
|||
# Maybe enable in debug kernels?
|
||||
# CONFIG_DEBUG_NMI_SELFTEST is not set
|
||||
|
||||
# CONFIG_X86_INTEL_LPSS is not set
|
||||
CONFIG_X86_INTEL_LPSS=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_PINCTRL_BAYTRAIL=y
|
||||
|
||||
# CONFIG_INTEL_POWERCLAMP is not set
|
||||
CONFIG_X86_PKG_TEMP_THERMAL=m
|
||||
|
@ -459,3 +466,5 @@ CONFIG_MODULE_SIG_UEFI=y
|
|||
|
||||
CONFIG_VMXNET3=m
|
||||
CONFIG_VFIO_PCI_VGA=y
|
||||
|
||||
# CONFIG_NTB is not set
|
||||
|
|
|
@ -16,8 +16,10 @@ CONFIG_X86_64_ACPI_NUMA=y
|
|||
CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
|
||||
CONFIG_NUMA_BALANCING=y
|
||||
|
||||
CONFIG_NR_CPUS=128
|
||||
# https://lists.fedoraproject.org/pipermail/kernel/2013-November/004601.html
|
||||
CONFIG_NR_CPUS=1024
|
||||
CONFIG_PHYSICAL_START=0x1000000
|
||||
CONFIG_PHYSICAL_ALIGN=0x1000000
|
||||
|
||||
CONFIG_IA32_EMULATION=y
|
||||
# CONFIG_IA32_AOUT is not set
|
||||
|
@ -30,6 +32,7 @@ CONFIG_SWIOTLB=y
|
|||
# CONFIG_CALGARY_IOMMU is not set
|
||||
|
||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_CGROUP_HUGETLB=y
|
||||
CONFIG_MEM_SOFT_DIRTY=y
|
||||
|
||||
CONFIG_KEXEC_JUMP=y
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
Instead of spewing this over and over, and scrolling useful info
|
||||
off the screen, just print it once.
|
||||
|
||||
--- linux-3.9.0-0.rc3.git0.2.fc19.x86_64/kernel/sched/idle_task.c~ 2013-03-21 10:44:17.935087323 -0400
|
||||
+++ linux-3.9.0-0.rc3.git0.2.fc19.x86_64/kernel/sched/idle_task.c 2013-03-21 10:44:41.936092782 -0400
|
||||
@@ -35,6 +35,13 @@ static struct task_struct *pick_next_tas
|
||||
static void
|
||||
dequeue_task_idle(struct rq *rq, struct task_struct *p, int flags)
|
||||
{
|
||||
+ static bool once = 0;
|
||||
+
|
||||
+ if (once == 1)
|
||||
+ return;
|
||||
+
|
||||
+ once = 1;
|
||||
+
|
||||
raw_spin_unlock_irq(&rq->lock);
|
||||
printk(KERN_ERR "bad: scheduling from the idle thread!\n");
|
||||
dump_stack();
|
|
@ -249,14 +249,14 @@ index 2b6e699..0000000
|
|||
-
|
||||
-struct key *modsign_keyring;
|
||||
-
|
||||
-extern __initdata const u8 modsign_certificate_list[];
|
||||
-extern __initdata const u8 modsign_certificate_list_end[];
|
||||
-extern __initconst const u8 modsign_certificate_list[];
|
||||
-extern __initconst const u8 modsign_certificate_list_end[];
|
||||
-
|
||||
-/*
|
||||
- * We need to make sure ccache doesn't cache the .o file as it doesn't notice
|
||||
- * if modsign.pub changes.
|
||||
- */
|
||||
-static __initdata const char annoy_ccache[] = __TIME__ "foo";
|
||||
-static __initconst const char annoy_ccache[] = __TIME__ "foo";
|
||||
-
|
||||
-/*
|
||||
- * Load the compiled-in keys
|
||||
|
|
|
@ -150,19 +150,6 @@ index 7e96f4f..18c599d 100644
|
|||
};
|
||||
|
||||
/* forward declaration for QXL_INFO_IO */
|
||||
diff --git a/drivers/gpu/drm/qxl/qxl_fb.c b/drivers/gpu/drm/qxl/qxl_fb.c
|
||||
index 88722f2..f437b30 100644
|
||||
--- a/drivers/gpu/drm/qxl/qxl_fb.c
|
||||
+++ b/drivers/gpu/drm/qxl/qxl_fb.c
|
||||
@@ -108,7 +108,7 @@ static void qxl_fb_dirty_flush(struct fb_info *info)
|
||||
u32 x1, x2, y1, y2;
|
||||
|
||||
/* TODO: hard coding 32 bpp */
|
||||
- int stride = qfbdev->qfb.base.pitches[0] * 4;
|
||||
+ int stride = qfbdev->qfb.base.pitches[0];
|
||||
|
||||
x1 = qfbdev->dirty.x1;
|
||||
x2 = qfbdev->dirty.x2;
|
||||
diff --git a/drivers/gpu/drm/qxl/qxl_kms.c b/drivers/gpu/drm/qxl/qxl_kms.c
|
||||
index 9e8da9e..e0ddd5b 100644
|
||||
--- a/drivers/gpu/drm/qxl/qxl_kms.c
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
Bugzilla: N/A
|
||||
Upstream-status: 3.13
|
||||
|
||||
From 1b28c3e628315ac0d9ef2d3fac0403f05ae692db Mon Sep 17 00:00:00 2001
|
||||
From: Dave Airlie <airlied@redhat.com>
|
||||
Date: Thu, 28 Nov 2013 05:39:03 +0000
|
||||
Subject: drm/qxl: fix memory leak in release list handling
|
||||
|
||||
wow no idea how I got this far without seeing this,
|
||||
leaking the entries in the list makes kmalloc-64 slab grow.
|
||||
|
||||
References: https://bugzilla.kernel.org/show_bug.cgi?id=65121
|
||||
Cc: stable@vger.kernel.org
|
||||
Reported-by: Matthew Stapleton <matthew4196@gmail.com>
|
||||
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
||||
---
|
||||
diff --git a/drivers/gpu/drm/qxl/qxl_release.c b/drivers/gpu/drm/qxl/qxl_release.c
|
||||
index 0109a96..821ab7b 100644
|
||||
--- a/drivers/gpu/drm/qxl/qxl_release.c
|
||||
+++ b/drivers/gpu/drm/qxl/qxl_release.c
|
||||
@@ -92,6 +92,7 @@ qxl_release_free(struct qxl_device *qdev,
|
||||
- DRM_FILE_OFFSET);
|
||||
qxl_fence_remove_release(&bo->fence, release->id);
|
||||
qxl_bo_unref(&bo);
|
||||
+ kfree(entry);
|
||||
}
|
||||
spin_lock(&qdev->release_idr_lock);
|
||||
idr_remove(&qdev->release_idr, release->id);
|
||||
--
|
||||
cgit v0.9.0.2-2-gbebe
|
|
@ -1,173 +0,0 @@
|
|||
Bugzilla: 1010679
|
||||
Upstream-status: 3.13
|
||||
|
||||
From 908171aa738b5bbcc6241cec46f73fcd57dd00d4 Mon Sep 17 00:00:00 2001
|
||||
From: Pierre Ossman <pierre@ossman.eu>
|
||||
Date: Wed, 6 Nov 2013 20:00:32 +0100
|
||||
Subject: [PATCH 1/2] drm/radeon/audio: correct ACR table
|
||||
|
||||
The values were taken from the HDMI spec, but they assumed
|
||||
exact x/1.001 clocks. Since we round the clocks, we also need
|
||||
to calculate different N and CTS values.
|
||||
|
||||
Note that the N for 25.2/1.001 MHz at 44.1 kHz audio is out of
|
||||
spec. Hopefully this mode is rarely used and/or HDMI sinks
|
||||
tolerate overly large values of N.
|
||||
|
||||
bug:
|
||||
https://bugs.freedesktop.org/show_bug.cgi?id=69675
|
||||
|
||||
Signed-off-by: Pierre Ossman <pierre@ossman.eu>
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
---
|
||||
drivers/gpu/drm/radeon/r600_hdmi.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
index 4140fe8..e8ca095 100644
|
||||
--- a/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
+++ b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
@@ -57,15 +57,15 @@ enum r600_hdmi_iec_status_bits {
|
||||
static const struct radeon_hdmi_acr r600_hdmi_predefined_acr[] = {
|
||||
/* 32kHz 44.1kHz 48kHz */
|
||||
/* Clock N CTS N CTS N CTS */
|
||||
- { 25175, 4576, 28125, 7007, 31250, 6864, 28125 }, /* 25,20/1.001 MHz */
|
||||
+ { 25175, 4096, 25175, 28224, 125875, 6144, 25175 }, /* 25,20/1.001 MHz */
|
||||
{ 25200, 4096, 25200, 6272, 28000, 6144, 25200 }, /* 25.20 MHz */
|
||||
{ 27000, 4096, 27000, 6272, 30000, 6144, 27000 }, /* 27.00 MHz */
|
||||
{ 27027, 4096, 27027, 6272, 30030, 6144, 27027 }, /* 27.00*1.001 MHz */
|
||||
{ 54000, 4096, 54000, 6272, 60000, 6144, 54000 }, /* 54.00 MHz */
|
||||
{ 54054, 4096, 54054, 6272, 60060, 6144, 54054 }, /* 54.00*1.001 MHz */
|
||||
- { 74176, 11648, 210937, 17836, 234375, 11648, 140625 }, /* 74.25/1.001 MHz */
|
||||
+ { 74176, 4096, 74176, 5733, 75335, 6144, 74176 }, /* 74.25/1.001 MHz */
|
||||
{ 74250, 4096, 74250, 6272, 82500, 6144, 74250 }, /* 74.25 MHz */
|
||||
- { 148352, 11648, 421875, 8918, 234375, 5824, 140625 }, /* 148.50/1.001 MHz */
|
||||
+ { 148352, 4096, 148352, 5733, 150670, 6144, 148352 }, /* 148.50/1.001 MHz */
|
||||
{ 148500, 4096, 148500, 6272, 165000, 6144, 148500 }, /* 148.50 MHz */
|
||||
{ 0, 4096, 0, 6272, 0, 6144, 0 } /* Other */
|
||||
};
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From 05e4776357fe7217e531cbaaa163e24f688d10ce Mon Sep 17 00:00:00 2001
|
||||
From: Pierre Ossman <pierre@ossman.eu>
|
||||
Date: Wed, 6 Nov 2013 20:09:08 +0100
|
||||
Subject: [PATCH 2/2] drm/radeon/audio: improve ACR calculation
|
||||
|
||||
In order to have any realistic chance of calculating proper
|
||||
ACR values, we need to be able to calculate both N and CTS,
|
||||
not just CTS. We still aim for the ideal N as specified in
|
||||
the HDMI spec though.
|
||||
|
||||
bug:
|
||||
https://bugs.freedesktop.org/show_bug.cgi?id=69675
|
||||
|
||||
Signed-off-by: Pierre Ossman <pierre@ossman.eu>
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
---
|
||||
drivers/gpu/drm/radeon/r600_hdmi.c | 68 ++++++++++++++++++++++++++------------
|
||||
1 file changed, 46 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
index e8ca095..92c6df7 100644
|
||||
--- a/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
+++ b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
@@ -24,6 +24,7 @@
|
||||
* Authors: Christian König
|
||||
*/
|
||||
#include <linux/hdmi.h>
|
||||
+#include <linux/gcd.h>
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/radeon_drm.h>
|
||||
#include "radeon.h"
|
||||
@@ -67,25 +68,47 @@ static const struct radeon_hdmi_acr r600_hdmi_predefined_acr[] = {
|
||||
{ 74250, 4096, 74250, 6272, 82500, 6144, 74250 }, /* 74.25 MHz */
|
||||
{ 148352, 4096, 148352, 5733, 150670, 6144, 148352 }, /* 148.50/1.001 MHz */
|
||||
{ 148500, 4096, 148500, 6272, 165000, 6144, 148500 }, /* 148.50 MHz */
|
||||
- { 0, 4096, 0, 6272, 0, 6144, 0 } /* Other */
|
||||
};
|
||||
|
||||
+
|
||||
/*
|
||||
- * calculate CTS value if it's not found in the table
|
||||
+ * calculate CTS and N values if they are not found in the table
|
||||
*/
|
||||
-static void r600_hdmi_calc_cts(uint32_t clock, int *CTS, int N, int freq)
|
||||
+static void r600_hdmi_calc_cts(uint32_t clock, int *CTS, int *N, int freq)
|
||||
{
|
||||
- u64 n;
|
||||
- u32 d;
|
||||
-
|
||||
- if (*CTS == 0) {
|
||||
- n = (u64)clock * (u64)N * 1000ULL;
|
||||
- d = 128 * freq;
|
||||
- do_div(n, d);
|
||||
- *CTS = n;
|
||||
- }
|
||||
- DRM_DEBUG("Using ACR timing N=%d CTS=%d for frequency %d\n",
|
||||
- N, *CTS, freq);
|
||||
+ int n, cts;
|
||||
+ unsigned long div, mul;
|
||||
+
|
||||
+ /* Safe, but overly large values */
|
||||
+ n = 128 * freq;
|
||||
+ cts = clock * 1000;
|
||||
+
|
||||
+ /* Smallest valid fraction */
|
||||
+ div = gcd(n, cts);
|
||||
+
|
||||
+ n /= div;
|
||||
+ cts /= div;
|
||||
+
|
||||
+ /*
|
||||
+ * The optimal N is 128*freq/1000. Calculate the closest larger
|
||||
+ * value that doesn't truncate any bits.
|
||||
+ */
|
||||
+ mul = ((128*freq/1000) + (n-1))/n;
|
||||
+
|
||||
+ n *= mul;
|
||||
+ cts *= mul;
|
||||
+
|
||||
+ /* Check that we are in spec (not always possible) */
|
||||
+ if (n < (128*freq/1500))
|
||||
+ printk(KERN_WARNING "Calculated ACR N value is too small. You may experience audio problems.\n");
|
||||
+ if (n > (128*freq/300))
|
||||
+ printk(KERN_WARNING "Calculated ACR N value is too large. You may experience audio problems.\n");
|
||||
+
|
||||
+ *N = n;
|
||||
+ *CTS = cts;
|
||||
+
|
||||
+ DRM_DEBUG("Calculated ACR timing N=%d CTS=%d for frequency %d\n",
|
||||
+ *N, *CTS, freq);
|
||||
}
|
||||
|
||||
struct radeon_hdmi_acr r600_hdmi_acr(uint32_t clock)
|
||||
@@ -93,15 +116,16 @@ struct radeon_hdmi_acr r600_hdmi_acr(uint32_t clock)
|
||||
struct radeon_hdmi_acr res;
|
||||
u8 i;
|
||||
|
||||
- for (i = 0; r600_hdmi_predefined_acr[i].clock != clock &&
|
||||
- r600_hdmi_predefined_acr[i].clock != 0; i++)
|
||||
- ;
|
||||
- res = r600_hdmi_predefined_acr[i];
|
||||
+ /* Precalculated values for common clocks */
|
||||
+ for (i = 0; i < ARRAY_SIZE(r600_hdmi_predefined_acr); i++) {
|
||||
+ if (r600_hdmi_predefined_acr[i].clock == clock)
|
||||
+ return r600_hdmi_predefined_acr[i];
|
||||
+ }
|
||||
|
||||
- /* In case some CTS are missing */
|
||||
- r600_hdmi_calc_cts(clock, &res.cts_32khz, res.n_32khz, 32000);
|
||||
- r600_hdmi_calc_cts(clock, &res.cts_44_1khz, res.n_44_1khz, 44100);
|
||||
- r600_hdmi_calc_cts(clock, &res.cts_48khz, res.n_48khz, 48000);
|
||||
+ /* And odd clocks get manually calculated */
|
||||
+ r600_hdmi_calc_cts(clock, &res.cts_32khz, &res.n_32khz, 32000);
|
||||
+ r600_hdmi_calc_cts(clock, &res.cts_44_1khz, &res.n_44_1khz, 44100);
|
||||
+ r600_hdmi_calc_cts(clock, &res.cts_48khz, &res.n_48khz, 48000);
|
||||
|
||||
return res;
|
||||
}
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -1,162 +0,0 @@
|
|||
|
||||
Delivered-To: jwboyer@gmail.com
|
||||
Received: by 10.76.168.104 with SMTP id zv8csp55663oab;
|
||||
Fri, 30 Aug 2013 15:52:46 -0700 (PDT)
|
||||
X-Received: by 10.68.244.168 with SMTP id xh8mr12419215pbc.3.1377903166373;
|
||||
Fri, 30 Aug 2013 15:52:46 -0700 (PDT)
|
||||
Return-Path: <linux-kernel-owner@vger.kernel.org>
|
||||
Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67])
|
||||
by mx.google.com with ESMTP id qc9si280431pac.269.1969.12.31.16.00.00;
|
||||
Fri, 30 Aug 2013 15:52:46 -0700 (PDT)
|
||||
Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67;
|
||||
Authentication-Results: mx.google.com;
|
||||
spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mail=linux-kernel-owner@vger.kernel.org;
|
||||
dkim=neutral (bad format) header.i=@hds.com
|
||||
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
||||
id S1753535Ab3H3WrV (ORCPT <rfc822;georgezhim@gmail.com>
|
||||
+ 99 others); Fri, 30 Aug 2013 18:47:21 -0400
|
||||
Received: from usindpps04.hds.com ([207.126.252.17]:35636 "EHLO
|
||||
usindpps04.hds.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
||||
with ESMTP id S1752650Ab3H3WrU (ORCPT
|
||||
<rfc822;linux-kernel@vger.kernel.org>);
|
||||
Fri, 30 Aug 2013 18:47:20 -0400
|
||||
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=hds.com; h=subject : to : from : cc
|
||||
: date : message-id : mime-version : content-type :
|
||||
content-transfer-encoding; s=mail1;
|
||||
bh=VofHN8IMnygn2hbqnFjLmX0PPEPbvpzE377u1RxpGOY=;
|
||||
b=piW6J78W57qDXBPJJuodWw/tvf0T//JbxKX6sLPvpuaOG2nBLMHzDqUeTYwFEQqUvdmf
|
||||
ZTkiwsKi0WEku3MKcxJ7veR7wvTZcQ4fGMETFTf1c2J/1JOKpXLnft4ERuW89/FAxw25
|
||||
wQM1ulsuQ3Cncl0I/sIaqMlaMOtvuQ/C8rsHorp+75eFiL6yx1jU5wMbuti4D/NprIET
|
||||
3r57cPZ0YCh6sLjvOgjay6mKyktMToyjHPx6X1TWCSWcwes33Popc1hpadxUdFI/0npL
|
||||
mN3Tttbe7e2RcmkXAZbwg8xj+FwSu3nIRC4G9UpFCsMz518C/AWZj4puwWE6VHZWVvVZ Rg==
|
||||
Received: from usindmail01.hds.com (usindmail03 [207.126.252.22])
|
||||
by usindpps04.hds.com (8.14.5/8.14.5) with ESMTP id r7UMlBjr025492;
|
||||
Fri, 30 Aug 2013 18:47:11 -0400
|
||||
Received: from hds.com (usindnetf5d-vlan47float.corp.hds.com [10.74.73.11])
|
||||
by usindmail01.hds.com (8.14.1/8.14.1) with ESMTP id r7UMl8SG058466;
|
||||
Fri, 30 Aug 2013 18:47:10 -0400 (EDT)
|
||||
Subject: [PATCH v2 1/2] elevator: Fix a race in elevator switching and md
|
||||
device initialization
|
||||
To: linux-kernel@vger.kernel.org
|
||||
From: Tomoki Sekiyama <tomoki.sekiyama@hds.com>
|
||||
Cc: axboe@kernel.dk, tj@kernel.org, seiji.aguchi@hds.com,
|
||||
vgoyal@redhat.com, majianpeng@gmail.com
|
||||
Date: Fri, 30 Aug 2013 18:47:07 -0400
|
||||
Message-ID: <20130830224707.21812.63516.stgit@hds.com>
|
||||
User-Agent: StGit/0.16
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
Content-Transfer-Encoding: 7bit
|
||||
X-Proofpoint-SPF-Result: pass
|
||||
X-Proofpoint-SPF-Record: v=spf1 mx ip4:207.126.244.0/26 ip4:207.126.252.0/25 include:mktomail.com
|
||||
include:cloud.hds.com ~all
|
||||
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.10.8794,1.0.431,0.0.0000
|
||||
definitions=2013-08-30_09:2013-08-30,2013-08-30,1970-01-01 signatures=0
|
||||
X-Proofpoint-Spam-Details: rule=notspam policy=outbound_policy score=0 spamscore=0 suspectscore=1
|
||||
phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx
|
||||
scancount=1 engine=7.0.1-1305240000 definitions=main-1308300162
|
||||
Sender: linux-kernel-owner@vger.kernel.org
|
||||
Precedence: bulk
|
||||
List-ID: <linux-kernel.vger.kernel.org>
|
||||
X-Mailing-List: linux-kernel@vger.kernel.org
|
||||
|
||||
The soft lockup below happens at the boot time of the system using dm
|
||||
multipath and the udev rules to switch scheduler.
|
||||
|
||||
[ 356.127001] BUG: soft lockup - CPU#3 stuck for 22s! [sh:483]
|
||||
[ 356.127001] RIP: 0010:[<ffffffff81072a7d>] [<ffffffff81072a7d>] lock_timer_base.isra.35+0x1d/0x50
|
||||
...
|
||||
[ 356.127001] Call Trace:
|
||||
[ 356.127001] [<ffffffff81073810>] try_to_del_timer_sync+0x20/0x70
|
||||
[ 356.127001] [<ffffffff8118b08a>] ? kmem_cache_alloc_node_trace+0x20a/0x230
|
||||
[ 356.127001] [<ffffffff810738b2>] del_timer_sync+0x52/0x60
|
||||
[ 356.127001] [<ffffffff812ece22>] cfq_exit_queue+0x32/0xf0
|
||||
[ 356.127001] [<ffffffff812c98df>] elevator_exit+0x2f/0x50
|
||||
[ 356.127001] [<ffffffff812c9f21>] elevator_change+0xf1/0x1c0
|
||||
[ 356.127001] [<ffffffff812caa50>] elv_iosched_store+0x20/0x50
|
||||
[ 356.127001] [<ffffffff812d1d09>] queue_attr_store+0x59/0xb0
|
||||
[ 356.127001] [<ffffffff812143f6>] sysfs_write_file+0xc6/0x140
|
||||
[ 356.127001] [<ffffffff811a326d>] vfs_write+0xbd/0x1e0
|
||||
[ 356.127001] [<ffffffff811a3ca9>] SyS_write+0x49/0xa0
|
||||
[ 356.127001] [<ffffffff8164e899>] system_call_fastpath+0x16/0x1b
|
||||
|
||||
This is caused by a race between md device initialization by multipathd and
|
||||
shell script to switch the scheduler using sysfs.
|
||||
|
||||
- multipathd:
|
||||
SyS_ioctl -> do_vfs_ioctl -> dm_ctl_ioctl -> ctl_ioctl -> table_load
|
||||
-> dm_setup_md_queue -> blk_init_allocated_queue -> elevator_init
|
||||
q->elevator = elevator_alloc(q, e); // not yet initialized
|
||||
|
||||
- sh -c 'echo deadline > /sys/$DEVPATH/queue/scheduler':
|
||||
elevator_switch (in the call trace above)
|
||||
struct elevator_queue *old = q->elevator;
|
||||
q->elevator = elevator_alloc(q, new_e);
|
||||
elevator_exit(old); // lockup! (*)
|
||||
|
||||
- multipathd: (cont.)
|
||||
err = e->ops.elevator_init_fn(q); // init fails; q->elevator is modified
|
||||
|
||||
(*) When del_timer_sync() is called, lock_timer_base() will loop infinitely
|
||||
while timer->base == NULL. In this case, as timer will never initialized,
|
||||
it results in lockup.
|
||||
|
||||
This patch introduces acquisition of q->sysfs_lock around elevator_init()
|
||||
into blk_init_allocated_queue(), to provide mutual exclusion between
|
||||
initialization of the q->scheduler and switching of the scheduler.
|
||||
|
||||
This should fix this bugzilla:
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=902012
|
||||
|
||||
Signed-off-by: Tomoki Sekiyama <tomoki.sekiyama@hds.com>
|
||||
---
|
||||
block/blk-core.c | 10 +++++++++-
|
||||
block/elevator.c | 6 ++++++
|
||||
2 files changed, 15 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/block/blk-core.c b/block/blk-core.c
|
||||
index 93a18d1..2f6275f 100644
|
||||
--- a/block/blk-core.c
|
||||
+++ b/block/blk-core.c
|
||||
@@ -739,9 +739,17 @@ blk_init_allocated_queue(struct request_queue *q, request_fn_proc *rfn,
|
||||
|
||||
q->sg_reserved_size = INT_MAX;
|
||||
|
||||
+ /* Protect q->elevator from elevator_change */
|
||||
+ mutex_lock(&q->sysfs_lock);
|
||||
+
|
||||
/* init elevator */
|
||||
- if (elevator_init(q, NULL))
|
||||
+ if (elevator_init(q, NULL)) {
|
||||
+ mutex_unlock(&q->sysfs_lock);
|
||||
return NULL;
|
||||
+ }
|
||||
+
|
||||
+ mutex_unlock(&q->sysfs_lock);
|
||||
+
|
||||
return q;
|
||||
}
|
||||
EXPORT_SYMBOL(blk_init_allocated_queue);
|
||||
diff --git a/block/elevator.c b/block/elevator.c
|
||||
index 668394d..02d4390 100644
|
||||
--- a/block/elevator.c
|
||||
+++ b/block/elevator.c
|
||||
@@ -186,6 +186,12 @@ int elevator_init(struct request_queue *q, char *name)
|
||||
struct elevator_type *e = NULL;
|
||||
int err;
|
||||
|
||||
+ /*
|
||||
+ * q->sysfs_lock must be held to provide mutual exclusion between
|
||||
+ * elevator_switch() and here.
|
||||
+ */
|
||||
+ lockdep_assert_held(&q->sysfs_lock);
|
||||
+
|
||||
if (unlikely(q->elevator))
|
||||
return 0;
|
||||
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
||||
Please read the FAQ at http://www.tux.org/lkml/
|
|
@ -1,121 +0,0 @@
|
|||
|
||||
Delivered-To: jwboyer@gmail.com
|
||||
Received: by 10.76.168.104 with SMTP id zv8csp55623oab;
|
||||
Fri, 30 Aug 2013 15:51:42 -0700 (PDT)
|
||||
X-Received: by 10.67.30.70 with SMTP id kc6mr13149193pad.32.1377903101609;
|
||||
Fri, 30 Aug 2013 15:51:41 -0700 (PDT)
|
||||
Return-Path: <linux-kernel-owner@vger.kernel.org>
|
||||
Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67])
|
||||
by mx.google.com with ESMTP id gg2si304840pac.217.1969.12.31.16.00.00;
|
||||
Fri, 30 Aug 2013 15:51:41 -0700 (PDT)
|
||||
Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67;
|
||||
Authentication-Results: mx.google.com;
|
||||
spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mail=linux-kernel-owner@vger.kernel.org;
|
||||
dkim=neutral (bad format) header.i=@hds.com
|
||||
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
||||
id S1756106Ab3H3WrX (ORCPT <rfc822;georgezhim@gmail.com>
|
||||
+ 99 others); Fri, 30 Aug 2013 18:47:23 -0400
|
||||
Received: from usindpps04.hds.com ([207.126.252.17]:35640 "EHLO
|
||||
usindpps04.hds.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
||||
with ESMTP id S1752650Ab3H3WrW (ORCPT
|
||||
<rfc822;linux-kernel@vger.kernel.org>);
|
||||
Fri, 30 Aug 2013 18:47:22 -0400
|
||||
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=hds.com; h=subject : to : from : cc
|
||||
: date : message-id : in-reply-to : references : mime-version :
|
||||
content-type : content-transfer-encoding; s=mail1;
|
||||
bh=xbQuWVaSJrPfWG5E7bXFAbOFjf/sBaRZsPmpVgy0CYk=;
|
||||
b=NW/A8Imu32MXoBi5FLrQ0FsK66RTWMQo1bFRtgQplVEQQIAXyf1XhCaAZyTkTplc0iEx
|
||||
ovyGZHvLbmGL6w3I3pxkCFz1BPJCqoZtvQITir/WvfzyadYOK1cz+vuBUQSCmfkacvS/
|
||||
w37h1jLAjsvWXkl0GY7pxB9HJMXdeLnhhuWxtNU8m8rKZ7t3LSByMeQi5/3OTkNojDEe
|
||||
70cKeZXCPQ/UIDJAF4cpSVXia5FwoJISjXvQIrvqkYhFelzq3OHMcC482PdpqNB475h3
|
||||
yHHJ83HFOLRulUQdOG5ZVTB9qRg0zxRx/oedeXwzturFke68noRRa4f4izQ8sCwsWOCI Dw==
|
||||
Received: from usindmail01.hds.com (usindmail03 [207.126.252.22])
|
||||
by usindpps04.hds.com (8.14.5/8.14.5) with ESMTP id r7UMlHIc025543;
|
||||
Fri, 30 Aug 2013 18:47:17 -0400
|
||||
Received: from hds.com (usindnetf5d-vlan47float.corp.hds.com [10.74.73.11])
|
||||
by usindmail01.hds.com (8.14.1/8.14.1) with ESMTP id r7UMlGiC058545;
|
||||
Fri, 30 Aug 2013 18:47:17 -0400 (EDT)
|
||||
Subject: [PATCH v2 2/2] elevator: acquire q->sysfs_lock in elevator_change()
|
||||
To: linux-kernel@vger.kernel.org
|
||||
From: Tomoki Sekiyama <tomoki.sekiyama@hds.com>
|
||||
Cc: axboe@kernel.dk, tj@kernel.org, seiji.aguchi@hds.com,
|
||||
vgoyal@redhat.com, majianpeng@gmail.com
|
||||
Date: Fri, 30 Aug 2013 18:47:16 -0400
|
||||
Message-ID: <20130830224716.21812.99333.stgit@hds.com>
|
||||
In-Reply-To: <20130830224707.21812.63516.stgit@hds.com>
|
||||
References: <20130830224707.21812.63516.stgit@hds.com>
|
||||
User-Agent: StGit/0.16
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
Content-Transfer-Encoding: 7bit
|
||||
X-Proofpoint-SPF-Result: pass
|
||||
X-Proofpoint-SPF-Record: v=spf1 mx ip4:207.126.244.0/26 ip4:207.126.252.0/25 include:mktomail.com
|
||||
include:cloud.hds.com ~all
|
||||
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.10.8794,1.0.431,0.0.0000
|
||||
definitions=2013-08-30_09:2013-08-30,2013-08-30,1970-01-01 signatures=0
|
||||
X-Proofpoint-Spam-Details: rule=notspam policy=outbound_policy score=0 spamscore=0 suspectscore=1
|
||||
phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx
|
||||
scancount=1 engine=7.0.1-1305240000 definitions=main-1308300162
|
||||
Sender: linux-kernel-owner@vger.kernel.org
|
||||
Precedence: bulk
|
||||
List-ID: <linux-kernel.vger.kernel.org>
|
||||
X-Mailing-List: linux-kernel@vger.kernel.org
|
||||
|
||||
Add locking of q->sysfs_lock into elevator_change() (an exported function)
|
||||
to ensure it is held to protect q->elevator from elevator_init(), even if
|
||||
elevator_change() is called from non-sysfs paths.
|
||||
sysfs path (elv_iosched_store) uses __elevator_change(), non-locking
|
||||
version, as the lock is already taken by elv_iosched_store().
|
||||
|
||||
Signed-off-by: Tomoki Sekiyama <tomoki.sekiyama@hds.com>
|
||||
---
|
||||
block/elevator.c | 16 ++++++++++++++--
|
||||
1 file changed, 14 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/block/elevator.c b/block/elevator.c
|
||||
index 02d4390..6d765f7 100644
|
||||
--- a/block/elevator.c
|
||||
+++ b/block/elevator.c
|
||||
@@ -965,7 +965,7 @@ fail_init:
|
||||
/*
|
||||
* Switch this queue to the given IO scheduler.
|
||||
*/
|
||||
-int elevator_change(struct request_queue *q, const char *name)
|
||||
+static int __elevator_change(struct request_queue *q, const char *name)
|
||||
{
|
||||
char elevator_name[ELV_NAME_MAX];
|
||||
struct elevator_type *e;
|
||||
@@ -987,6 +987,18 @@ int elevator_change(struct request_queue *q, const char *name)
|
||||
|
||||
return elevator_switch(q, e);
|
||||
}
|
||||
+
|
||||
+int elevator_change(struct request_queue *q, const char *name)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ /* Protect q->elevator from elevator_init() */
|
||||
+ mutex_lock(&q->sysfs_lock);
|
||||
+ ret = __elevator_change(q, name);
|
||||
+ mutex_unlock(&q->sysfs_lock);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
EXPORT_SYMBOL(elevator_change);
|
||||
|
||||
ssize_t elv_iosched_store(struct request_queue *q, const char *name,
|
||||
@@ -997,7 +1009,7 @@ ssize_t elv_iosched_store(struct request_queue *q, const char *name,
|
||||
if (!q->elevator)
|
||||
return count;
|
||||
|
||||
- ret = elevator_change(q, name);
|
||||
+ ret = __elevator_change(q, name);
|
||||
if (!ret)
|
||||
return count;
|
||||
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
||||
Please read the FAQ at http://www.tux.org/lkml/
|
|
@ -1,76 +0,0 @@
|
|||
Allow threads other than the main thread to do introspection of files in
|
||||
proc without relying on read permissions. proc_pid_follow_link() calls
|
||||
proc_fd_access_allowed() which ultimately calls __ptrace_may_access().
|
||||
|
||||
Though this allows additional access to some proc files, we do not
|
||||
believe that this has any unintended security implications. However it
|
||||
probably needs to be looked at carefully.
|
||||
|
||||
The original problem was a thread of a process whose permissions were
|
||||
111 couldn't open its own /proc/self/exe This was interfering with a
|
||||
special purpose debugging tool. A simple reproducer is below.:
|
||||
|
||||
#include <pthread.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#define BUFSIZE 2048
|
||||
|
||||
void *thread_main(void *arg){
|
||||
char *str=(char*)arg;
|
||||
char buf[BUFSIZE];
|
||||
ssize_t len=readlink("/proc/self/exe", buf, BUFSIZE);
|
||||
if(len==-1)
|
||||
printf("/proc/self/exe in %s: %s\n", str,sys_errlist[errno]);
|
||||
else
|
||||
printf("/proc/self/exe in %s: OK\n", str);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(){
|
||||
pthread_t thread;
|
||||
|
||||
int retval=pthread_create( &thread, NULL, thread_main, "thread");
|
||||
if(retval!=0)
|
||||
exit(1);
|
||||
|
||||
thread_main("main");
|
||||
pthread_join(thread, NULL);
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
Signed-off-by: Ben Woodard <woodard@redhat.com>
|
||||
Signed-off-by: Mark Grondona <mgrondona@llnl.gov>
|
||||
---
|
||||
kernel/ptrace.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
|
||||
index acbd284..347c4c7 100644
|
||||
--- a/kernel/ptrace.c
|
||||
+++ b/kernel/ptrace.c
|
||||
diff -ruNp linux-3.8.4-103.fc17.noarch/kernel/ptrace.c linux-3.8.4-103.fc17.ptrace/kernel/ptrace.c
|
||||
--- linux-3.8.4-103.fc17.noarch/kernel/ptrace.c 2013-02-18 17:58:34.000000000 -0600
|
||||
+++ linux-3.8.4-103.fc17.ptrace/kernel/ptrace.c 2013-03-26 14:59:01.939396346 -0500
|
||||
@@ -234,7 +234,7 @@ static int __ptrace_may_access(struct ta
|
||||
*/
|
||||
int dumpable = 0;
|
||||
/* Don't let security modules deny introspection */
|
||||
- if (task == current)
|
||||
+ if (same_thread_group(task, current))
|
||||
return 0;
|
||||
rcu_read_lock();
|
||||
tcred = __task_cred(task);
|
||||
--
|
||||
1.8.1.4
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
||||
Please read the FAQ at http://www.tux.org/lkml/
|
|
@ -1,154 +0,0 @@
|
|||
From 062c2e4363451d49ef840232fe65e8bff0dde2a5 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Deucher <alexander.deucher@amd.com>
|
||||
Date: Fri, 27 Sep 2013 18:09:54 -0400
|
||||
Subject: [PATCH 1/4] drm/radeon: use 64-bit math to calculate CTS values for
|
||||
audio (v2)
|
||||
|
||||
Avoid losing precision. See bug:
|
||||
https://bugs.freedesktop.org/show_bug.cgi?id=69675
|
||||
|
||||
v2: fix math as per Anssi's comments.
|
||||
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
---
|
||||
drivers/gpu/drm/radeon/r600_hdmi.c | 11 +++++++++--
|
||||
1 file changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
index b0fa600..49043a5 100644
|
||||
--- a/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
+++ b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
@@ -75,8 +75,15 @@ static const struct radeon_hdmi_acr r600_hdmi_predefined_acr[] = {
|
||||
*/
|
||||
static void r600_hdmi_calc_cts(uint32_t clock, int *CTS, int N, int freq)
|
||||
{
|
||||
- if (*CTS == 0)
|
||||
- *CTS = clock * N / (128 * freq) * 1000;
|
||||
+ u64 n;
|
||||
+ u32 d;
|
||||
+
|
||||
+ if (*CTS == 0) {
|
||||
+ n = (u64)clock * (u64)N * 1000ULL;
|
||||
+ d = 128 * freq;
|
||||
+ do_div(n, d);
|
||||
+ *CTS = n;
|
||||
+ }
|
||||
DRM_DEBUG("Using ACR timing N=%d CTS=%d for frequency %d\n",
|
||||
N, *CTS, freq);
|
||||
}
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From e7d12c2f98ae1e68c7298e5028048d150fa553a1 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Deucher <alexander.deucher@amd.com>
|
||||
Date: Fri, 27 Sep 2013 18:19:42 -0400
|
||||
Subject: [PATCH 2/4] drm/radeon: fix N/CTS clock matching for audio
|
||||
|
||||
The drm code that calculates the 1001 clocks rounds up
|
||||
rather than truncating. This allows the table to match
|
||||
properly on those modes.
|
||||
|
||||
See bug:
|
||||
https://bugs.freedesktop.org/show_bug.cgi?id=69675
|
||||
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
---
|
||||
drivers/gpu/drm/radeon/r600_hdmi.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
index 49043a5..567703f 100644
|
||||
--- a/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
+++ b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
@@ -57,15 +57,15 @@ enum r600_hdmi_iec_status_bits {
|
||||
static const struct radeon_hdmi_acr r600_hdmi_predefined_acr[] = {
|
||||
/* 32kHz 44.1kHz 48kHz */
|
||||
/* Clock N CTS N CTS N CTS */
|
||||
- { 25174, 4576, 28125, 7007, 31250, 6864, 28125 }, /* 25,20/1.001 MHz */
|
||||
+ { 25175, 4576, 28125, 7007, 31250, 6864, 28125 }, /* 25,20/1.001 MHz */
|
||||
{ 25200, 4096, 25200, 6272, 28000, 6144, 25200 }, /* 25.20 MHz */
|
||||
{ 27000, 4096, 27000, 6272, 30000, 6144, 27000 }, /* 27.00 MHz */
|
||||
{ 27027, 4096, 27027, 6272, 30030, 6144, 27027 }, /* 27.00*1.001 MHz */
|
||||
{ 54000, 4096, 54000, 6272, 60000, 6144, 54000 }, /* 54.00 MHz */
|
||||
{ 54054, 4096, 54054, 6272, 60060, 6144, 54054 }, /* 54.00*1.001 MHz */
|
||||
- { 74175, 11648, 210937, 17836, 234375, 11648, 140625 }, /* 74.25/1.001 MHz */
|
||||
+ { 74176, 11648, 210937, 17836, 234375, 11648, 140625 }, /* 74.25/1.001 MHz */
|
||||
{ 74250, 4096, 74250, 6272, 82500, 6144, 74250 }, /* 74.25 MHz */
|
||||
- { 148351, 11648, 421875, 8918, 234375, 5824, 140625 }, /* 148.50/1.001 MHz */
|
||||
+ { 148352, 11648, 421875, 8918, 234375, 5824, 140625 }, /* 148.50/1.001 MHz */
|
||||
{ 148500, 4096, 148500, 6272, 165000, 6144, 148500 }, /* 148.50 MHz */
|
||||
{ 0, 4096, 0, 6272, 0, 6144, 0 } /* Other */
|
||||
};
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From ee0fec312a1c4e26f255955da942562cd8908a4b Mon Sep 17 00:00:00 2001
|
||||
From: Alex Deucher <alexander.deucher@amd.com>
|
||||
Date: Fri, 27 Sep 2013 18:22:15 -0400
|
||||
Subject: [PATCH 3/4] drm/radeon: use hw generated CTS/N values for audio
|
||||
|
||||
Use the hw generated values rather than calculating
|
||||
them in the driver. There may be some older r6xx
|
||||
asics where this doesn't work correctly. This remains
|
||||
to be seen.
|
||||
|
||||
See bug:
|
||||
https://bugs.freedesktop.org/show_bug.cgi?id=69675
|
||||
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
---
|
||||
drivers/gpu/drm/radeon/r600_hdmi.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
index 567703f..e2ae1c2 100644
|
||||
--- a/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
+++ b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
@@ -451,8 +451,7 @@ void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mod
|
||||
}
|
||||
|
||||
WREG32(HDMI0_ACR_PACKET_CONTROL + offset,
|
||||
- HDMI0_ACR_AUTO_SEND | /* allow hw to sent ACR packets when required */
|
||||
- HDMI0_ACR_SOURCE); /* select SW CTS value */
|
||||
+ HDMI0_ACR_AUTO_SEND); /* allow hw to sent ACR packets when required */
|
||||
|
||||
WREG32(HDMI0_VBI_PACKET_CONTROL + offset,
|
||||
HDMI0_NULL_SEND | /* send null packets when required */
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From b852c985010a77c850b7548d64bbb964ca462b02 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Deucher <alexander.deucher@amd.com>
|
||||
Date: Thu, 10 Oct 2013 11:47:01 -0400
|
||||
Subject: [PATCH 4/4] drm/radeon: re-enable sw ACR support on pre-DCE4
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
HW ACR support may have issues on some older chips, so
|
||||
use SW ACR for now until we've tested further.
|
||||
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
CC: Rafał Miłecki <zajec5@gmail.com>
|
||||
---
|
||||
drivers/gpu/drm/radeon/r600_hdmi.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
index e2ae1c2..5b72931 100644
|
||||
--- a/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
+++ b/drivers/gpu/drm/radeon/r600_hdmi.c
|
||||
@@ -451,6 +451,7 @@ void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mod
|
||||
}
|
||||
|
||||
WREG32(HDMI0_ACR_PACKET_CONTROL + offset,
|
||||
+ HDMI0_ACR_SOURCE | /* select SW CTS value - XXX verify that hw CTS works on all families */
|
||||
HDMI0_ACR_AUTO_SEND); /* allow hw to sent ACR packets when required */
|
||||
|
||||
WREG32(HDMI0_VBI_PACKET_CONTROL + offset,
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -1,253 +0,0 @@
|
|||
Bugzilla: 1035887
|
||||
Upstream-status: 3.13
|
||||
|
||||
From 4be402ba6158068d53ab0268f1affa9d82dae2ec Mon Sep 17 00:00:00 2001
|
||||
From: Hannes Frederic Sowa <hannes@stressinduktion.org>
|
||||
Date: Fri, 22 Nov 2013 23:46:12 +0000
|
||||
Subject: [PATCH] inet: fix addr_len/msg->msg_namelen assignment in recv_error
|
||||
and rxpmtu functions
|
||||
|
||||
Commit bceaa90240b6019ed73b49965eac7d167610be69 ("inet: prevent leakage
|
||||
of uninitialized memory to user in recv syscalls") conditionally updated
|
||||
addr_len if the msg_name is written to. The recv_error and rxpmtu
|
||||
functions relied on the recvmsg functions to set up addr_len before.
|
||||
|
||||
As this does not happen any more we have to pass addr_len to those
|
||||
functions as well and set it to the size of the corresponding sockaddr
|
||||
length.
|
||||
|
||||
This broke traceroute and such.
|
||||
|
||||
Fixes: bceaa90240b6 ("inet: prevent leakage of uninitialized memory to user in recv syscalls")
|
||||
Reported-by: Brad Spengler <spender@grsecurity.net>
|
||||
Reported-by: Tom Labanowski
|
||||
Cc: mpb <mpb.mail@gmail.com>
|
||||
Cc: David S. Miller <davem@davemloft.net>
|
||||
Cc: Eric Dumazet <eric.dumazet@gmail.com>
|
||||
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
include/net/ip.h | 2 +-
|
||||
include/net/ipv6.h | 4 ++--
|
||||
include/net/ping.h | 3 ++-
|
||||
net/ipv4/ip_sockglue.c | 3 ++-
|
||||
net/ipv4/ping.c | 5 +++--
|
||||
net/ipv4/raw.c | 2 +-
|
||||
net/ipv4/udp.c | 2 +-
|
||||
net/ipv6/datagram.c | 7 +++++--
|
||||
net/ipv6/ping.c | 3 ++-
|
||||
net/ipv6/raw.c | 4 ++--
|
||||
net/ipv6/udp.c | 4 ++--
|
||||
net/l2tp/l2tp_ip6.c | 2 +-
|
||||
12 files changed, 24 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/include/net/ip.h b/include/net/ip.h
|
||||
index 5e52688..301f10c 100644
|
||||
--- a/include/net/ip.h
|
||||
+++ b/include/net/ip.h
|
||||
@@ -464,7 +464,7 @@ extern int compat_ip_getsockopt(struct sock *sk, int level,
|
||||
int optname, char __user *optval, int __user *optlen);
|
||||
extern int ip_ra_control(struct sock *sk, unsigned char on, void (*destructor)(struct sock *));
|
||||
|
||||
-extern int ip_recv_error(struct sock *sk, struct msghdr *msg, int len);
|
||||
+extern int ip_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len);
|
||||
extern void ip_icmp_error(struct sock *sk, struct sk_buff *skb, int err,
|
||||
__be16 port, u32 info, u8 *payload);
|
||||
extern void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 dport,
|
||||
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
|
||||
index bbf1c8f..5529d79 100644
|
||||
--- a/include/net/ipv6.h
|
||||
+++ b/include/net/ipv6.h
|
||||
@@ -802,8 +802,8 @@ extern int compat_ipv6_getsockopt(struct sock *sk,
|
||||
extern int ip6_datagram_connect(struct sock *sk,
|
||||
struct sockaddr *addr, int addr_len);
|
||||
|
||||
-extern int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len);
|
||||
-extern int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len);
|
||||
+extern int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len);
|
||||
+extern int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len, int *addr_len);
|
||||
extern void ipv6_icmp_error(struct sock *sk, struct sk_buff *skb, int err, __be16 port,
|
||||
u32 info, u8 *payload);
|
||||
extern void ipv6_local_error(struct sock *sk, int err, struct flowi6 *fl6, u32 info);
|
||||
diff --git a/include/net/ping.h b/include/net/ping.h
|
||||
index 5db0224..2b496e9 100644
|
||||
--- a/include/net/ping.h
|
||||
+++ b/include/net/ping.h
|
||||
@@ -31,7 +31,8 @@
|
||||
|
||||
/* Compatibility glue so we can support IPv6 when it's compiled as a module */
|
||||
struct pingv6_ops {
|
||||
- int (*ipv6_recv_error)(struct sock *sk, struct msghdr *msg, int len);
|
||||
+ int (*ipv6_recv_error)(struct sock *sk, struct msghdr *msg, int len,
|
||||
+ int *addr_len);
|
||||
int (*ip6_datagram_recv_ctl)(struct sock *sk, struct msghdr *msg,
|
||||
struct sk_buff *skb);
|
||||
int (*icmpv6_err_convert)(u8 type, u8 code, int *err);
|
||||
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
|
||||
index d9c4f11..23e6ab0 100644
|
||||
--- a/net/ipv4/ip_sockglue.c
|
||||
+++ b/net/ipv4/ip_sockglue.c
|
||||
@@ -368,7 +368,7 @@ void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 port, u32 inf
|
||||
/*
|
||||
* Handle MSG_ERRQUEUE
|
||||
*/
|
||||
-int ip_recv_error(struct sock *sk, struct msghdr *msg, int len)
|
||||
+int ip_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
|
||||
{
|
||||
struct sock_exterr_skb *serr;
|
||||
struct sk_buff *skb, *skb2;
|
||||
@@ -405,6 +405,7 @@ int ip_recv_error(struct sock *sk, struct msghdr *msg, int len)
|
||||
serr->addr_offset);
|
||||
sin->sin_port = serr->port;
|
||||
memset(&sin->sin_zero, 0, sizeof(sin->sin_zero));
|
||||
+ *addr_len = sizeof(*sin);
|
||||
}
|
||||
|
||||
memcpy(&errhdr.ee, &serr->ee, sizeof(struct sock_extended_err));
|
||||
diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
|
||||
index 92fb6ff..ac31877 100644
|
||||
--- a/net/ipv4/ping.c
|
||||
+++ b/net/ipv4/ping.c
|
||||
@@ -838,10 +838,11 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
||||
|
||||
if (flags & MSG_ERRQUEUE) {
|
||||
if (family == AF_INET) {
|
||||
- return ip_recv_error(sk, msg, len);
|
||||
+ return ip_recv_error(sk, msg, len, addr_len);
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
} else if (family == AF_INET6) {
|
||||
- return pingv6_ops.ipv6_recv_error(sk, msg, len);
|
||||
+ return pingv6_ops.ipv6_recv_error(sk, msg, len,
|
||||
+ addr_len);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
|
||||
index ca4c3f1..7d3db78 100644
|
||||
--- a/net/ipv4/raw.c
|
||||
+++ b/net/ipv4/raw.c
|
||||
@@ -695,7 +695,7 @@ static int raw_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
||||
goto out;
|
||||
|
||||
if (flags & MSG_ERRQUEUE) {
|
||||
- err = ip_recv_error(sk, msg, len);
|
||||
+ err = ip_recv_error(sk, msg, len, addr_len);
|
||||
goto out;
|
||||
}
|
||||
|
||||
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
|
||||
index a7003de..1ef8794 100644
|
||||
--- a/net/ipv4/udp.c
|
||||
+++ b/net/ipv4/udp.c
|
||||
@@ -1210,7 +1210,7 @@ int udp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
||||
bool slow;
|
||||
|
||||
if (flags & MSG_ERRQUEUE)
|
||||
- return ip_recv_error(sk, msg, len);
|
||||
+ return ip_recv_error(sk, msg, len, addr_len);
|
||||
|
||||
try_again:
|
||||
skb = __skb_recv_datagram(sk, flags | (noblock ? MSG_DONTWAIT : 0),
|
||||
diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
|
||||
index 48b6bd2..7a0fd80 100644
|
||||
--- a/net/ipv6/datagram.c
|
||||
+++ b/net/ipv6/datagram.c
|
||||
@@ -318,7 +318,7 @@ void ipv6_local_rxpmtu(struct sock *sk, struct flowi6 *fl6, u32 mtu)
|
||||
/*
|
||||
* Handle MSG_ERRQUEUE
|
||||
*/
|
||||
-int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len)
|
||||
+int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
|
||||
{
|
||||
struct ipv6_pinfo *np = inet6_sk(sk);
|
||||
struct sock_exterr_skb *serr;
|
||||
@@ -369,6 +369,7 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len)
|
||||
&sin->sin6_addr);
|
||||
sin->sin6_scope_id = 0;
|
||||
}
|
||||
+ *addr_len = sizeof(*sin);
|
||||
}
|
||||
|
||||
memcpy(&errhdr.ee, &serr->ee, sizeof(struct sock_extended_err));
|
||||
@@ -423,7 +424,8 @@ EXPORT_SYMBOL_GPL(ipv6_recv_error);
|
||||
/*
|
||||
* Handle IPV6_RECVPATHMTU
|
||||
*/
|
||||
-int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len)
|
||||
+int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len,
|
||||
+ int *addr_len)
|
||||
{
|
||||
struct ipv6_pinfo *np = inet6_sk(sk);
|
||||
struct sk_buff *skb;
|
||||
@@ -457,6 +459,7 @@ int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len)
|
||||
sin->sin6_port = 0;
|
||||
sin->sin6_scope_id = mtu_info.ip6m_addr.sin6_scope_id;
|
||||
sin->sin6_addr = mtu_info.ip6m_addr.sin6_addr;
|
||||
+ *addr_len = sizeof(*sin);
|
||||
}
|
||||
|
||||
put_cmsg(msg, SOL_IPV6, IPV6_PATHMTU, sizeof(mtu_info), &mtu_info);
|
||||
diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c
|
||||
index 18f19df..7856e96 100644
|
||||
--- a/net/ipv6/ping.c
|
||||
+++ b/net/ipv6/ping.c
|
||||
@@ -57,7 +57,8 @@ static struct inet_protosw pingv6_protosw = {
|
||||
|
||||
|
||||
/* Compatibility glue so we can support IPv6 when it's compiled as a module */
|
||||
-static int dummy_ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len)
|
||||
+static int dummy_ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len,
|
||||
+ int *addr_len)
|
||||
{
|
||||
return -EAFNOSUPPORT;
|
||||
}
|
||||
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
|
||||
index 2f303bf..430067c 100644
|
||||
--- a/net/ipv6/raw.c
|
||||
+++ b/net/ipv6/raw.c
|
||||
@@ -467,10 +467,10 @@ static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk,
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (flags & MSG_ERRQUEUE)
|
||||
- return ipv6_recv_error(sk, msg, len);
|
||||
+ return ipv6_recv_error(sk, msg, len, addr_len);
|
||||
|
||||
if (np->rxpmtu && np->rxopt.bits.rxpmtu)
|
||||
- return ipv6_recv_rxpmtu(sk, msg, len);
|
||||
+ return ipv6_recv_rxpmtu(sk, msg, len, addr_len);
|
||||
|
||||
skb = skb_recv_datagram(sk, flags, noblock, &err);
|
||||
if (!skb)
|
||||
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
|
||||
index a59beed..3d2758d 100644
|
||||
--- a/net/ipv6/udp.c
|
||||
+++ b/net/ipv6/udp.c
|
||||
@@ -375,10 +375,10 @@ int udpv6_recvmsg(struct kiocb *iocb, struct sock *sk,
|
||||
bool slow;
|
||||
|
||||
if (flags & MSG_ERRQUEUE)
|
||||
- return ipv6_recv_error(sk, msg, len);
|
||||
+ return ipv6_recv_error(sk, msg, len, addr_len);
|
||||
|
||||
if (np->rxpmtu && np->rxopt.bits.rxpmtu)
|
||||
- return ipv6_recv_rxpmtu(sk, msg, len);
|
||||
+ return ipv6_recv_rxpmtu(sk, msg, len, addr_len);
|
||||
|
||||
try_again:
|
||||
skb = __skb_recv_datagram(sk, flags | (noblock ? MSG_DONTWAIT : 0),
|
||||
diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c
|
||||
index b8a6039..e6e8408 100644
|
||||
--- a/net/l2tp/l2tp_ip6.c
|
||||
+++ b/net/l2tp/l2tp_ip6.c
|
||||
@@ -665,7 +665,7 @@ static int l2tp_ip6_recvmsg(struct kiocb *iocb, struct sock *sk,
|
||||
*addr_len = sizeof(*lsa);
|
||||
|
||||
if (flags & MSG_ERRQUEUE)
|
||||
- return ipv6_recv_error(sk, msg, len);
|
||||
+ return ipv6_recv_error(sk, msg, len, addr_len);
|
||||
|
||||
skb = skb_recv_datagram(sk, flags, noblock, &err);
|
||||
if (!skb)
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -1,256 +0,0 @@
|
|||
Bugzilla: 1035887
|
||||
Upstream-status: 3.13
|
||||
|
||||
From bceaa90240b6019ed73b49965eac7d167610be69 Mon Sep 17 00:00:00 2001
|
||||
From: Hannes Frederic Sowa <hannes@stressinduktion.org>
|
||||
Date: Mon, 18 Nov 2013 04:20:45 +0100
|
||||
Subject: [PATCH] inet: prevent leakage of uninitialized memory to user in recv
|
||||
syscalls
|
||||
|
||||
Only update *addr_len when we actually fill in sockaddr, otherwise we
|
||||
can return uninitialized memory from the stack to the caller in the
|
||||
recvfrom, recvmmsg and recvmsg syscalls. Drop the the (addr_len == NULL)
|
||||
checks because we only get called with a valid addr_len pointer either
|
||||
from sock_common_recvmsg or inet_recvmsg.
|
||||
|
||||
If a blocking read waits on a socket which is concurrently shut down we
|
||||
now return zero and set msg_msgnamelen to 0.
|
||||
|
||||
Reported-by: mpb <mpb.mail@gmail.com>
|
||||
Suggested-by: Eric Dumazet <eric.dumazet@gmail.com>
|
||||
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
net/ieee802154/dgram.c | 3 +--
|
||||
net/ipv4/ping.c | 19 +++++++------------
|
||||
net/ipv4/raw.c | 4 +---
|
||||
net/ipv4/udp.c | 7 +------
|
||||
net/ipv6/raw.c | 4 +---
|
||||
net/ipv6/udp.c | 5 +----
|
||||
net/l2tp/l2tp_ip.c | 4 +---
|
||||
net/phonet/datagram.c | 9 ++++-----
|
||||
8 files changed, 17 insertions(+), 38 deletions(-)
|
||||
|
||||
diff --git a/net/ieee802154/dgram.c b/net/ieee802154/dgram.c
|
||||
index 581a595..1865fdf 100644
|
||||
--- a/net/ieee802154/dgram.c
|
||||
+++ b/net/ieee802154/dgram.c
|
||||
@@ -315,9 +315,8 @@ static int dgram_recvmsg(struct kiocb *iocb, struct sock *sk,
|
||||
if (saddr) {
|
||||
saddr->family = AF_IEEE802154;
|
||||
saddr->addr = mac_cb(skb)->sa;
|
||||
- }
|
||||
- if (addr_len)
|
||||
*addr_len = sizeof(*saddr);
|
||||
+ }
|
||||
|
||||
if (flags & MSG_TRUNC)
|
||||
copied = skb->len;
|
||||
diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
|
||||
index 9afbdb1..aacefa0 100644
|
||||
--- a/net/ipv4/ping.c
|
||||
+++ b/net/ipv4/ping.c
|
||||
@@ -830,8 +830,6 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
||||
{
|
||||
struct inet_sock *isk = inet_sk(sk);
|
||||
int family = sk->sk_family;
|
||||
- struct sockaddr_in *sin;
|
||||
- struct sockaddr_in6 *sin6;
|
||||
struct sk_buff *skb;
|
||||
int copied, err;
|
||||
|
||||
@@ -841,13 +839,6 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
||||
if (flags & MSG_OOB)
|
||||
goto out;
|
||||
|
||||
- if (addr_len) {
|
||||
- if (family == AF_INET)
|
||||
- *addr_len = sizeof(*sin);
|
||||
- else if (family == AF_INET6 && addr_len)
|
||||
- *addr_len = sizeof(*sin6);
|
||||
- }
|
||||
-
|
||||
if (flags & MSG_ERRQUEUE) {
|
||||
if (family == AF_INET) {
|
||||
return ip_recv_error(sk, msg, len);
|
||||
@@ -877,11 +868,13 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
||||
|
||||
/* Copy the address and add cmsg data. */
|
||||
if (family == AF_INET) {
|
||||
- sin = (struct sockaddr_in *) msg->msg_name;
|
||||
+ struct sockaddr_in *sin = (struct sockaddr_in *)msg->msg_name;
|
||||
+
|
||||
sin->sin_family = AF_INET;
|
||||
sin->sin_port = 0 /* skb->h.uh->source */;
|
||||
sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
|
||||
memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
|
||||
+ *addr_len = sizeof(*sin);
|
||||
|
||||
if (isk->cmsg_flags)
|
||||
ip_cmsg_recv(msg, skb);
|
||||
@@ -890,17 +883,19 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
||||
} else if (family == AF_INET6) {
|
||||
struct ipv6_pinfo *np = inet6_sk(sk);
|
||||
struct ipv6hdr *ip6 = ipv6_hdr(skb);
|
||||
- sin6 = (struct sockaddr_in6 *) msg->msg_name;
|
||||
+ struct sockaddr_in6 *sin6 =
|
||||
+ (struct sockaddr_in6 *)msg->msg_name;
|
||||
+
|
||||
sin6->sin6_family = AF_INET6;
|
||||
sin6->sin6_port = 0;
|
||||
sin6->sin6_addr = ip6->saddr;
|
||||
-
|
||||
sin6->sin6_flowinfo = 0;
|
||||
if (np->sndflow)
|
||||
sin6->sin6_flowinfo = ip6_flowinfo(ip6);
|
||||
|
||||
sin6->sin6_scope_id = ipv6_iface_scope_id(&sin6->sin6_addr,
|
||||
IP6CB(skb)->iif);
|
||||
+ *addr_len = sizeof(*sin6);
|
||||
|
||||
if (inet6_sk(sk)->rxopt.all)
|
||||
pingv6_ops.ip6_datagram_recv_ctl(sk, msg, skb);
|
||||
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
|
||||
index 41e1d28..5cb8ddb 100644
|
||||
--- a/net/ipv4/raw.c
|
||||
+++ b/net/ipv4/raw.c
|
||||
@@ -696,9 +696,6 @@ static int raw_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
||||
if (flags & MSG_OOB)
|
||||
goto out;
|
||||
|
||||
- if (addr_len)
|
||||
- *addr_len = sizeof(*sin);
|
||||
-
|
||||
if (flags & MSG_ERRQUEUE) {
|
||||
err = ip_recv_error(sk, msg, len);
|
||||
goto out;
|
||||
@@ -726,6 +723,7 @@ static int raw_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
||||
sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
|
||||
sin->sin_port = 0;
|
||||
memset(&sin->sin_zero, 0, sizeof(sin->sin_zero));
|
||||
+ *addr_len = sizeof(*sin);
|
||||
}
|
||||
if (inet->cmsg_flags)
|
||||
ip_cmsg_recv(msg, skb);
|
||||
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
|
||||
index 89909dd..998431c 100644
|
||||
--- a/net/ipv4/udp.c
|
||||
+++ b/net/ipv4/udp.c
|
||||
@@ -1235,12 +1235,6 @@ int udp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
||||
int is_udplite = IS_UDPLITE(sk);
|
||||
bool slow;
|
||||
|
||||
- /*
|
||||
- * Check any passed addresses
|
||||
- */
|
||||
- if (addr_len)
|
||||
- *addr_len = sizeof(*sin);
|
||||
-
|
||||
if (flags & MSG_ERRQUEUE)
|
||||
return ip_recv_error(sk, msg, len);
|
||||
|
||||
@@ -1302,6 +1296,7 @@ try_again:
|
||||
sin->sin_port = udp_hdr(skb)->source;
|
||||
sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
|
||||
memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
|
||||
+ *addr_len = sizeof(*sin);
|
||||
}
|
||||
if (inet->cmsg_flags)
|
||||
ip_cmsg_recv(msg, skb);
|
||||
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
|
||||
index 3c00842..e24ff1d 100644
|
||||
--- a/net/ipv6/raw.c
|
||||
+++ b/net/ipv6/raw.c
|
||||
@@ -465,9 +465,6 @@ static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk,
|
||||
if (flags & MSG_OOB)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
- if (addr_len)
|
||||
- *addr_len=sizeof(*sin6);
|
||||
-
|
||||
if (flags & MSG_ERRQUEUE)
|
||||
return ipv6_recv_error(sk, msg, len);
|
||||
|
||||
@@ -506,6 +503,7 @@ static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk,
|
||||
sin6->sin6_flowinfo = 0;
|
||||
sin6->sin6_scope_id = ipv6_iface_scope_id(&sin6->sin6_addr,
|
||||
IP6CB(skb)->iif);
|
||||
+ *addr_len = sizeof(*sin6);
|
||||
}
|
||||
|
||||
sock_recv_ts_and_drops(msg, sk, skb);
|
||||
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
|
||||
index f3893e8..81eb8cf 100644
|
||||
--- a/net/ipv6/udp.c
|
||||
+++ b/net/ipv6/udp.c
|
||||
@@ -392,9 +392,6 @@ int udpv6_recvmsg(struct kiocb *iocb, struct sock *sk,
|
||||
int is_udp4;
|
||||
bool slow;
|
||||
|
||||
- if (addr_len)
|
||||
- *addr_len = sizeof(struct sockaddr_in6);
|
||||
-
|
||||
if (flags & MSG_ERRQUEUE)
|
||||
return ipv6_recv_error(sk, msg, len);
|
||||
|
||||
@@ -480,7 +477,7 @@ try_again:
|
||||
ipv6_iface_scope_id(&sin6->sin6_addr,
|
||||
IP6CB(skb)->iif);
|
||||
}
|
||||
-
|
||||
+ *addr_len = sizeof(*sin6);
|
||||
}
|
||||
if (is_udp4) {
|
||||
if (inet->cmsg_flags)
|
||||
diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
|
||||
index 571db8d..da1a1ce 100644
|
||||
--- a/net/l2tp/l2tp_ip.c
|
||||
+++ b/net/l2tp/l2tp_ip.c
|
||||
@@ -518,9 +518,6 @@ static int l2tp_ip_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
|
||||
if (flags & MSG_OOB)
|
||||
goto out;
|
||||
|
||||
- if (addr_len)
|
||||
- *addr_len = sizeof(*sin);
|
||||
-
|
||||
skb = skb_recv_datagram(sk, flags, noblock, &err);
|
||||
if (!skb)
|
||||
goto out;
|
||||
@@ -543,6 +540,7 @@ static int l2tp_ip_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
|
||||
sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
|
||||
sin->sin_port = 0;
|
||||
memset(&sin->sin_zero, 0, sizeof(sin->sin_zero));
|
||||
+ *addr_len = sizeof(*sin);
|
||||
}
|
||||
if (inet->cmsg_flags)
|
||||
ip_cmsg_recv(msg, skb);
|
||||
diff --git a/net/phonet/datagram.c b/net/phonet/datagram.c
|
||||
index 12c30f3..38946b2 100644
|
||||
--- a/net/phonet/datagram.c
|
||||
+++ b/net/phonet/datagram.c
|
||||
@@ -139,9 +139,6 @@ static int pn_recvmsg(struct kiocb *iocb, struct sock *sk,
|
||||
MSG_CMSG_COMPAT))
|
||||
goto out_nofree;
|
||||
|
||||
- if (addr_len)
|
||||
- *addr_len = sizeof(sa);
|
||||
-
|
||||
skb = skb_recv_datagram(sk, flags, noblock, &rval);
|
||||
if (skb == NULL)
|
||||
goto out_nofree;
|
||||
@@ -162,8 +159,10 @@ static int pn_recvmsg(struct kiocb *iocb, struct sock *sk,
|
||||
|
||||
rval = (flags & MSG_TRUNC) ? skb->len : copylen;
|
||||
|
||||
- if (msg->msg_name != NULL)
|
||||
- memcpy(msg->msg_name, &sa, sizeof(struct sockaddr_pn));
|
||||
+ if (msg->msg_name != NULL) {
|
||||
+ memcpy(msg->msg_name, &sa, sizeof(sa));
|
||||
+ *addr_len = sizeof(sa);
|
||||
+ }
|
||||
|
||||
out:
|
||||
skb_free_datagram(sk, skb);
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
From 05104a4e8713b27291c7bb49c1e7e68b4e243571 Mon Sep 17 00:00:00 2001
|
||||
From: Neil Horman <nhorman@tuxdriver.com>
|
||||
Date: Fri, 27 Sep 2013 16:53:35 +0000
|
||||
Subject: iommu: Remove stack trace from broken irq remapping warning
|
||||
|
||||
The warning for the irq remapping broken check in intel_irq_remapping.c is
|
||||
pretty pointless. We need the warning, but we know where its comming from, the
|
||||
stack trace will always be the same, and it needlessly triggers things like
|
||||
Abrt. This changes the warning to just print a text warning about BIOS being
|
||||
broken, without the stack trace, then sets the appropriate taint bit. Since we
|
||||
automatically disable irq remapping, theres no need to contiue making Abrt jump
|
||||
at this problem
|
||||
|
||||
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
|
||||
CC: Joerg Roedel <joro@8bytes.org>
|
||||
CC: Bjorn Helgaas <bhelgaas@google.com>
|
||||
CC: Andy Lutomirski <luto@amacapital.net>
|
||||
CC: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
CC: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
|
||||
Signed-off-by: Joerg Roedel <joro@8bytes.org>
|
||||
---
|
||||
diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c
|
||||
index f71673d..b97d70b 100644
|
||||
--- a/drivers/iommu/intel_irq_remapping.c
|
||||
+++ b/drivers/iommu/intel_irq_remapping.c
|
||||
@@ -525,12 +525,13 @@ static int __init intel_irq_remapping_supported(void)
|
||||
if (disable_irq_remap)
|
||||
return 0;
|
||||
if (irq_remap_broken) {
|
||||
- WARN_TAINT(1, TAINT_FIRMWARE_WORKAROUND,
|
||||
- "This system BIOS has enabled interrupt remapping\n"
|
||||
- "on a chipset that contains an erratum making that\n"
|
||||
- "feature unstable. To maintain system stability\n"
|
||||
- "interrupt remapping is being disabled. Please\n"
|
||||
- "contact your BIOS vendor for an update\n");
|
||||
+ printk(KERN_WARNING
|
||||
+ "This system BIOS has enabled interrupt remapping\n"
|
||||
+ "on a chipset that contains an erratum making that\n"
|
||||
+ "feature unstable. To maintain system stability\n"
|
||||
+ "interrupt remapping is being disabled. Please\n"
|
||||
+ "contact your BIOS vendor for an update\n");
|
||||
+ add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
|
||||
disable_irq_remap = 1;
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
cgit v0.9.2
|
|
@ -1,43 +0,0 @@
|
|||
Bugzilla: 1030015 1030017
|
||||
Upstream-status: 3.13
|
||||
|
||||
From aeb45260747b0a1bf4d374d5e65298cc254cb4f5 Mon Sep 17 00:00:00 2001
|
||||
From: Hannes Frederic Sowa <hannes@stressinduktion.org>
|
||||
Date: Tue, 5 Nov 2013 02:41:27 +0100
|
||||
Subject: [PATCH] ipv6: fix headroom calculation in udp6_ufo_fragment
|
||||
|
||||
Commit 1e2bd517c108816220f262d7954b697af03b5f9c ("udp6: Fix udp
|
||||
fragmentation for tunnel traffic.") changed the calculation if
|
||||
there is enough space to include a fragment header in the skb from a
|
||||
skb->mac_header dervived one to skb_headroom. Because we already peeled
|
||||
off the skb to transport_header this is wrong. Change this back to check
|
||||
if we have enough room before the mac_header.
|
||||
|
||||
This fixes a panic Saran Neti reported. He used the tbf scheduler which
|
||||
skb_gso_segments the skb. The offsets get negative and we panic in memcpy
|
||||
because the skb was erroneously not expanded at the head.
|
||||
|
||||
Reported-by: Saran Neti <Saran.Neti@telus.com>
|
||||
Cc: Pravin B Shelar <pshelar@nicira.com>
|
||||
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
net/ipv6/udp_offload.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/net/ipv6/udp_offload.c b/net/ipv6/udp_offload.c
|
||||
index 5d1b8d7..657914b 100644
|
||||
--- a/net/ipv6/udp_offload.c
|
||||
+++ b/net/ipv6/udp_offload.c
|
||||
@@ -86,7 +86,7 @@ static struct sk_buff *udp6_ufo_fragment(struct sk_buff *skb,
|
||||
|
||||
/* Check if there is enough headroom to insert fragment header. */
|
||||
tnl_hlen = skb_tnl_header_len(skb);
|
||||
- if (skb_headroom(skb) < (tnl_hlen + frag_hdr_sz)) {
|
||||
+ if (skb->mac_header < (tnl_hlen + frag_hdr_sz)) {
|
||||
if (gso_pskb_expand_head(skb, tnl_hlen + frag_hdr_sz))
|
||||
goto out;
|
||||
}
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -1,97 +0,0 @@
|
|||
From: Eric Dumazet <edumazet@google.com>
|
||||
|
||||
Steinar reported reallocations of skb->head with IPv6, leading to
|
||||
a warning in skb_try_coalesce()
|
||||
|
||||
It turns out iwl3945 has several problems :
|
||||
|
||||
1) skb->truesize is underestimated.
|
||||
We really consume PAGE_SIZE bytes for a fragment,
|
||||
not the frame length.
|
||||
2) 128 bytes of initial headroom is a bit low and forces reallocations.
|
||||
3) We can avoid consuming a full page for small enough frames.
|
||||
|
||||
Reported-by: Steinar H. Gunderson <sesse@google.com>
|
||||
Signed-off-by: Eric Dumazet <edumazet@google.com>
|
||||
Cc: Paul Stewart <pstew@google.com>
|
||||
---
|
||||
v3: use regular memcpy(skb_put(...),...)
|
||||
v2: SMALL_PACKET_SIZE define
|
||||
|
||||
drivers/net/wireless/iwlegacy/3945.c | 31 +++++++++++++++----------
|
||||
1 file changed, 19 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/iwlegacy/3945.c b/drivers/net/wireless/iwlegacy/3945.c
|
||||
index c092033..f09e257 100644
|
||||
--- a/drivers/net/wireless/iwlegacy/3945.c
|
||||
+++ b/drivers/net/wireless/iwlegacy/3945.c
|
||||
@@ -475,6 +475,8 @@ il3945_is_network_packet(struct il_priv *il, struct ieee80211_hdr *header)
|
||||
}
|
||||
}
|
||||
|
||||
+#define SMALL_PACKET_SIZE 256
|
||||
+
|
||||
static void
|
||||
il3945_pass_packet_to_mac80211(struct il_priv *il, struct il_rx_buf *rxb,
|
||||
struct ieee80211_rx_status *stats)
|
||||
@@ -483,14 +485,13 @@ il3945_pass_packet_to_mac80211(struct il_priv *il, struct il_rx_buf *rxb,
|
||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)IL_RX_DATA(pkt);
|
||||
struct il3945_rx_frame_hdr *rx_hdr = IL_RX_HDR(pkt);
|
||||
struct il3945_rx_frame_end *rx_end = IL_RX_END(pkt);
|
||||
- u16 len = le16_to_cpu(rx_hdr->len);
|
||||
+ u32 len = le16_to_cpu(rx_hdr->len);
|
||||
struct sk_buff *skb;
|
||||
__le16 fc = hdr->frame_control;
|
||||
+ u32 fraglen = PAGE_SIZE << il->hw_params.rx_page_order;
|
||||
|
||||
/* We received data from the HW, so stop the watchdog */
|
||||
- if (unlikely
|
||||
- (len + IL39_RX_FRAME_SIZE >
|
||||
- PAGE_SIZE << il->hw_params.rx_page_order)) {
|
||||
+ if (unlikely(len + IL39_RX_FRAME_SIZE > fraglen)) {
|
||||
D_DROP("Corruption detected!\n");
|
||||
return;
|
||||
}
|
||||
@@ -506,26 +507,32 @@ il3945_pass_packet_to_mac80211(struct il_priv *il, struct il_rx_buf *rxb,
|
||||
D_INFO("Woke queues - frame received on passive channel\n");
|
||||
}
|
||||
|
||||
- skb = dev_alloc_skb(128);
|
||||
+ skb = dev_alloc_skb(SMALL_PACKET_SIZE);
|
||||
if (!skb) {
|
||||
IL_ERR("dev_alloc_skb failed\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!il3945_mod_params.sw_crypto)
|
||||
- il_set_decrypted_flag(il, (struct ieee80211_hdr *)rxb_addr(rxb),
|
||||
+ il_set_decrypted_flag(il, (struct ieee80211_hdr *)pkt,
|
||||
le32_to_cpu(rx_end->status), stats);
|
||||
|
||||
- skb_add_rx_frag(skb, 0, rxb->page,
|
||||
- (void *)rx_hdr->payload - (void *)pkt, len,
|
||||
- len);
|
||||
-
|
||||
+ /* If frame is small enough to fit into skb->head, copy it
|
||||
+ * and do not consume a full page
|
||||
+ */
|
||||
+ if (len <= SMALL_PACKET_SIZE) {
|
||||
+ memcpy(skb_put(skb, len), rx_hdr->payload, len);
|
||||
+ } else {
|
||||
+ skb_add_rx_frag(skb, 0, rxb->page,
|
||||
+ (void *)rx_hdr->payload - (void *)pkt, len,
|
||||
+ fraglen);
|
||||
+ il->alloc_rxb_page--;
|
||||
+ rxb->page = NULL;
|
||||
+ }
|
||||
il_update_stats(il, false, fc, len);
|
||||
memcpy(IEEE80211_SKB_RXCB(skb), stats, sizeof(*stats));
|
||||
|
||||
ieee80211_rx(il->hw, skb);
|
||||
- il->alloc_rxb_page--;
|
||||
- rxb->page = NULL;
|
||||
}
|
||||
|
||||
#define IL_DELAY_NEXT_SCAN_AFTER_ASSOC (HZ*6)
|
||||
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
4965 version of Eric patch "iwl3945: better skb management in rx path".
|
||||
It fixes several problems :
|
||||
|
||||
1) skb->truesize is underestimated.
|
||||
We really consume PAGE_SIZE bytes for a fragment,
|
||||
not the frame length.
|
||||
2) 128 bytes of initial headroom is a bit low and forces reallocations.
|
||||
3) We can avoid consuming a full page for small enough frames.
|
||||
|
||||
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||
---
|
||||
drivers/net/wireless/iwlegacy/4965-mac.c | 18 ++++++++++++------
|
||||
1 file changed, 12 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/iwlegacy/4965-mac.c b/drivers/net/wireless/iwlegacy/4965-mac.c
|
||||
index d287fd2..4e5d408 100644
|
||||
--- a/drivers/net/wireless/iwlegacy/4965-mac.c
|
||||
+++ b/drivers/net/wireless/iwlegacy/4965-mac.c
|
||||
@@ -574,9 +574,11 @@ il4965_translate_rx_status(struct il_priv *il, u32 decrypt_in)
|
||||
return decrypt_out;
|
||||
}
|
||||
|
||||
+#define SMALL_PACKET_SIZE 256
|
||||
+
|
||||
static void
|
||||
il4965_pass_packet_to_mac80211(struct il_priv *il, struct ieee80211_hdr *hdr,
|
||||
- u16 len, u32 ampdu_status, struct il_rx_buf *rxb,
|
||||
+ u32 len, u32 ampdu_status, struct il_rx_buf *rxb,
|
||||
struct ieee80211_rx_status *stats)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
@@ -598,21 +600,25 @@ il4965_pass_packet_to_mac80211(struct il_priv *il, struct ieee80211_hdr *hdr,
|
||||
il_set_decrypted_flag(il, hdr, ampdu_status, stats))
|
||||
return;
|
||||
|
||||
- skb = dev_alloc_skb(128);
|
||||
+ skb = dev_alloc_skb(SMALL_PACKET_SIZE);
|
||||
if (!skb) {
|
||||
IL_ERR("dev_alloc_skb failed\n");
|
||||
return;
|
||||
}
|
||||
|
||||
- skb_add_rx_frag(skb, 0, rxb->page, (void *)hdr - rxb_addr(rxb), len,
|
||||
- len);
|
||||
+ if (len <= SMALL_PACKET_SIZE) {
|
||||
+ memcpy(skb_put(skb, len), hdr, len);
|
||||
+ } else {
|
||||
+ skb_add_rx_frag(skb, 0, rxb->page, (void *)hdr - rxb_addr(rxb),
|
||||
+ len, PAGE_SIZE << il->hw_params.rx_page_order);
|
||||
+ il->alloc_rxb_page--;
|
||||
+ rxb->page = NULL;
|
||||
+ }
|
||||
|
||||
il_update_stats(il, false, fc, len);
|
||||
memcpy(IEEE80211_SKB_RXCB(skb), stats, sizeof(*stats));
|
||||
|
||||
ieee80211_rx(il->hw, skb);
|
||||
- il->alloc_rxb_page--;
|
||||
- rxb->page = NULL;
|
||||
}
|
||||
|
||||
/* Called for N_RX (legacy ABG frames), or
|
||||
--
|
||||
1.7.11.7
|
||||
|
|
@ -1,98 +0,0 @@
|
|||
From f6b129527ca15bae29ffb9417ddaa1c9d99ffc5d Mon Sep 17 00:00:00 2001
|
||||
From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
|
||||
Date: Tue, 15 Oct 2013 19:04:54 +0000
|
||||
Subject: iwlwifi: dvm: don't override mac80211's queue setting
|
||||
|
||||
Since we set IEEE80211_HW_QUEUE_CONTROL, we can let
|
||||
mac80211 do the queue assignement and don't need to
|
||||
override its decisions.
|
||||
While reassiging the same values is harmless of course,
|
||||
it triggered a WARNING when iwlwifi and mac80211 came
|
||||
to different conclusions. This happened when mac80211 set
|
||||
IEEE80211_TX_CTL_SEND_AFTER_DTIM, but didn't route the
|
||||
packet to the cab_queue because no stations were asleep.
|
||||
|
||||
iwlwifi should not override mac80211's decicions for
|
||||
offchannel packets and packets to be sent after DTIM,
|
||||
but it should override mac80211's decision for AMPDUs
|
||||
since we have a special queue for them. So for AMPDU,
|
||||
we still override info->hw_queue by the AMPDU queue.
|
||||
|
||||
This avoids:
|
||||
------------[ cut here ]------------
|
||||
WARNING: CPU: 0 PID: 2531 at drivers/net/wireless/iwlwifi/dvm/tx.c:456 iwlagn_tx_skb+0x6c5/0x883()
|
||||
Modules linked in:
|
||||
CPU: 0 PID: 2531 Comm: hostapd Not tainted 3.12.0-rc5+ #1
|
||||
Hardware name: /D53427RKE, BIOS RKPPT10H.86A.0017.2013.0425.1251 04/25/2013
|
||||
0000000000000000 0000000000000009 ffffffff8189aa62 0000000000000000
|
||||
ffffffff8105a4f2 ffff880058339a48 ffffffff815f8a04 0000000000000000
|
||||
ffff8800560097b0 0000000000000208 0000000000000000 ffff8800561a9e5e
|
||||
Call Trace:
|
||||
[<ffffffff8189aa62>] ? dump_stack+0x41/0x51
|
||||
[<ffffffff8105a4f2>] ? warn_slowpath_common+0x78/0x90
|
||||
[<ffffffff815f8a04>] ? iwlagn_tx_skb+0x6c5/0x883
|
||||
[<ffffffff815f8a04>] ? iwlagn_tx_skb+0x6c5/0x883
|
||||
[<ffffffff818a0040>] ? put_cred+0x15/0x15
|
||||
[<ffffffff815f6db4>] ? iwlagn_mac_tx+0x19/0x2f
|
||||
[<ffffffff8186cc45>] ? __ieee80211_tx+0x226/0x29b
|
||||
[<ffffffff8186e6bd>] ? ieee80211_tx+0xa6/0xb5
|
||||
[<ffffffff8186e98b>] ? ieee80211_monitor_start_xmit+0x1e9/0x204
|
||||
[<ffffffff8171ce5f>] ? dev_hard_start_xmit+0x271/0x3ec
|
||||
[<ffffffff817351ac>] ? sch_direct_xmit+0x66/0x164
|
||||
[<ffffffff8171d1bf>] ? dev_queue_xmit+0x1e5/0x3c8
|
||||
[<ffffffff817fac5a>] ? packet_sendmsg+0xac5/0xb3d
|
||||
[<ffffffff81709a09>] ? sock_sendmsg+0x37/0x52
|
||||
[<ffffffff810f9e0c>] ? __do_fault+0x338/0x36b
|
||||
[<ffffffff81713820>] ? verify_iovec+0x44/0x94
|
||||
[<ffffffff81709e63>] ? ___sys_sendmsg+0x1f1/0x283
|
||||
[<ffffffff81140a73>] ? __inode_wait_for_writeback+0x67/0xae
|
||||
[<ffffffff8111735e>] ? __cache_free.isra.46+0x178/0x187
|
||||
[<ffffffff811173b1>] ? kmem_cache_free+0x44/0x84
|
||||
[<ffffffff81132c22>] ? dentry_kill+0x13d/0x149
|
||||
[<ffffffff81132f6f>] ? dput+0xe5/0xef
|
||||
[<ffffffff81136e04>] ? fget_light+0x2e/0x7c
|
||||
[<ffffffff8170ae62>] ? __sys_sendmsg+0x39/0x57
|
||||
[<ffffffff818a7e39>] ? system_call_fastpath+0x16/0x1b
|
||||
---[ end trace 1b3eb79359c1d1e6 ]---
|
||||
|
||||
Reported-by: Sander Eikelenboom <linux@eikelenboom.it>
|
||||
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
|
||||
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
---
|
||||
diff --git a/drivers/net/wireless/iwlwifi/dvm/tx.c b/drivers/net/wireless/iwlwifi/dvm/tx.c
|
||||
index da442b8..1fef524 100644
|
||||
--- a/drivers/net/wireless/iwlwifi/dvm/tx.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/dvm/tx.c
|
||||
@@ -433,27 +433,19 @@ int iwlagn_tx_skb(struct iwl_priv *priv,
|
||||
/* Copy MAC header from skb into command buffer */
|
||||
memcpy(tx_cmd->hdr, hdr, hdr_len);
|
||||
|
||||
+ txq_id = info->hw_queue;
|
||||
+
|
||||
if (is_agg)
|
||||
txq_id = priv->tid_data[sta_id][tid].agg.txq_id;
|
||||
else if (info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM) {
|
||||
/*
|
||||
- * Send this frame after DTIM -- there's a special queue
|
||||
- * reserved for this for contexts that support AP mode.
|
||||
- */
|
||||
- txq_id = ctx->mcast_queue;
|
||||
-
|
||||
- /*
|
||||
* The microcode will clear the more data
|
||||
* bit in the last frame it transmits.
|
||||
*/
|
||||
hdr->frame_control |=
|
||||
cpu_to_le16(IEEE80211_FCTL_MOREDATA);
|
||||
- } else if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN)
|
||||
- txq_id = IWL_AUX_QUEUE;
|
||||
- else
|
||||
- txq_id = ctx->ac_to_queue[skb_get_queue_mapping(skb)];
|
||||
+ }
|
||||
|
||||
- WARN_ON_ONCE(!is_agg && txq_id != info->hw_queue);
|
||||
WARN_ON_ONCE(is_agg &&
|
||||
priv->queue_to_mac80211[txq_id] != info->hw_queue);
|
||||
|
||||
--
|
||||
cgit v0.9.2
|
238
kernel.spec
238
kernel.spec
|
@ -68,13 +68,13 @@ Summary: The Linux kernel
|
|||
# base_sublevel is the kernel version we're starting with and patching
|
||||
# on top of -- for example, 3.1-rc7-git1 starts with a 3.0 base,
|
||||
# which yields a base_sublevel of 0.
|
||||
%define base_sublevel 11
|
||||
%define base_sublevel 12
|
||||
|
||||
## If this is a released kernel ##
|
||||
%if 0%{?released_kernel}
|
||||
|
||||
# Do we have a -stable update to apply?
|
||||
%define stable_update 10
|
||||
%define stable_update 5
|
||||
# Is it a -stable RC?
|
||||
%define stable_rc 0
|
||||
# Set rpm version accordingly
|
||||
|
@ -631,10 +631,6 @@ Patch09: upstream-reverts.patch
|
|||
|
||||
# Standalone patches
|
||||
|
||||
Patch100: taint-vbox.patch
|
||||
|
||||
Patch110: vmbugon-warnon.patch
|
||||
|
||||
Patch390: defaults-acpi-video.patch
|
||||
|
||||
Patch450: input-kill-stupid-messages.patch
|
||||
|
@ -647,32 +643,28 @@ Patch470: die-floppy-die.patch
|
|||
Patch510: silence-noise.patch
|
||||
Patch530: silence-fbcon-logo.patch
|
||||
|
||||
Patch600: x86-allow-1024-cpus.patch
|
||||
|
||||
Patch800: crash-driver.patch
|
||||
|
||||
# crypto/
|
||||
|
||||
# keys
|
||||
|
||||
# secure boot
|
||||
Patch1000: devel-pekey-secure-boot-20130502.patch
|
||||
|
||||
# virt + ksm patches
|
||||
|
||||
# DRM
|
||||
#atch1700: drm-edid-try-harder-to-fix-up-broken-headers.patch
|
||||
#Patch1800: drm-vgem.patch
|
||||
|
||||
# nouveau + drm fixes
|
||||
# intel drm is all merged upstream
|
||||
Patch1824: drm-intel-next.patch
|
||||
# radeon drm fix
|
||||
|
||||
# Quiet boot fixes
|
||||
# silence the ACPI blacklist code
|
||||
Patch2802: silence-acpi-blacklist.patch
|
||||
|
||||
# media patches
|
||||
Patch2899: v4l-dvb-fixes.patch
|
||||
Patch2900: v4l-dvb-update.patch
|
||||
Patch2901: v4l-dvb-experimental.patch
|
||||
|
||||
# fs fixes
|
||||
|
||||
# NFSv4
|
||||
|
@ -688,17 +680,31 @@ Patch14010: lis3-improve-handling-of-null-rate.patch
|
|||
|
||||
Patch15000: nowatchdog-on-virt.patch
|
||||
|
||||
# ARM64
|
||||
|
||||
# ARM
|
||||
Patch21000: arm-export-read_current_timer.patch
|
||||
|
||||
# lpae
|
||||
Patch21001: arm-lpae-ax88796.patch
|
||||
Patch21004: arm-sound-soc-samsung-dma-avoid-another-64bit-division.patch
|
||||
|
||||
# ARM omap
|
||||
Patch21003: arm-omap-load-tfp410.patch
|
||||
Patch21010: arm-omap-load-tfp410.patch
|
||||
|
||||
# ARM tegra
|
||||
Patch21005: arm-tegra-usb-no-reset-linux33.patch
|
||||
Patch21020: arm-tegra-usb-no-reset-linux33.patch
|
||||
|
||||
# ARM i.MX6
|
||||
# http://www.spinics.net/lists/devicetree/msg08276.html
|
||||
Patch21025: arm-imx6-utilite.patch
|
||||
|
||||
# am33xx (BeagleBone)
|
||||
# https://github.com/beagleboard/kernel
|
||||
# Pulled primarily from the above git repo. First patch is all in arm-soc
|
||||
# scheduled for 3.13. The others should be landing via other trees
|
||||
Patch21030: arm-am33xx-arm-soc-upstream.patch
|
||||
Patch21031: arm-am33xx-bblack.patch
|
||||
Patch21032: arm-am33xx-cpsw.patch
|
||||
|
||||
#rhbz 754518
|
||||
Patch21235: scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
|
||||
|
@ -710,44 +716,10 @@ Patch21242: criu-no-expert.patch
|
|||
Patch21247: ath9k_rx_dma_stop_check.patch
|
||||
|
||||
Patch22000: weird-root-dentry-name-debug.patch
|
||||
Patch22010: debug-idle-sched-warn-once.patch
|
||||
|
||||
#rhbz 927469
|
||||
Patch23006: fix-child-thread-introspection.patch
|
||||
|
||||
Patch25047: drm-radeon-Disable-writeback-by-default-on-ppc.patch
|
||||
|
||||
#rhbz 977040
|
||||
Patch25056: iwl3945-better-skb-management-in-rx-path.patch
|
||||
Patch25057: iwl4965-better-skb-management-in-rx-path.patch
|
||||
|
||||
#rhbz 963715
|
||||
Patch25077: media-cx23885-Fix-TeVii-S471-regression-since-introduction-of-ts2020.patch
|
||||
|
||||
#rhbz 985522
|
||||
Patch25107: ntp-Make-periodic-RTC-update-more-reliable.patch
|
||||
|
||||
#rhbz 971893
|
||||
Patch25109: bonding-driver-alb-learning.patch
|
||||
|
||||
#rhbz 902012
|
||||
Patch25114: elevator-Fix-a-race-in-elevator-switching-and-md.patch
|
||||
Patch25115: elevator-acquire-q-sysfs_lock-in-elevator_change.patch
|
||||
|
||||
#rhbz 974072
|
||||
Patch25117: rt2800-add-support-for-rf3070.patch
|
||||
|
||||
#rhbz 1015989
|
||||
Patch25122: netfilter-nf_conntrack-use-RCU-safe-kfree-for-conntr.patch
|
||||
|
||||
#rhbz 982153
|
||||
Patch25123: iommu-Remove-stack-trace-from-broken-irq-remapping-warning.patch
|
||||
|
||||
#rhbz 998732
|
||||
Patch25125: vfio-iommu-Fixed-interaction-of-VFIO_IOMMU_MAP_DMA.patch
|
||||
|
||||
#rhbz 896695
|
||||
Patch25126: 0001-iwlwifi-don-t-WARN-on-host-commands-sent-when-firmwa.patch
|
||||
Patch25127: 0002-iwlwifi-don-t-WARN-on-bad-firmware-state.patch
|
||||
|
||||
#rhbz 993744
|
||||
|
@ -756,43 +728,11 @@ Patch25128: dm-cache-policy-mq_fix-large-scale-table-allocation-bug.patch
|
|||
#rhbz 1000439
|
||||
Patch25129: cpupower-Fix-segfault-due-to-incorrect-getopt_long-a.patch
|
||||
|
||||
#rhbz 1010679
|
||||
Patch25130: fix-radeon-sound.patch
|
||||
Patch25149: drm-radeon-24hz-audio-fixes.patch
|
||||
|
||||
#rhbz 984696
|
||||
Patch25132: rt2800usb-slow-down-TX-status-polling.patch
|
||||
|
||||
#rhbz 1023413
|
||||
Patch25135: alps-Support-for-Dell-XT2-model.patch
|
||||
|
||||
#rhbz 1011621
|
||||
Patch25137: cifs-Allow-LANMAN-auth-for-unencapsulated-auth-methods.patch
|
||||
|
||||
#rhbz 1025769
|
||||
Patch25142: iwlwifi-dvm-dont-override-mac80211-queue-setting.patch
|
||||
|
||||
Patch25143: drm-qxl-backport-fixes-for-Fedora.patch
|
||||
Patch25160: drm-qxl-fix-memory-leak-in-release-list-handling.patch
|
||||
|
||||
Patch25144: Input-evdev-fall-back-to-vmalloc-for-client-event-buffer.patch
|
||||
|
||||
#CVE-2013-4563 rhbz 1030015 1030017
|
||||
Patch25145: ipv6-fix-headroom-calculation-in-udp6_ufo_fragment.patch
|
||||
|
||||
#rhbz 1015905
|
||||
Patch25146: 0001-ip6_output-fragment-outgoing-reassembled-skb-properl.patch
|
||||
Patch25147: 0002-netfilter-push-reasm-skb-through-instead-of-original.patch
|
||||
Patch25140: drm-qxl-backport-fixes-for-Fedora.patch
|
||||
|
||||
#rhbz 1011362
|
||||
Patch25148: alx-Reset-phy-speed-after-resume.patch
|
||||
|
||||
#rhbz 1031086
|
||||
Patch25150: slab_common-Do-not-check-for-duplicate-slab-names.patch
|
||||
|
||||
#rhbz 967652
|
||||
Patch25151: KVM-x86-fix-emulation-of-movzbl-bpl-eax.patch
|
||||
|
||||
# Fix 15sec NFS mount delay
|
||||
Patch25152: sunrpc-create-a-new-dummy-pipe-for-gssd-to-hold-open.patch
|
||||
Patch25153: sunrpc-replace-gssd_running-with-more-reliable-check.patch
|
||||
|
@ -801,22 +741,9 @@ Patch25154: nfs-check-gssd-running-before-krb5i-auth.patch
|
|||
#CVE-2013-6382 rhbz 1033603 1034670
|
||||
Patch25157: xfs-underflow-bug-in-xfs_attrlist_by_handle.patch
|
||||
|
||||
#rhbz 1022733
|
||||
Patch25158: via-velocity-fix-netif_receive_skb-use-in-irq-disable.patch
|
||||
|
||||
#rhbz 998342
|
||||
Patch25159: usbnet-fix-status-interrupt-urb-handling.patch
|
||||
|
||||
#CVE-2013-6405 rhbz 1035875 1035887
|
||||
Patch25161: inet-prevent-leakage-of-uninitialized-memory-to-user.patch
|
||||
Patch25162: inet-fix-addr_len-msg_namelen-assignment-in-recv_error-and-rxpmtu-functions.patch
|
||||
|
||||
#rhbz 958826
|
||||
Patch25164: dell-laptop.patch
|
||||
|
||||
#CVE-2013-XXXX rhbz 1039845 1039874
|
||||
Patch25165: net-rework-recvmsg-handler-msg_name-and-msg_namelen-.patch
|
||||
|
||||
#rhbz 1030802
|
||||
Patch25170: Input-elantech-add-support-for-newer-August-2013-dev.patch
|
||||
Patch25171: elantech-Properly-differentiate-between-clickpads-an.patch
|
||||
|
@ -836,6 +763,9 @@ Patch25175: KVM-Improve-create-VCPU-parameter.patch
|
|||
#rhbz 1025770
|
||||
Patch25176: br-fix-use-of-rx_handler_data-in-code-executed-on-no.patch
|
||||
|
||||
#rhbz 1024002
|
||||
Patch25177: libata-implement-ATA_HORKAGE_NO_NCQ_TRIM-and-apply-it-to-Micro-M500-SSDs.patch
|
||||
|
||||
# END OF PATCH DEFINITIONS
|
||||
|
||||
%endif
|
||||
|
@ -1372,20 +1302,24 @@ ApplyOptionalPatch compile-fixes.patch
|
|||
# revert patches from upstream that conflict or that we get via other means
|
||||
ApplyOptionalPatch upstream-reverts.patch -R
|
||||
|
||||
ApplyPatch taint-vbox.patch
|
||||
|
||||
ApplyPatch vmbugon-warnon.patch
|
||||
|
||||
# Architecture patches
|
||||
# x86(-64)
|
||||
ApplyPatch x86-allow-1024-cpus.patch
|
||||
|
||||
# ARM64
|
||||
|
||||
#
|
||||
# ARM
|
||||
#
|
||||
ApplyPatch arm-export-read_current_timer.patch
|
||||
ApplyPatch arm-lpae-ax88796.patch
|
||||
ApplyPatch arm-sound-soc-samsung-dma-avoid-another-64bit-division.patch
|
||||
ApplyPatch arm-omap-load-tfp410.patch
|
||||
ApplyPatch arm-tegra-usb-no-reset-linux33.patch
|
||||
ApplyPatch arm-imx6-utilite.patch
|
||||
|
||||
ApplyPatch arm-am33xx-arm-soc-upstream.patch
|
||||
ApplyPatch arm-am33xx-bblack.patch
|
||||
ApplyPatch arm-am33xx-cpsw.patch
|
||||
|
||||
#
|
||||
# bugfixes to drivers and filesystems
|
||||
|
@ -1454,23 +1388,16 @@ ApplyPatch devel-pekey-secure-boot-20130502.patch
|
|||
# Assorted Virt Fixes
|
||||
|
||||
# DRM core
|
||||
#ApplyPatch drm-edid-try-harder-to-fix-up-broken-headers.patch
|
||||
#ApplyPatch drm-vgem.patch
|
||||
|
||||
# Nouveau DRM
|
||||
|
||||
# Intel DRM
|
||||
ApplyOptionalPatch drm-intel-next.patch
|
||||
|
||||
# Radeon DRM
|
||||
|
||||
# silence the ACPI blacklist code
|
||||
ApplyPatch silence-acpi-blacklist.patch
|
||||
|
||||
# V4L/DVB updates/fixes/experimental drivers
|
||||
# apply if non-empty
|
||||
ApplyOptionalPatch v4l-dvb-fixes.patch
|
||||
ApplyOptionalPatch v4l-dvb-update.patch
|
||||
ApplyOptionalPatch v4l-dvb-experimental.patch
|
||||
|
||||
# Patches headed upstream
|
||||
ApplyPatch fs-proc-devtree-remove_proc_entry.patch
|
||||
|
||||
|
@ -1487,8 +1414,7 @@ ApplyPatch nowatchdog-on-virt.patch
|
|||
#rhbz 754518
|
||||
ApplyPatch scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
|
||||
|
||||
ApplyPatch weird-root-dentry-name-debug.patch
|
||||
ApplyPatch debug-idle-sched-warn-once.patch
|
||||
#pplyPatch weird-root-dentry-name-debug.patch
|
||||
|
||||
# https://fedoraproject.org/wiki/Features/Checkpoint_Restore
|
||||
ApplyPatch criu-no-expert.patch
|
||||
|
@ -1496,42 +1422,9 @@ ApplyPatch criu-no-expert.patch
|
|||
#rhbz 892811
|
||||
ApplyPatch ath9k_rx_dma_stop_check.patch
|
||||
|
||||
#rhbz 927469
|
||||
ApplyPatch fix-child-thread-introspection.patch
|
||||
|
||||
ApplyPatch drm-radeon-Disable-writeback-by-default-on-ppc.patch
|
||||
|
||||
#rhbz 977040
|
||||
ApplyPatch iwl3945-better-skb-management-in-rx-path.patch
|
||||
ApplyPatch iwl4965-better-skb-management-in-rx-path.patch
|
||||
|
||||
#rhbz 963715
|
||||
ApplyPatch media-cx23885-Fix-TeVii-S471-regression-since-introduction-of-ts2020.patch
|
||||
|
||||
#rhbz 985522
|
||||
ApplyPatch ntp-Make-periodic-RTC-update-more-reliable.patch
|
||||
|
||||
#rhbz 971893
|
||||
ApplyPatch bonding-driver-alb-learning.patch
|
||||
|
||||
#rhbz 902012
|
||||
ApplyPatch elevator-Fix-a-race-in-elevator-switching-and-md.patch
|
||||
ApplyPatch elevator-acquire-q-sysfs_lock-in-elevator_change.patch
|
||||
|
||||
#rhbz 974072
|
||||
ApplyPatch rt2800-add-support-for-rf3070.patch
|
||||
|
||||
#rhbz 1015989
|
||||
ApplyPatch netfilter-nf_conntrack-use-RCU-safe-kfree-for-conntr.patch
|
||||
|
||||
#rhbz 982153
|
||||
ApplyPatch iommu-Remove-stack-trace-from-broken-irq-remapping-warning.patch
|
||||
|
||||
#rhbz 998732
|
||||
ApplyPatch vfio-iommu-Fixed-interaction-of-VFIO_IOMMU_MAP_DMA.patch
|
||||
|
||||
#rhbz 896695
|
||||
ApplyPatch 0001-iwlwifi-don-t-WARN-on-host-commands-sent-when-firmwa.patch
|
||||
ApplyPatch 0002-iwlwifi-don-t-WARN-on-bad-firmware-state.patch
|
||||
|
||||
#rhbz 993744
|
||||
|
@ -1540,43 +1433,11 @@ ApplyPatch dm-cache-policy-mq_fix-large-scale-table-allocation-bug.patch
|
|||
#rhbz 1000439
|
||||
ApplyPatch cpupower-Fix-segfault-due-to-incorrect-getopt_long-a.patch
|
||||
|
||||
#rhbz 1010679
|
||||
ApplyPatch fix-radeon-sound.patch
|
||||
ApplyPatch drm-radeon-24hz-audio-fixes.patch
|
||||
|
||||
#rhbz 984696
|
||||
ApplyPatch rt2800usb-slow-down-TX-status-polling.patch
|
||||
|
||||
#rhbz 1023413
|
||||
ApplyPatch alps-Support-for-Dell-XT2-model.patch
|
||||
|
||||
#rhbz 1011621
|
||||
ApplyPatch cifs-Allow-LANMAN-auth-for-unencapsulated-auth-methods.patch
|
||||
|
||||
#rhbz 1025769
|
||||
ApplyPatch iwlwifi-dvm-dont-override-mac80211-queue-setting.patch
|
||||
|
||||
ApplyPatch drm-qxl-backport-fixes-for-Fedora.patch
|
||||
ApplyPatch drm-qxl-fix-memory-leak-in-release-list-handling.patch
|
||||
|
||||
ApplyPatch Input-evdev-fall-back-to-vmalloc-for-client-event-buffer.patch
|
||||
|
||||
#CVE-2013-4563 rhbz 1030015 1030017
|
||||
ApplyPatch ipv6-fix-headroom-calculation-in-udp6_ufo_fragment.patch
|
||||
|
||||
#rhbz 1015905
|
||||
ApplyPatch 0001-ip6_output-fragment-outgoing-reassembled-skb-properl.patch
|
||||
ApplyPatch 0002-netfilter-push-reasm-skb-through-instead-of-original.patch
|
||||
|
||||
#rhbz 1011362
|
||||
ApplyPatch alx-Reset-phy-speed-after-resume.patch
|
||||
|
||||
#rhbz 1031086
|
||||
ApplyPatch slab_common-Do-not-check-for-duplicate-slab-names.patch
|
||||
|
||||
#rhbz 967652
|
||||
ApplyPatch KVM-x86-fix-emulation-of-movzbl-bpl-eax.patch
|
||||
|
||||
# Fix 15sec NFS mount delay
|
||||
ApplyPatch sunrpc-create-a-new-dummy-pipe-for-gssd-to-hold-open.patch
|
||||
ApplyPatch sunrpc-replace-gssd_running-with-more-reliable-check.patch
|
||||
|
@ -1585,22 +1446,9 @@ ApplyPatch nfs-check-gssd-running-before-krb5i-auth.patch
|
|||
#CVE-2013-6382 rhbz 1033603 1034670
|
||||
ApplyPatch xfs-underflow-bug-in-xfs_attrlist_by_handle.patch
|
||||
|
||||
#rhbz 1022733
|
||||
ApplyPatch via-velocity-fix-netif_receive_skb-use-in-irq-disable.patch
|
||||
|
||||
#rhbz 998342
|
||||
ApplyPatch usbnet-fix-status-interrupt-urb-handling.patch
|
||||
|
||||
#CVE-2013-6405 rhbz 1035875 1035887
|
||||
ApplyPatch inet-prevent-leakage-of-uninitialized-memory-to-user.patch
|
||||
ApplyPatch inet-fix-addr_len-msg_namelen-assignment-in-recv_error-and-rxpmtu-functions.patch
|
||||
|
||||
#rhbz 958826
|
||||
ApplyPatch dell-laptop.patch
|
||||
|
||||
#CVE-2013-XXXX rhbz 1039845 1039874
|
||||
ApplyPatch net-rework-recvmsg-handler-msg_name-and-msg_namelen-.patch
|
||||
|
||||
#rhbz 1030802
|
||||
ApplyPatch Input-elantech-add-support-for-newer-August-2013-dev.patch
|
||||
ApplyPatch elantech-Properly-differentiate-between-clickpads-an.patch
|
||||
|
@ -1620,6 +1468,9 @@ ApplyPatch KVM-Improve-create-VCPU-parameter.patch
|
|||
#rhbz 1025770
|
||||
ApplyPatch br-fix-use-of-rx_handler_data-in-code-executed-on-no.patch
|
||||
|
||||
#rhbz 1024002
|
||||
ApplyPatch libata-implement-ATA_HORKAGE_NO_NCQ_TRIM-and-apply-it-to-Micro-M500-SSDs.patch
|
||||
|
||||
# END OF PATCH APPLICATIONS
|
||||
|
||||
%endif
|
||||
|
@ -2432,6 +2283,9 @@ fi
|
|||
# and build.
|
||||
|
||||
%changelog
|
||||
* Tue Dec 17 2013 Justin M. Forbes <jforbes@fedoraproject.org - 3.12.5-200
|
||||
- Linux v3.12.5 rebase
|
||||
|
||||
* Mon Dec 16 2013 Josh Boyer <jwboyer@fedoraproject.org>
|
||||
- Fix host lockup in bridge code when starting from virt guest (rhbz 1025770)
|
||||
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
Bugzilla: 1024002
|
||||
Upstream-status: Should hit 3.13 and CC'd to 3.12 stable
|
||||
|
||||
From f78dea064c5f7de07de4912a6e5136dbc443d614 Mon Sep 17 00:00:00 2001
|
||||
From: Marc Carino <marc.ceeeee@gmail.com>
|
||||
Date: Tue, 17 Dec 2013 02:15:53 +0000
|
||||
Subject: libata: implement ATA_HORKAGE_NO_NCQ_TRIM and apply it to Micro M500 SSDs
|
||||
|
||||
Certain drives cannot handle queued TRIM commands properly, even
|
||||
though support is indicated in the IDENTIFY DEVICE buffer. This patch
|
||||
allows for disabling the commands for the affected drives and apply it
|
||||
to the Micron/Crucial M500 SSDs which exhibit incorrect protocol
|
||||
behavior when issued queued TRIM commands, which could lead to silent
|
||||
data corruption.
|
||||
|
||||
tj: Merged two unnecessarily split patches and made minor edits
|
||||
including shortening horkage name.
|
||||
|
||||
Signed-off-by: Marc Carino <marc.ceeeee@gmail.com>
|
||||
Signed-off-by: Tejun Heo <tj@kernel.org>
|
||||
Link: http://lkml.kernel.org/g/1387246554-7311-1-git-send-email-marc.ceeeee@gmail.com
|
||||
Cc: stable@vger.kernel.org # 3.12+
|
||||
---
|
||||
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
|
||||
index ff01584..1393a58 100644
|
||||
--- a/drivers/ata/libata-core.c
|
||||
+++ b/drivers/ata/libata-core.c
|
||||
@@ -2149,9 +2149,16 @@ static int ata_dev_config_ncq(struct ata_device *dev,
|
||||
"failed to get NCQ Send/Recv Log Emask 0x%x\n",
|
||||
err_mask);
|
||||
} else {
|
||||
+ u8 *cmds = dev->ncq_send_recv_cmds;
|
||||
+
|
||||
dev->flags |= ATA_DFLAG_NCQ_SEND_RECV;
|
||||
- memcpy(dev->ncq_send_recv_cmds, ap->sector_buf,
|
||||
- ATA_LOG_NCQ_SEND_RECV_SIZE);
|
||||
+ memcpy(cmds, ap->sector_buf, ATA_LOG_NCQ_SEND_RECV_SIZE);
|
||||
+
|
||||
+ if (dev->horkage & ATA_HORKAGE_NO_NCQ_TRIM) {
|
||||
+ ata_dev_dbg(dev, "disabling queued TRIM support\n");
|
||||
+ cmds[ATA_LOG_NCQ_SEND_RECV_DSM_OFFSET] &=
|
||||
+ ~ATA_LOG_NCQ_SEND_RECV_DSM_TRIM;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4205,6 +4212,10 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
|
||||
{ "PIONEER DVD-RW DVR-212D", NULL, ATA_HORKAGE_NOSETXFER },
|
||||
{ "PIONEER DVD-RW DVR-216D", NULL, ATA_HORKAGE_NOSETXFER },
|
||||
|
||||
+ /* devices that don't properly handle queued TRIM commands */
|
||||
+ { "Micron_M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, },
|
||||
+ { "Crucial_CT???M500SSD1", NULL, ATA_HORKAGE_NO_NCQ_TRIM, },
|
||||
+
|
||||
/* End Marker */
|
||||
{ }
|
||||
};
|
||||
diff --git a/include/linux/libata.h b/include/linux/libata.h
|
||||
index 0e23c26..9b50337 100644
|
||||
--- a/include/linux/libata.h
|
||||
+++ b/include/linux/libata.h
|
||||
@@ -418,6 +418,7 @@ enum {
|
||||
ATA_HORKAGE_DUMP_ID = (1 << 16), /* dump IDENTIFY data */
|
||||
ATA_HORKAGE_MAX_SEC_LBA48 = (1 << 17), /* Set max sects to 65535 */
|
||||
ATA_HORKAGE_ATAPI_DMADIR = (1 << 18), /* device requires dmadir */
|
||||
+ ATA_HORKAGE_NO_NCQ_TRIM = (1 << 19), /* don't use queued TRIM */
|
||||
|
||||
/* DMA mask for user DMA control: User visible values; DO NOT
|
||||
renumber */
|
||||
--
|
||||
cgit v0.9.2
|
|
@ -1,30 +0,0 @@
|
|||
From b43ea8068d2090cb1e44632c8a938ab40d2c7419 Mon Sep 17 00:00:00 2001
|
||||
From: Johannes Koch <johannes@ortsraum.de>
|
||||
Date: Wed, 17 Jul 2013 17:28:16 +0000
|
||||
Subject: [media] cx23885: Fix TeVii S471 regression since introduction of ts2020
|
||||
|
||||
Patch to make TeVii S471 cards use the ts2020 tuner, since ds3000 driver no
|
||||
longer contains tuning code.
|
||||
|
||||
Signed-off-by: Johannes Koch <johannes@ortsraum.de>
|
||||
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
|
||||
---
|
||||
(limited to 'drivers/media/pci/cx23885/cx23885-dvb.c')
|
||||
|
||||
diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c
|
||||
index 9c5ed10..bb291c6 100644
|
||||
--- a/drivers/media/pci/cx23885/cx23885-dvb.c
|
||||
+++ b/drivers/media/pci/cx23885/cx23885-dvb.c
|
||||
@@ -1249,6 +1249,10 @@ static int dvb_register(struct cx23885_tsport *port)
|
||||
fe0->dvb.frontend = dvb_attach(ds3000_attach,
|
||||
&tevii_ds3000_config,
|
||||
&i2c_bus->i2c_adap);
|
||||
+ if (fe0->dvb.frontend != NULL) {
|
||||
+ dvb_attach(ts2020_attach, fe0->dvb.frontend,
|
||||
+ &tevii_ts2020_config, &i2c_bus->i2c_adap);
|
||||
+ }
|
||||
break;
|
||||
case CX23885_BOARD_PROF_8000:
|
||||
i2c_bus = &dev->i2c_bus[0];
|
||||
--
|
||||
cgit v0.9.2
|
|
@ -0,0 +1,621 @@
|
|||
From 0a5e59dd7a921f20d77b13aa4e01392086ddbd12 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Howells <dhowells@redhat.com>
|
||||
Date: Tue, 23 Oct 2012 09:30:54 -0400
|
||||
Subject: [PATCH 1/5] Add EFI signature data types
|
||||
|
||||
Add the data types that are used for containing hashes, keys and certificates
|
||||
for cryptographic verification.
|
||||
|
||||
Signed-off-by: David Howells <dhowells@redhat.com>
|
||||
---
|
||||
include/linux/efi.h | 20 ++++++++++++++++++++
|
||||
1 file changed, 20 insertions(+)
|
||||
|
||||
diff --git a/include/linux/efi.h b/include/linux/efi.h
|
||||
index eed2202..1da1b3c 100644
|
||||
--- a/include/linux/efi.h
|
||||
+++ b/include/linux/efi.h
|
||||
@@ -389,6 +389,12 @@ typedef efi_status_t efi_query_variable_store_t(u32 attributes, unsigned long si
|
||||
#define EFI_FILE_SYSTEM_GUID \
|
||||
EFI_GUID( 0x964e5b22, 0x6459, 0x11d2, 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b )
|
||||
|
||||
+#define EFI_CERT_SHA256_GUID \
|
||||
+ EFI_GUID( 0xc1c41626, 0x504c, 0x4092, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28 )
|
||||
+
|
||||
+#define EFI_CERT_X509_GUID \
|
||||
+ EFI_GUID( 0xa5c059a1, 0x94e4, 0x4aa7, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72 )
|
||||
+
|
||||
typedef struct {
|
||||
efi_guid_t guid;
|
||||
u64 table;
|
||||
@@ -524,6 +530,20 @@ typedef struct {
|
||||
|
||||
#define EFI_INVALID_TABLE_ADDR (~0UL)
|
||||
|
||||
+typedef struct {
|
||||
+ efi_guid_t signature_owner;
|
||||
+ u8 signature_data[];
|
||||
+} efi_signature_data_t;
|
||||
+
|
||||
+typedef struct {
|
||||
+ efi_guid_t signature_type;
|
||||
+ u32 signature_list_size;
|
||||
+ u32 signature_header_size;
|
||||
+ u32 signature_size;
|
||||
+ u8 signature_header[];
|
||||
+ /* efi_signature_data_t signatures[][] */
|
||||
+} efi_signature_list_t;
|
||||
+
|
||||
/*
|
||||
* All runtime access to EFI goes through this structure:
|
||||
*/
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From 8b75428a7e1813cd3bc225a959e63d67898e4808 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Howells <dhowells@redhat.com>
|
||||
Date: Tue, 23 Oct 2012 09:36:28 -0400
|
||||
Subject: [PATCH 2/5] Add an EFI signature blob parser and key loader.
|
||||
|
||||
X.509 certificates are loaded into the specified keyring as asymmetric type
|
||||
keys.
|
||||
|
||||
Signed-off-by: David Howells <dhowells@redhat.com>
|
||||
---
|
||||
crypto/asymmetric_keys/Kconfig | 8 +++
|
||||
crypto/asymmetric_keys/Makefile | 1 +
|
||||
crypto/asymmetric_keys/efi_parser.c | 109 ++++++++++++++++++++++++++++++++++++
|
||||
include/linux/efi.h | 4 ++
|
||||
4 files changed, 122 insertions(+)
|
||||
create mode 100644 crypto/asymmetric_keys/efi_parser.c
|
||||
|
||||
diff --git a/crypto/asymmetric_keys/Kconfig b/crypto/asymmetric_keys/Kconfig
|
||||
index 6d2c2ea..ace9c30 100644
|
||||
--- a/crypto/asymmetric_keys/Kconfig
|
||||
+++ b/crypto/asymmetric_keys/Kconfig
|
||||
@@ -35,4 +35,12 @@ config X509_CERTIFICATE_PARSER
|
||||
data and provides the ability to instantiate a crypto key from a
|
||||
public key packet found inside the certificate.
|
||||
|
||||
+config EFI_SIGNATURE_LIST_PARSER
|
||||
+ bool "EFI signature list parser"
|
||||
+ depends on EFI
|
||||
+ select X509_CERTIFICATE_PARSER
|
||||
+ help
|
||||
+ This option provides support for parsing EFI signature lists for
|
||||
+ X.509 certificates and turning them into keys.
|
||||
+
|
||||
endif # ASYMMETRIC_KEY_TYPE
|
||||
diff --git a/crypto/asymmetric_keys/Makefile b/crypto/asymmetric_keys/Makefile
|
||||
index 0727204..cd8388e 100644
|
||||
--- a/crypto/asymmetric_keys/Makefile
|
||||
+++ b/crypto/asymmetric_keys/Makefile
|
||||
@@ -8,6 +8,7 @@ asymmetric_keys-y := asymmetric_type.o signature.o
|
||||
|
||||
obj-$(CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE) += public_key.o
|
||||
obj-$(CONFIG_PUBLIC_KEY_ALGO_RSA) += rsa.o
|
||||
+obj-$(CONFIG_EFI_SIGNATURE_LIST_PARSER) += efi_parser.o
|
||||
|
||||
#
|
||||
# X.509 Certificate handling
|
||||
diff --git a/crypto/asymmetric_keys/efi_parser.c b/crypto/asymmetric_keys/efi_parser.c
|
||||
new file mode 100644
|
||||
index 0000000..424896a
|
||||
--- /dev/null
|
||||
+++ b/crypto/asymmetric_keys/efi_parser.c
|
||||
@@ -0,0 +1,109 @@
|
||||
+/* EFI signature/key/certificate list parser
|
||||
+ *
|
||||
+ * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved.
|
||||
+ * Written by David Howells (dhowells@redhat.com)
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU General Public Licence
|
||||
+ * as published by the Free Software Foundation; either version
|
||||
+ * 2 of the Licence, or (at your option) any later version.
|
||||
+ */
|
||||
+
|
||||
+#define pr_fmt(fmt) "EFI: "fmt
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/printk.h>
|
||||
+#include <linux/err.h>
|
||||
+#include <linux/efi.h>
|
||||
+#include <keys/asymmetric-type.h>
|
||||
+
|
||||
+static __initdata efi_guid_t efi_cert_x509_guid = EFI_CERT_X509_GUID;
|
||||
+
|
||||
+/**
|
||||
+ * parse_efi_signature_list - Parse an EFI signature list for certificates
|
||||
+ * @data: The data blob to parse
|
||||
+ * @size: The size of the data blob
|
||||
+ * @keyring: The keyring to add extracted keys to
|
||||
+ */
|
||||
+int __init parse_efi_signature_list(const void *data, size_t size, struct key *keyring)
|
||||
+{
|
||||
+ unsigned offs = 0;
|
||||
+ size_t lsize, esize, hsize, elsize;
|
||||
+
|
||||
+ pr_devel("-->%s(,%zu)\n", __func__, size);
|
||||
+
|
||||
+ while (size > 0) {
|
||||
+ efi_signature_list_t list;
|
||||
+ const efi_signature_data_t *elem;
|
||||
+ key_ref_t key;
|
||||
+
|
||||
+ if (size < sizeof(list))
|
||||
+ return -EBADMSG;
|
||||
+
|
||||
+ memcpy(&list, data, sizeof(list));
|
||||
+ pr_devel("LIST[%04x] guid=%pUl ls=%x hs=%x ss=%x\n",
|
||||
+ offs,
|
||||
+ list.signature_type.b, list.signature_list_size,
|
||||
+ list.signature_header_size, list.signature_size);
|
||||
+
|
||||
+ lsize = list.signature_list_size;
|
||||
+ hsize = list.signature_header_size;
|
||||
+ esize = list.signature_size;
|
||||
+ elsize = lsize - sizeof(list) - hsize;
|
||||
+
|
||||
+ if (lsize > size) {
|
||||
+ pr_devel("<--%s() = -EBADMSG [overrun @%x]\n",
|
||||
+ __func__, offs);
|
||||
+ return -EBADMSG;
|
||||
+ }
|
||||
+ if (lsize < sizeof(list) ||
|
||||
+ lsize - sizeof(list) < hsize ||
|
||||
+ esize < sizeof(*elem) ||
|
||||
+ elsize < esize ||
|
||||
+ elsize % esize != 0) {
|
||||
+ pr_devel("- bad size combo @%x\n", offs);
|
||||
+ return -EBADMSG;
|
||||
+ }
|
||||
+
|
||||
+ if (efi_guidcmp(list.signature_type, efi_cert_x509_guid) != 0) {
|
||||
+ data += lsize;
|
||||
+ size -= lsize;
|
||||
+ offs += lsize;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ data += sizeof(list) + hsize;
|
||||
+ size -= sizeof(list) + hsize;
|
||||
+ offs += sizeof(list) + hsize;
|
||||
+
|
||||
+ for (; elsize > 0; elsize -= esize) {
|
||||
+ elem = data;
|
||||
+
|
||||
+ pr_devel("ELEM[%04x]\n", offs);
|
||||
+
|
||||
+ key = key_create_or_update(
|
||||
+ make_key_ref(keyring, 1),
|
||||
+ "asymmetric",
|
||||
+ NULL,
|
||||
+ &elem->signature_data,
|
||||
+ esize - sizeof(*elem),
|
||||
+ (KEY_POS_ALL & ~KEY_POS_SETATTR) |
|
||||
+ KEY_USR_VIEW,
|
||||
+ KEY_ALLOC_NOT_IN_QUOTA |
|
||||
+ KEY_ALLOC_TRUSTED);
|
||||
+
|
||||
+ if (IS_ERR(key))
|
||||
+ pr_err("Problem loading in-kernel X.509 certificate (%ld)\n",
|
||||
+ PTR_ERR(key));
|
||||
+ else
|
||||
+ pr_notice("Loaded cert '%s' linked to '%s'\n",
|
||||
+ key_ref_to_ptr(key)->description,
|
||||
+ keyring->description);
|
||||
+
|
||||
+ data += esize;
|
||||
+ size -= esize;
|
||||
+ offs += esize;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/include/linux/efi.h b/include/linux/efi.h
|
||||
index 1da1b3c..42a1d25 100644
|
||||
--- a/include/linux/efi.h
|
||||
+++ b/include/linux/efi.h
|
||||
@@ -619,6 +619,10 @@ extern int efi_set_rtc_mmss(const struct timespec *now);
|
||||
extern void efi_reserve_boot_services(void);
|
||||
extern struct efi_memory_map memmap;
|
||||
|
||||
+struct key;
|
||||
+extern int __init parse_efi_signature_list(const void *data, size_t size,
|
||||
+ struct key *keyring);
|
||||
+
|
||||
/**
|
||||
* efi_range_is_wc - check the WC bit on an address range
|
||||
* @start: starting kvirt address
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From 920108c0f9cc5854dd329a5dfc904e91d40a4b26 Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
Date: Fri, 26 Oct 2012 12:36:24 -0400
|
||||
Subject: [PATCH 3/5] KEYS: Add a system blacklist keyring
|
||||
|
||||
This adds an additional keyring that is used to store certificates that
|
||||
are blacklisted. This keyring is searched first when loading signed modules
|
||||
and if the module's certificate is found, it will refuse to load. This is
|
||||
useful in cases where third party certificates are used for module signing.
|
||||
|
||||
Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
---
|
||||
include/keys/system_keyring.h | 4 ++++
|
||||
init/Kconfig | 9 +++++++++
|
||||
kernel/module_signing.c | 12 ++++++++++++
|
||||
kernel/system_keyring.c | 17 +++++++++++++++++
|
||||
4 files changed, 42 insertions(+)
|
||||
|
||||
diff --git a/include/keys/system_keyring.h b/include/keys/system_keyring.h
|
||||
index 8dabc39..e466de1 100644
|
||||
--- a/include/keys/system_keyring.h
|
||||
+++ b/include/keys/system_keyring.h
|
||||
@@ -18,6 +18,10 @@
|
||||
|
||||
extern struct key *system_trusted_keyring;
|
||||
|
||||
+#ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING
|
||||
+extern struct key *system_blacklist_keyring;
|
||||
+#endif
|
||||
+
|
||||
#endif
|
||||
|
||||
#endif /* _KEYS_SYSTEM_KEYRING_H */
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
index 0ff5407..ba76e57 100644
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1680,6 +1680,15 @@ config SYSTEM_TRUSTED_KEYRING
|
||||
|
||||
Keys in this keyring are used by module signature checking.
|
||||
|
||||
+config SYSTEM_BLACKLIST_KEYRING
|
||||
+ bool "Provide system-wide ring of blacklisted keys"
|
||||
+ depends on KEYS
|
||||
+ help
|
||||
+ Provide a system keyring to which blacklisted keys can be added. Keys
|
||||
+ in the keyring are considered entirely untrusted. Keys in this keyring
|
||||
+ are used by the module signature checking to reject loading of modules
|
||||
+ signed with a blacklisted key.
|
||||
+
|
||||
menuconfig MODULES
|
||||
bool "Enable loadable module support"
|
||||
option modules
|
||||
diff --git a/kernel/module_signing.c b/kernel/module_signing.c
|
||||
index 0b6b870..0a29b40 100644
|
||||
--- a/kernel/module_signing.c
|
||||
+++ b/kernel/module_signing.c
|
||||
@@ -158,6 +158,18 @@ static struct key *request_asymmetric_key(const char *signer, size_t signer_len,
|
||||
|
||||
pr_debug("Look up: \"%s\"\n", id);
|
||||
|
||||
+#ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING
|
||||
+ key = keyring_search(make_key_ref(system_blacklist_keyring, 1),
|
||||
+ &key_type_asymmetric, id);
|
||||
+ if (!IS_ERR(key)) {
|
||||
+ /* module is signed with a cert in the blacklist. reject */
|
||||
+ pr_err("Module key '%s' is in blacklist\n", id);
|
||||
+ key_ref_put(key);
|
||||
+ kfree(id);
|
||||
+ return ERR_PTR(-EKEYREJECTED);
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
key = keyring_search(make_key_ref(system_trusted_keyring, 1),
|
||||
&key_type_asymmetric, id);
|
||||
if (IS_ERR(key))
|
||||
diff --git a/kernel/system_keyring.c b/kernel/system_keyring.c
|
||||
index 564dd93..389b50d 100644
|
||||
--- a/kernel/system_keyring.c
|
||||
+++ b/kernel/system_keyring.c
|
||||
@@ -20,6 +20,9 @@
|
||||
|
||||
struct key *system_trusted_keyring;
|
||||
EXPORT_SYMBOL_GPL(system_trusted_keyring);
|
||||
+#ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING
|
||||
+struct key *system_blacklist_keyring;
|
||||
+#endif
|
||||
|
||||
extern __initconst const u8 system_certificate_list[];
|
||||
extern __initconst const u8 system_certificate_list_end[];
|
||||
@@ -41,6 +44,20 @@ static __init int system_trusted_keyring_init(void)
|
||||
panic("Can't allocate system trusted keyring\n");
|
||||
|
||||
set_bit(KEY_FLAG_TRUSTED_ONLY, &system_trusted_keyring->flags);
|
||||
+
|
||||
+#ifdef CONFIG_SYSTEM_BLACKLIST_KEYRING
|
||||
+ system_blacklist_keyring = keyring_alloc(".system_blacklist_keyring",
|
||||
+ KUIDT_INIT(0), KGIDT_INIT(0),
|
||||
+ current_cred(),
|
||||
+ (KEY_POS_ALL & ~KEY_POS_SETATTR) |
|
||||
+ KEY_USR_VIEW | KEY_USR_READ,
|
||||
+ KEY_ALLOC_NOT_IN_QUOTA, NULL);
|
||||
+ if (IS_ERR(system_blacklist_keyring))
|
||||
+ panic("Can't allocate system blacklist keyring\n");
|
||||
+
|
||||
+ set_bit(KEY_FLAG_TRUSTED_ONLY, &system_blacklist_keyring->flags);
|
||||
+#endif
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From 69dca9998380c1931227a01205cdf23c34509753 Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
Date: Fri, 26 Oct 2012 12:42:16 -0400
|
||||
Subject: [PATCH 4/5] MODSIGN: Import certificates from UEFI Secure Boot
|
||||
|
||||
Secure Boot stores a list of allowed certificates in the 'db' variable.
|
||||
This imports those certificates into the system trusted keyring. This
|
||||
allows for a third party signing certificate to be used in conjunction
|
||||
with signed modules. By importing the public certificate into the 'db'
|
||||
variable, a user can allow a module signed with that certificate to
|
||||
load. The shim UEFI bootloader has a similar certificate list stored
|
||||
in the 'MokListRT' variable. We import those as well.
|
||||
|
||||
In the opposite case, Secure Boot maintains a list of disallowed
|
||||
certificates in the 'dbx' variable. We load those certificates into
|
||||
the newly introduced system blacklist keyring and forbid any module
|
||||
signed with those from loading.
|
||||
|
||||
Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
---
|
||||
include/linux/efi.h | 6 ++++
|
||||
init/Kconfig | 9 +++++
|
||||
kernel/Makefile | 3 ++
|
||||
kernel/modsign_uefi.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
4 files changed, 110 insertions(+)
|
||||
create mode 100644 kernel/modsign_uefi.c
|
||||
|
||||
diff --git a/include/linux/efi.h b/include/linux/efi.h
|
||||
index 42a1d25..d3e6036 100644
|
||||
--- a/include/linux/efi.h
|
||||
+++ b/include/linux/efi.h
|
||||
@@ -395,6 +395,12 @@ typedef efi_status_t efi_query_variable_store_t(u32 attributes, unsigned long si
|
||||
#define EFI_CERT_X509_GUID \
|
||||
EFI_GUID( 0xa5c059a1, 0x94e4, 0x4aa7, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72 )
|
||||
|
||||
+#define EFI_IMAGE_SECURITY_DATABASE_GUID \
|
||||
+ EFI_GUID( 0xd719b2cb, 0x3d3a, 0x4596, 0xa3, 0xbc, 0xda, 0xd0, 0x0e, 0x67, 0x65, 0x6f )
|
||||
+
|
||||
+#define EFI_SHIM_LOCK_GUID \
|
||||
+ EFI_GUID( 0x605dab50, 0xe046, 0x4300, 0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23 )
|
||||
+
|
||||
typedef struct {
|
||||
efi_guid_t guid;
|
||||
u64 table;
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
index ba76e57..b09cd98 100644
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1799,6 +1799,15 @@ config MODULE_SIG_ALL
|
||||
comment "Do not forget to sign required modules with scripts/sign-file"
|
||||
depends on MODULE_SIG_FORCE && !MODULE_SIG_ALL
|
||||
|
||||
+config MODULE_SIG_UEFI
|
||||
+ bool "Allow modules signed with certs stored in UEFI"
|
||||
+ depends on MODULE_SIG && SYSTEM_BLACKLIST_KEYRING && EFI
|
||||
+ select EFI_SIGNATURE_LIST_PARSER
|
||||
+ help
|
||||
+ This will import certificates stored in UEFI and allow modules
|
||||
+ signed with those to be loaded. It will also disallow loading
|
||||
+ of modules stored in the UEFI dbx variable.
|
||||
+
|
||||
choice
|
||||
prompt "Which hash algorithm should modules be signed with?"
|
||||
depends on MODULE_SIG
|
||||
diff --git a/kernel/Makefile b/kernel/Makefile
|
||||
index 6313698..cb35a89 100644
|
||||
--- a/kernel/Makefile
|
||||
+++ b/kernel/Makefile
|
||||
@@ -57,6 +57,7 @@ obj-$(CONFIG_UID16) += uid16.o
|
||||
obj-$(CONFIG_SYSTEM_TRUSTED_KEYRING) += system_keyring.o system_certificates.o
|
||||
obj-$(CONFIG_MODULES) += module.o
|
||||
obj-$(CONFIG_MODULE_SIG) += module_signing.o
|
||||
+obj-$(CONFIG_MODULE_SIG_UEFI) += modsign_uefi.o
|
||||
obj-$(CONFIG_KALLSYMS) += kallsyms.o
|
||||
obj-$(CONFIG_BSD_PROCESS_ACCT) += acct.o
|
||||
obj-$(CONFIG_KEXEC) += kexec.o
|
||||
@@ -115,6 +116,8 @@ obj-$(CONFIG_CONTEXT_TRACKING) += context_tracking.o
|
||||
|
||||
$(obj)/configs.o: $(obj)/config_data.h
|
||||
|
||||
+$(obj)/modsign_uefi.o: KBUILD_CFLAGS += -fshort-wchar
|
||||
+
|
||||
# config_data.h contains the same information as ikconfig.h but gzipped.
|
||||
# Info from config_data can be extracted from /proc/config*
|
||||
targets += config_data.gz
|
||||
diff --git a/kernel/modsign_uefi.c b/kernel/modsign_uefi.c
|
||||
new file mode 100644
|
||||
index 0000000..94b0eb3
|
||||
--- /dev/null
|
||||
+++ b/kernel/modsign_uefi.c
|
||||
@@ -0,0 +1,92 @@
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/sched.h>
|
||||
+#include <linux/cred.h>
|
||||
+#include <linux/err.h>
|
||||
+#include <linux/efi.h>
|
||||
+#include <linux/slab.h>
|
||||
+#include <keys/asymmetric-type.h>
|
||||
+#include <keys/system_keyring.h>
|
||||
+#include "module-internal.h"
|
||||
+
|
||||
+static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, unsigned long *size)
|
||||
+{
|
||||
+ efi_status_t status;
|
||||
+ unsigned long lsize = 4;
|
||||
+ unsigned long tmpdb[4];
|
||||
+ void *db = NULL;
|
||||
+
|
||||
+ status = efi.get_variable(name, guid, NULL, &lsize, &tmpdb);
|
||||
+ if (status != EFI_BUFFER_TOO_SMALL) {
|
||||
+ pr_err("Couldn't get size: 0x%lx\n", status);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ db = kmalloc(lsize, GFP_KERNEL);
|
||||
+ if (!db) {
|
||||
+ pr_err("Couldn't allocate memory for uefi cert list\n");
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ status = efi.get_variable(name, guid, NULL, &lsize, db);
|
||||
+ if (status != EFI_SUCCESS) {
|
||||
+ kfree(db);
|
||||
+ db = NULL;
|
||||
+ pr_err("Error reading db var: 0x%lx\n", status);
|
||||
+ }
|
||||
+out:
|
||||
+ *size = lsize;
|
||||
+ return db;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * * Load the certs contained in the UEFI databases
|
||||
+ * */
|
||||
+static int __init load_uefi_certs(void)
|
||||
+{
|
||||
+ efi_guid_t secure_var = EFI_IMAGE_SECURITY_DATABASE_GUID;
|
||||
+ efi_guid_t mok_var = EFI_SHIM_LOCK_GUID;
|
||||
+ void *db = NULL, *dbx = NULL, *mok = NULL;
|
||||
+ unsigned long dbsize = 0, dbxsize = 0, moksize = 0;
|
||||
+ int rc = 0;
|
||||
+
|
||||
+ /* Check if SB is enabled and just return if not */
|
||||
+ if (!efi_enabled(EFI_SECURE_BOOT))
|
||||
+ return 0;
|
||||
+
|
||||
+ /* Get db, MokListRT, and dbx. They might not exist, so it isn't
|
||||
+ * an error if we can't get them.
|
||||
+ */
|
||||
+ db = get_cert_list(L"db", &secure_var, &dbsize);
|
||||
+ if (!db) {
|
||||
+ pr_err("MODSIGN: Couldn't get UEFI db list\n");
|
||||
+ } else {
|
||||
+ rc = parse_efi_signature_list(db, dbsize, system_trusted_keyring);
|
||||
+ if (rc)
|
||||
+ pr_err("Couldn't parse db signatures: %d\n", rc);
|
||||
+ kfree(db);
|
||||
+ }
|
||||
+
|
||||
+ mok = get_cert_list(L"MokListRT", &mok_var, &moksize);
|
||||
+ if (!mok) {
|
||||
+ pr_info("MODSIGN: Couldn't get UEFI MokListRT\n");
|
||||
+ } else {
|
||||
+ rc = parse_efi_signature_list(mok, moksize, system_trusted_keyring);
|
||||
+ if (rc)
|
||||
+ pr_err("Couldn't parse MokListRT signatures: %d\n", rc);
|
||||
+ kfree(mok);
|
||||
+ }
|
||||
+
|
||||
+ dbx = get_cert_list(L"dbx", &secure_var, &dbxsize);
|
||||
+ if (!dbx) {
|
||||
+ pr_info("MODSIGN: Couldn't get UEFI dbx list\n");
|
||||
+ } else {
|
||||
+ rc = parse_efi_signature_list(dbx, dbxsize,
|
||||
+ system_blacklist_keyring);
|
||||
+ if (rc)
|
||||
+ pr_err("Couldn't parse dbx signatures: %d\n", rc);
|
||||
+ kfree(dbx);
|
||||
+ }
|
||||
+
|
||||
+ return rc;
|
||||
+}
|
||||
+late_initcall(load_uefi_certs);
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From c8e6d256ddfa2182d5b011a4ab70f8c5c9b2b590 Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
Date: Thu, 3 Oct 2013 10:14:23 -0400
|
||||
Subject: [PATCH 5/5] MODSIGN: Support not importing certs from db
|
||||
|
||||
If a user tells shim to not use the certs/hashes in the UEFI db variable
|
||||
for verification purposes, shim will set a UEFI variable called MokIgnoreDB.
|
||||
Have the uefi import code look for this and not import things from the db
|
||||
variable.
|
||||
|
||||
Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
---
|
||||
kernel/modsign_uefi.c | 40 +++++++++++++++++++++++++++++++---------
|
||||
1 file changed, 31 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/kernel/modsign_uefi.c b/kernel/modsign_uefi.c
|
||||
index 94b0eb3..ae28b97 100644
|
||||
--- a/kernel/modsign_uefi.c
|
||||
+++ b/kernel/modsign_uefi.c
|
||||
@@ -8,6 +8,23 @@
|
||||
#include <keys/system_keyring.h>
|
||||
#include "module-internal.h"
|
||||
|
||||
+static __init int check_ignore_db(void)
|
||||
+{
|
||||
+ efi_status_t status;
|
||||
+ unsigned int db = 0;
|
||||
+ unsigned long size = sizeof(db);
|
||||
+ efi_guid_t guid = EFI_SHIM_LOCK_GUID;
|
||||
+
|
||||
+ /* Check and see if the MokIgnoreDB variable exists. If that fails
|
||||
+ * then we don't ignore DB. If it succeeds, we do.
|
||||
+ */
|
||||
+ status = efi.get_variable(L"MokIgnoreDB", &guid, NULL, &size, &db);
|
||||
+ if (status != EFI_SUCCESS)
|
||||
+ return 0;
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid, unsigned long *size)
|
||||
{
|
||||
efi_status_t status;
|
||||
@@ -47,23 +64,28 @@ static int __init load_uefi_certs(void)
|
||||
efi_guid_t mok_var = EFI_SHIM_LOCK_GUID;
|
||||
void *db = NULL, *dbx = NULL, *mok = NULL;
|
||||
unsigned long dbsize = 0, dbxsize = 0, moksize = 0;
|
||||
- int rc = 0;
|
||||
+ int ignore_db, rc = 0;
|
||||
|
||||
/* Check if SB is enabled and just return if not */
|
||||
if (!efi_enabled(EFI_SECURE_BOOT))
|
||||
return 0;
|
||||
|
||||
+ /* See if the user has setup Ignore DB mode */
|
||||
+ ignore_db = check_ignore_db();
|
||||
+
|
||||
/* Get db, MokListRT, and dbx. They might not exist, so it isn't
|
||||
* an error if we can't get them.
|
||||
*/
|
||||
- db = get_cert_list(L"db", &secure_var, &dbsize);
|
||||
- if (!db) {
|
||||
- pr_err("MODSIGN: Couldn't get UEFI db list\n");
|
||||
- } else {
|
||||
- rc = parse_efi_signature_list(db, dbsize, system_trusted_keyring);
|
||||
- if (rc)
|
||||
- pr_err("Couldn't parse db signatures: %d\n", rc);
|
||||
- kfree(db);
|
||||
+ if (!ignore_db) {
|
||||
+ db = get_cert_list(L"db", &secure_var, &dbsize);
|
||||
+ if (!db) {
|
||||
+ pr_err("MODSIGN: Couldn't get UEFI db list\n");
|
||||
+ } else {
|
||||
+ rc = parse_efi_signature_list(db, dbsize, system_trusted_keyring);
|
||||
+ if (rc)
|
||||
+ pr_err("Couldn't parse db signatures: %d\n", rc);
|
||||
+ kfree(db);
|
||||
+ }
|
||||
}
|
||||
|
||||
mok = get_cert_list(L"MokListRT", &mok_var, &moksize);
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -1,774 +0,0 @@
|
|||
Bugzilla: 1039874
|
||||
Upstream-status: 3.13 and 3.12.4
|
||||
|
||||
From 9cb9fb275f8794546dc31a79f2f02127fed5baf2 Mon Sep 17 00:00:00 2001
|
||||
From: Hannes Frederic Sowa <hannes@stressinduktion.org>
|
||||
Date: Thu, 21 Nov 2013 03:14:22 +0100
|
||||
Subject: [PATCH] net: rework recvmsg handler msg_name and msg_namelen logic
|
||||
|
||||
[ Upstream commit f3d3342602f8bcbf37d7c46641cb9bca7618eb1c ]
|
||||
|
||||
This patch now always passes msg->msg_namelen as 0. recvmsg handlers must
|
||||
set msg_namelen to the proper size <= sizeof(struct sockaddr_storage)
|
||||
to return msg_name to the user.
|
||||
|
||||
This prevents numerous uninitialized memory leaks we had in the
|
||||
recvmsg handlers and makes it harder for new code to accidentally leak
|
||||
uninitialized memory.
|
||||
|
||||
Optimize for the case recvfrom is called with NULL as address. We don't
|
||||
need to copy the address at all, so set it to NULL before invoking the
|
||||
recvmsg handler. We can do so, because all the recvmsg handlers must
|
||||
cope with the case a plain read() is called on them. read() also sets
|
||||
msg_name to NULL.
|
||||
|
||||
Also document these changes in include/linux/net.h as suggested by David
|
||||
Miller.
|
||||
|
||||
Changes since RFC:
|
||||
|
||||
Set msg->msg_name = NULL if user specified a NULL in msg_name but had a
|
||||
non-null msg_namelen in verify_iovec/verify_compat_iovec. This doesn't
|
||||
affect sendto as it would bail out earlier while trying to copy-in the
|
||||
address. It also more naturally reflects the logic by the callers of
|
||||
verify_iovec.
|
||||
|
||||
With this change in place I could remove "
|
||||
if (!uaddr || msg_sys->msg_namelen == 0)
|
||||
msg->msg_name = NULL
|
||||
".
|
||||
|
||||
This change does not alter the user visible error logic as we ignore
|
||||
msg_namelen as long as msg_name is NULL.
|
||||
|
||||
Also remove two unnecessary curly brackets in ___sys_recvmsg and change
|
||||
comments to netdev style.
|
||||
|
||||
Cc: David Miller <davem@davemloft.net>
|
||||
Suggested-by: Eric Dumazet <eric.dumazet@gmail.com>
|
||||
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
crypto/algif_hash.c | 2 --
|
||||
crypto/algif_skcipher.c | 1 -
|
||||
drivers/isdn/mISDN/socket.c | 13 ++++---------
|
||||
drivers/net/ppp/pppoe.c | 2 --
|
||||
include/linux/net.h | 8 ++++++++
|
||||
net/appletalk/ddp.c | 16 +++++++---------
|
||||
net/atm/common.c | 2 --
|
||||
net/ax25/af_ax25.c | 4 ++--
|
||||
net/bluetooth/af_bluetooth.c | 4 ----
|
||||
net/bluetooth/hci_sock.c | 2 --
|
||||
net/bluetooth/rfcomm/sock.c | 1 -
|
||||
net/bluetooth/sco.c | 1 -
|
||||
net/caif/caif_socket.c | 4 ----
|
||||
net/compat.c | 3 ++-
|
||||
net/core/iovec.c | 3 ++-
|
||||
net/ipx/af_ipx.c | 3 +--
|
||||
net/irda/af_irda.c | 4 ----
|
||||
net/iucv/af_iucv.c | 2 --
|
||||
net/key/af_key.c | 1 -
|
||||
net/l2tp/l2tp_ppp.c | 2 --
|
||||
net/llc/af_llc.c | 2 --
|
||||
net/netlink/af_netlink.c | 2 --
|
||||
net/netrom/af_netrom.c | 3 +--
|
||||
net/nfc/llcp_sock.c | 2 --
|
||||
net/nfc/rawsock.c | 2 --
|
||||
net/packet/af_packet.c | 32 +++++++++++++++-----------------
|
||||
net/rds/recv.c | 2 --
|
||||
net/rose/af_rose.c | 8 +++++---
|
||||
net/rxrpc/ar-recvmsg.c | 9 ++++++---
|
||||
net/socket.c | 19 +++++++++++--------
|
||||
net/tipc/socket.c | 6 ------
|
||||
net/unix/af_unix.c | 5 -----
|
||||
net/vmw_vsock/af_vsock.c | 2 --
|
||||
net/vmw_vsock/vmci_transport.c | 2 --
|
||||
net/x25/af_x25.c | 3 +--
|
||||
35 files changed, 65 insertions(+), 112 deletions(-)
|
||||
|
||||
diff --git a/crypto/algif_hash.c b/crypto/algif_hash.c
|
||||
index 0262210..ef5356c 100644
|
||||
--- a/crypto/algif_hash.c
|
||||
+++ b/crypto/algif_hash.c
|
||||
@@ -161,8 +161,6 @@ static int hash_recvmsg(struct kiocb *unused, struct socket *sock,
|
||||
else if (len < ds)
|
||||
msg->msg_flags |= MSG_TRUNC;
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
lock_sock(sk);
|
||||
if (ctx->more) {
|
||||
ctx->more = 0;
|
||||
diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c
|
||||
index a1c4f0a..6a6dfc0 100644
|
||||
--- a/crypto/algif_skcipher.c
|
||||
+++ b/crypto/algif_skcipher.c
|
||||
@@ -432,7 +432,6 @@ static int skcipher_recvmsg(struct kiocb *unused, struct socket *sock,
|
||||
long copied = 0;
|
||||
|
||||
lock_sock(sk);
|
||||
- msg->msg_namelen = 0;
|
||||
for (iov = msg->msg_iov, iovlen = msg->msg_iovlen; iovlen > 0;
|
||||
iovlen--, iov++) {
|
||||
unsigned long seglen = iov->iov_len;
|
||||
diff --git a/drivers/isdn/mISDN/socket.c b/drivers/isdn/mISDN/socket.c
|
||||
index e47dcb9..5cefb47 100644
|
||||
--- a/drivers/isdn/mISDN/socket.c
|
||||
+++ b/drivers/isdn/mISDN/socket.c
|
||||
@@ -117,7 +117,6 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
struct sock *sk = sock->sk;
|
||||
- struct sockaddr_mISDN *maddr;
|
||||
|
||||
int copied, err;
|
||||
|
||||
@@ -135,9 +134,9 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (!skb)
|
||||
return err;
|
||||
|
||||
- if (msg->msg_namelen >= sizeof(struct sockaddr_mISDN)) {
|
||||
- msg->msg_namelen = sizeof(struct sockaddr_mISDN);
|
||||
- maddr = (struct sockaddr_mISDN *)msg->msg_name;
|
||||
+ if (msg->msg_name) {
|
||||
+ struct sockaddr_mISDN *maddr = msg->msg_name;
|
||||
+
|
||||
maddr->family = AF_ISDN;
|
||||
maddr->dev = _pms(sk)->dev->id;
|
||||
if ((sk->sk_protocol == ISDN_P_LAPD_TE) ||
|
||||
@@ -150,11 +149,7 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
maddr->sapi = _pms(sk)->ch.addr & 0xFF;
|
||||
maddr->tei = (_pms(sk)->ch.addr >> 8) & 0xFF;
|
||||
}
|
||||
- } else {
|
||||
- if (msg->msg_namelen)
|
||||
- printk(KERN_WARNING "%s: too small namelen %d\n",
|
||||
- __func__, msg->msg_namelen);
|
||||
- msg->msg_namelen = 0;
|
||||
+ msg->msg_namelen = sizeof(*maddr);
|
||||
}
|
||||
|
||||
copied = skb->len + MISDN_HEADER_LEN;
|
||||
diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c
|
||||
index 5f66e30..82ee6ed 100644
|
||||
--- a/drivers/net/ppp/pppoe.c
|
||||
+++ b/drivers/net/ppp/pppoe.c
|
||||
@@ -979,8 +979,6 @@ static int pppoe_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (error < 0)
|
||||
goto end;
|
||||
|
||||
- m->msg_namelen = 0;
|
||||
-
|
||||
if (skb) {
|
||||
total_len = min_t(size_t, total_len, skb->len);
|
||||
error = skb_copy_datagram_iovec(skb, 0, m->msg_iov, total_len);
|
||||
diff --git a/include/linux/net.h b/include/linux/net.h
|
||||
index 4f27575..8bd9d92 100644
|
||||
--- a/include/linux/net.h
|
||||
+++ b/include/linux/net.h
|
||||
@@ -163,6 +163,14 @@ struct proto_ops {
|
||||
#endif
|
||||
int (*sendmsg) (struct kiocb *iocb, struct socket *sock,
|
||||
struct msghdr *m, size_t total_len);
|
||||
+ /* Notes for implementing recvmsg:
|
||||
+ * ===============================
|
||||
+ * msg->msg_namelen should get updated by the recvmsg handlers
|
||||
+ * iff msg_name != NULL. It is by default 0 to prevent
|
||||
+ * returning uninitialized memory to user space. The recvfrom
|
||||
+ * handlers can assume that msg.msg_name is either NULL or has
|
||||
+ * a minimum size of sizeof(struct sockaddr_storage).
|
||||
+ */
|
||||
int (*recvmsg) (struct kiocb *iocb, struct socket *sock,
|
||||
struct msghdr *m, size_t total_len,
|
||||
int flags);
|
||||
diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c
|
||||
index 7fee50d..7d424ac 100644
|
||||
--- a/net/appletalk/ddp.c
|
||||
+++ b/net/appletalk/ddp.c
|
||||
@@ -1735,7 +1735,6 @@ static int atalk_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr
|
||||
size_t size, int flags)
|
||||
{
|
||||
struct sock *sk = sock->sk;
|
||||
- struct sockaddr_at *sat = (struct sockaddr_at *)msg->msg_name;
|
||||
struct ddpehdr *ddp;
|
||||
int copied = 0;
|
||||
int offset = 0;
|
||||
@@ -1764,14 +1763,13 @@ static int atalk_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr
|
||||
}
|
||||
err = skb_copy_datagram_iovec(skb, offset, msg->msg_iov, copied);
|
||||
|
||||
- if (!err) {
|
||||
- if (sat) {
|
||||
- sat->sat_family = AF_APPLETALK;
|
||||
- sat->sat_port = ddp->deh_sport;
|
||||
- sat->sat_addr.s_node = ddp->deh_snode;
|
||||
- sat->sat_addr.s_net = ddp->deh_snet;
|
||||
- }
|
||||
- msg->msg_namelen = sizeof(*sat);
|
||||
+ if (!err && msg->msg_name) {
|
||||
+ struct sockaddr_at *sat = msg->msg_name;
|
||||
+ sat->sat_family = AF_APPLETALK;
|
||||
+ sat->sat_port = ddp->deh_sport;
|
||||
+ sat->sat_addr.s_node = ddp->deh_snode;
|
||||
+ sat->sat_addr.s_net = ddp->deh_snet;
|
||||
+ msg->msg_namelen = sizeof(*sat);
|
||||
}
|
||||
|
||||
skb_free_datagram(sk, skb); /* Free the datagram. */
|
||||
diff --git a/net/atm/common.c b/net/atm/common.c
|
||||
index 737bef5..7b49100 100644
|
||||
--- a/net/atm/common.c
|
||||
+++ b/net/atm/common.c
|
||||
@@ -531,8 +531,6 @@ int vcc_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
|
||||
struct sk_buff *skb;
|
||||
int copied, error = -EINVAL;
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
if (sock->state != SS_CONNECTED)
|
||||
return -ENOTCONN;
|
||||
|
||||
diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
|
||||
index 4b4d2b7..78c474f 100644
|
||||
--- a/net/ax25/af_ax25.c
|
||||
+++ b/net/ax25/af_ax25.c
|
||||
@@ -1636,11 +1636,11 @@ static int ax25_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
|
||||
skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
|
||||
|
||||
- if (msg->msg_namelen != 0) {
|
||||
- struct sockaddr_ax25 *sax = (struct sockaddr_ax25 *)msg->msg_name;
|
||||
+ if (msg->msg_name) {
|
||||
ax25_digi digi;
|
||||
ax25_address src;
|
||||
const unsigned char *mac = skb_mac_header(skb);
|
||||
+ struct sockaddr_ax25 *sax = msg->msg_name;
|
||||
|
||||
memset(sax, 0, sizeof(struct full_sockaddr_ax25));
|
||||
ax25_addr_parse(mac + 1, skb->data - mac - 1, &src, NULL,
|
||||
diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c
|
||||
index 9096137..6629cdc 100644
|
||||
--- a/net/bluetooth/af_bluetooth.c
|
||||
+++ b/net/bluetooth/af_bluetooth.c
|
||||
@@ -221,8 +221,6 @@ int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (flags & (MSG_OOB))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
skb = skb_recv_datagram(sk, flags, noblock, &err);
|
||||
if (!skb) {
|
||||
if (sk->sk_shutdown & RCV_SHUTDOWN)
|
||||
@@ -287,8 +285,6 @@ int bt_sock_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (flags & MSG_OOB)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
BT_DBG("sk %p size %zu", sk, size);
|
||||
|
||||
lock_sock(sk);
|
||||
diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c
|
||||
index 9bd7d95..fa4bf66 100644
|
||||
--- a/net/bluetooth/hci_sock.c
|
||||
+++ b/net/bluetooth/hci_sock.c
|
||||
@@ -752,8 +752,6 @@ static int hci_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (!skb)
|
||||
return err;
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
copied = skb->len;
|
||||
if (len < copied) {
|
||||
msg->msg_flags |= MSG_TRUNC;
|
||||
diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c
|
||||
index 30b3721..c1c6028 100644
|
||||
--- a/net/bluetooth/rfcomm/sock.c
|
||||
+++ b/net/bluetooth/rfcomm/sock.c
|
||||
@@ -608,7 +608,6 @@ static int rfcomm_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
|
||||
if (test_and_clear_bit(RFCOMM_DEFER_SETUP, &d->flags)) {
|
||||
rfcomm_dlc_accept(d);
|
||||
- msg->msg_namelen = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c
|
||||
index e7bd4ee..2bb1d3a 100644
|
||||
--- a/net/bluetooth/sco.c
|
||||
+++ b/net/bluetooth/sco.c
|
||||
@@ -700,7 +700,6 @@ static int sco_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
|
||||
sco_conn_defer_accept(pi->conn->hcon, 0);
|
||||
sk->sk_state = BT_CONFIG;
|
||||
- msg->msg_namelen = 0;
|
||||
|
||||
release_sock(sk);
|
||||
return 0;
|
||||
diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c
|
||||
index 05a41c7..d6be3ed 100644
|
||||
--- a/net/caif/caif_socket.c
|
||||
+++ b/net/caif/caif_socket.c
|
||||
@@ -286,8 +286,6 @@ static int caif_seqpkt_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (m->msg_flags&MSG_OOB)
|
||||
goto read_error;
|
||||
|
||||
- m->msg_namelen = 0;
|
||||
-
|
||||
skb = skb_recv_datagram(sk, flags, 0 , &ret);
|
||||
if (!skb)
|
||||
goto read_error;
|
||||
@@ -361,8 +359,6 @@ static int caif_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (flags&MSG_OOB)
|
||||
goto out;
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
/*
|
||||
* Lock the socket to prevent queue disordering
|
||||
* while sleeps in memcpy_tomsg
|
||||
diff --git a/net/compat.c b/net/compat.c
|
||||
index 8903258..618c6a8 100644
|
||||
--- a/net/compat.c
|
||||
+++ b/net/compat.c
|
||||
@@ -93,7 +93,8 @@ int verify_compat_iovec(struct msghdr *kern_msg, struct iovec *kern_iov,
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
- kern_msg->msg_name = kern_address;
|
||||
+ if (kern_msg->msg_name)
|
||||
+ kern_msg->msg_name = kern_address;
|
||||
} else
|
||||
kern_msg->msg_name = NULL;
|
||||
|
||||
diff --git a/net/core/iovec.c b/net/core/iovec.c
|
||||
index de178e4..9a31515 100644
|
||||
--- a/net/core/iovec.c
|
||||
+++ b/net/core/iovec.c
|
||||
@@ -48,7 +48,8 @@ int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr_storage *a
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
- m->msg_name = address;
|
||||
+ if (m->msg_name)
|
||||
+ m->msg_name = address;
|
||||
} else {
|
||||
m->msg_name = NULL;
|
||||
}
|
||||
diff --git a/net/ipx/af_ipx.c b/net/ipx/af_ipx.c
|
||||
index 7a1e0fc..e096025 100644
|
||||
--- a/net/ipx/af_ipx.c
|
||||
+++ b/net/ipx/af_ipx.c
|
||||
@@ -1823,8 +1823,6 @@ static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (skb->tstamp.tv64)
|
||||
sk->sk_stamp = skb->tstamp;
|
||||
|
||||
- msg->msg_namelen = sizeof(*sipx);
|
||||
-
|
||||
if (sipx) {
|
||||
sipx->sipx_family = AF_IPX;
|
||||
sipx->sipx_port = ipx->ipx_source.sock;
|
||||
@@ -1832,6 +1830,7 @@ static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
sipx->sipx_network = IPX_SKB_CB(skb)->ipx_source_net;
|
||||
sipx->sipx_type = ipx->ipx_type;
|
||||
sipx->sipx_zero = 0;
|
||||
+ msg->msg_namelen = sizeof(*sipx);
|
||||
}
|
||||
rc = copied;
|
||||
|
||||
diff --git a/net/irda/af_irda.c b/net/irda/af_irda.c
|
||||
index 0578d4f..a5e62ef5 100644
|
||||
--- a/net/irda/af_irda.c
|
||||
+++ b/net/irda/af_irda.c
|
||||
@@ -1385,8 +1385,6 @@ static int irda_recvmsg_dgram(struct kiocb *iocb, struct socket *sock,
|
||||
|
||||
IRDA_DEBUG(4, "%s()\n", __func__);
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
|
||||
flags & MSG_DONTWAIT, &err);
|
||||
if (!skb)
|
||||
@@ -1451,8 +1449,6 @@ static int irda_recvmsg_stream(struct kiocb *iocb, struct socket *sock,
|
||||
target = sock_rcvlowat(sk, flags & MSG_WAITALL, size);
|
||||
timeo = sock_rcvtimeo(sk, noblock);
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
do {
|
||||
int chunk;
|
||||
struct sk_buff *skb = skb_dequeue(&sk->sk_receive_queue);
|
||||
diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
|
||||
index 168aff5..c4b7218 100644
|
||||
--- a/net/iucv/af_iucv.c
|
||||
+++ b/net/iucv/af_iucv.c
|
||||
@@ -1324,8 +1324,6 @@ static int iucv_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
int err = 0;
|
||||
u32 offset;
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
if ((sk->sk_state == IUCV_DISCONN) &&
|
||||
skb_queue_empty(&iucv->backlog_skb_q) &&
|
||||
skb_queue_empty(&sk->sk_receive_queue) &&
|
||||
diff --git a/net/key/af_key.c b/net/key/af_key.c
|
||||
index ab8bd2c..66f51c5 100644
|
||||
--- a/net/key/af_key.c
|
||||
+++ b/net/key/af_key.c
|
||||
@@ -3623,7 +3623,6 @@ static int pfkey_recvmsg(struct kiocb *kiocb,
|
||||
if (flags & ~(MSG_PEEK|MSG_DONTWAIT|MSG_TRUNC|MSG_CMSG_COMPAT))
|
||||
goto out;
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
skb = skb_recv_datagram(sk, flags, flags & MSG_DONTWAIT, &err);
|
||||
if (skb == NULL)
|
||||
goto out;
|
||||
diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c
|
||||
index 8c46b27..44441c0 100644
|
||||
--- a/net/l2tp/l2tp_ppp.c
|
||||
+++ b/net/l2tp/l2tp_ppp.c
|
||||
@@ -197,8 +197,6 @@ static int pppol2tp_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (sk->sk_state & PPPOX_BOUND)
|
||||
goto end;
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
err = 0;
|
||||
skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
|
||||
flags & MSG_DONTWAIT, &err);
|
||||
diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c
|
||||
index 48aaa89..8870988 100644
|
||||
--- a/net/llc/af_llc.c
|
||||
+++ b/net/llc/af_llc.c
|
||||
@@ -720,8 +720,6 @@ static int llc_ui_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
int target; /* Read at least this many bytes */
|
||||
long timeo;
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
lock_sock(sk);
|
||||
copied = -ENOTCONN;
|
||||
if (unlikely(sk->sk_type == SOCK_STREAM && sk->sk_state == TCP_LISTEN))
|
||||
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
|
||||
index 0c61b59..90b654b 100644
|
||||
--- a/net/netlink/af_netlink.c
|
||||
+++ b/net/netlink/af_netlink.c
|
||||
@@ -2317,8 +2317,6 @@ static int netlink_recvmsg(struct kiocb *kiocb, struct socket *sock,
|
||||
}
|
||||
#endif
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
copied = data_skb->len;
|
||||
if (len < copied) {
|
||||
msg->msg_flags |= MSG_TRUNC;
|
||||
diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c
|
||||
index 698814b..53c19a3 100644
|
||||
--- a/net/netrom/af_netrom.c
|
||||
+++ b/net/netrom/af_netrom.c
|
||||
@@ -1179,10 +1179,9 @@ static int nr_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
sax->sax25_family = AF_NETROM;
|
||||
skb_copy_from_linear_data_offset(skb, 7, sax->sax25_call.ax25_call,
|
||||
AX25_ADDR_LEN);
|
||||
+ msg->msg_namelen = sizeof(*sax);
|
||||
}
|
||||
|
||||
- msg->msg_namelen = sizeof(*sax);
|
||||
-
|
||||
skb_free_datagram(sk, skb);
|
||||
|
||||
release_sock(sk);
|
||||
diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c
|
||||
index d308402..824c605 100644
|
||||
--- a/net/nfc/llcp_sock.c
|
||||
+++ b/net/nfc/llcp_sock.c
|
||||
@@ -807,8 +807,6 @@ static int llcp_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
|
||||
pr_debug("%p %zu\n", sk, len);
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
lock_sock(sk);
|
||||
|
||||
if (sk->sk_state == LLCP_CLOSED &&
|
||||
diff --git a/net/nfc/rawsock.c b/net/nfc/rawsock.c
|
||||
index 313bf1b..5d11f4a 100644
|
||||
--- a/net/nfc/rawsock.c
|
||||
+++ b/net/nfc/rawsock.c
|
||||
@@ -241,8 +241,6 @@ static int rawsock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (!skb)
|
||||
return rc;
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
copied = skb->len;
|
||||
if (len < copied) {
|
||||
msg->msg_flags |= MSG_TRUNC;
|
||||
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
|
||||
index 75c8bbf..739c50d 100644
|
||||
--- a/net/packet/af_packet.c
|
||||
+++ b/net/packet/af_packet.c
|
||||
@@ -2694,7 +2694,6 @@ static int packet_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
struct sock *sk = sock->sk;
|
||||
struct sk_buff *skb;
|
||||
int copied, err;
|
||||
- struct sockaddr_ll *sll;
|
||||
int vnet_hdr_len = 0;
|
||||
|
||||
err = -EINVAL;
|
||||
@@ -2777,22 +2776,10 @@ static int packet_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
- /*
|
||||
- * If the address length field is there to be filled in, we fill
|
||||
- * it in now.
|
||||
- */
|
||||
-
|
||||
- sll = &PACKET_SKB_CB(skb)->sa.ll;
|
||||
- if (sock->type == SOCK_PACKET)
|
||||
- msg->msg_namelen = sizeof(struct sockaddr_pkt);
|
||||
- else
|
||||
- msg->msg_namelen = sll->sll_halen + offsetof(struct sockaddr_ll, sll_addr);
|
||||
-
|
||||
- /*
|
||||
- * You lose any data beyond the buffer you gave. If it worries a
|
||||
- * user program they can ask the device for its MTU anyway.
|
||||
+ /* You lose any data beyond the buffer you gave. If it worries
|
||||
+ * a user program they can ask the device for its MTU
|
||||
+ * anyway.
|
||||
*/
|
||||
-
|
||||
copied = skb->len;
|
||||
if (copied > len) {
|
||||
copied = len;
|
||||
@@ -2805,9 +2792,20 @@ static int packet_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
|
||||
sock_recv_ts_and_drops(msg, sk, skb);
|
||||
|
||||
- if (msg->msg_name)
|
||||
+ if (msg->msg_name) {
|
||||
+ /* If the address length field is there to be filled
|
||||
+ * in, we fill it in now.
|
||||
+ */
|
||||
+ if (sock->type == SOCK_PACKET) {
|
||||
+ msg->msg_namelen = sizeof(struct sockaddr_pkt);
|
||||
+ } else {
|
||||
+ struct sockaddr_ll *sll = &PACKET_SKB_CB(skb)->sa.ll;
|
||||
+ msg->msg_namelen = sll->sll_halen +
|
||||
+ offsetof(struct sockaddr_ll, sll_addr);
|
||||
+ }
|
||||
memcpy(msg->msg_name, &PACKET_SKB_CB(skb)->sa,
|
||||
msg->msg_namelen);
|
||||
+ }
|
||||
|
||||
if (pkt_sk(sk)->auxdata) {
|
||||
struct tpacket_auxdata aux;
|
||||
diff --git a/net/rds/recv.c b/net/rds/recv.c
|
||||
index 9f0f17c..de339b2 100644
|
||||
--- a/net/rds/recv.c
|
||||
+++ b/net/rds/recv.c
|
||||
@@ -410,8 +410,6 @@ int rds_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
|
||||
|
||||
rdsdebug("size %zu flags 0x%x timeo %ld\n", size, msg_flags, timeo);
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
if (msg_flags & MSG_OOB)
|
||||
goto out;
|
||||
|
||||
diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c
|
||||
index e98fcfb..33af772 100644
|
||||
--- a/net/rose/af_rose.c
|
||||
+++ b/net/rose/af_rose.c
|
||||
@@ -1216,7 +1216,6 @@ static int rose_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
{
|
||||
struct sock *sk = sock->sk;
|
||||
struct rose_sock *rose = rose_sk(sk);
|
||||
- struct sockaddr_rose *srose = (struct sockaddr_rose *)msg->msg_name;
|
||||
size_t copied;
|
||||
unsigned char *asmptr;
|
||||
struct sk_buff *skb;
|
||||
@@ -1252,8 +1251,11 @@ static int rose_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
|
||||
skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
|
||||
|
||||
- if (srose != NULL) {
|
||||
- memset(srose, 0, msg->msg_namelen);
|
||||
+ if (msg->msg_name) {
|
||||
+ struct sockaddr_rose *srose;
|
||||
+
|
||||
+ memset(msg->msg_name, 0, sizeof(struct full_sockaddr_rose));
|
||||
+ srose = msg->msg_name;
|
||||
srose->srose_family = AF_ROSE;
|
||||
srose->srose_addr = rose->dest_addr;
|
||||
srose->srose_call = rose->dest_call;
|
||||
diff --git a/net/rxrpc/ar-recvmsg.c b/net/rxrpc/ar-recvmsg.c
|
||||
index 4b48687..898492a 100644
|
||||
--- a/net/rxrpc/ar-recvmsg.c
|
||||
+++ b/net/rxrpc/ar-recvmsg.c
|
||||
@@ -143,10 +143,13 @@ int rxrpc_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
|
||||
/* copy the peer address and timestamp */
|
||||
if (!continue_call) {
|
||||
- if (msg->msg_name && msg->msg_namelen > 0)
|
||||
+ if (msg->msg_name) {
|
||||
+ size_t len =
|
||||
+ sizeof(call->conn->trans->peer->srx);
|
||||
memcpy(msg->msg_name,
|
||||
- &call->conn->trans->peer->srx,
|
||||
- sizeof(call->conn->trans->peer->srx));
|
||||
+ &call->conn->trans->peer->srx, len);
|
||||
+ msg->msg_namelen = len;
|
||||
+ }
|
||||
sock_recv_ts_and_drops(msg, &rx->sk, skb);
|
||||
}
|
||||
|
||||
diff --git a/net/socket.c b/net/socket.c
|
||||
index 4b94643..5158ff7 100644
|
||||
--- a/net/socket.c
|
||||
+++ b/net/socket.c
|
||||
@@ -1849,8 +1849,10 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,
|
||||
msg.msg_iov = &iov;
|
||||
iov.iov_len = size;
|
||||
iov.iov_base = ubuf;
|
||||
- msg.msg_name = (struct sockaddr *)&address;
|
||||
- msg.msg_namelen = sizeof(address);
|
||||
+ /* Save some cycles and don't copy the address if not needed */
|
||||
+ msg.msg_name = addr ? (struct sockaddr *)&address : NULL;
|
||||
+ /* We assume all kernel code knows the size of sockaddr_storage */
|
||||
+ msg.msg_namelen = 0;
|
||||
if (sock->file->f_flags & O_NONBLOCK)
|
||||
flags |= MSG_DONTWAIT;
|
||||
err = sock_recvmsg(sock, &msg, size, flags);
|
||||
@@ -2230,16 +2232,14 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg,
|
||||
goto out;
|
||||
}
|
||||
|
||||
- /*
|
||||
- * Save the user-mode address (verify_iovec will change the
|
||||
- * kernel msghdr to use the kernel address space)
|
||||
+ /* Save the user-mode address (verify_iovec will change the
|
||||
+ * kernel msghdr to use the kernel address space)
|
||||
*/
|
||||
-
|
||||
uaddr = (__force void __user *)msg_sys->msg_name;
|
||||
uaddr_len = COMPAT_NAMELEN(msg);
|
||||
- if (MSG_CMSG_COMPAT & flags) {
|
||||
+ if (MSG_CMSG_COMPAT & flags)
|
||||
err = verify_compat_iovec(msg_sys, iov, &addr, VERIFY_WRITE);
|
||||
- } else
|
||||
+ else
|
||||
err = verify_iovec(msg_sys, iov, &addr, VERIFY_WRITE);
|
||||
if (err < 0)
|
||||
goto out_freeiov;
|
||||
@@ -2248,6 +2248,9 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg,
|
||||
cmsg_ptr = (unsigned long)msg_sys->msg_control;
|
||||
msg_sys->msg_flags = flags & (MSG_CMSG_CLOEXEC|MSG_CMSG_COMPAT);
|
||||
|
||||
+ /* We assume all kernel code knows the size of sockaddr_storage */
|
||||
+ msg_sys->msg_namelen = 0;
|
||||
+
|
||||
if (sock->file->f_flags & O_NONBLOCK)
|
||||
flags |= MSG_DONTWAIT;
|
||||
err = (nosec ? sock_recvmsg_nosec : sock_recvmsg)(sock, msg_sys,
|
||||
diff --git a/net/tipc/socket.c b/net/tipc/socket.c
|
||||
index 6cc7ddd..dffdbea 100644
|
||||
--- a/net/tipc/socket.c
|
||||
+++ b/net/tipc/socket.c
|
||||
@@ -984,9 +984,6 @@ static int recv_msg(struct kiocb *iocb, struct socket *sock,
|
||||
goto exit;
|
||||
}
|
||||
|
||||
- /* will be updated in set_orig_addr() if needed */
|
||||
- m->msg_namelen = 0;
|
||||
-
|
||||
timeout = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
|
||||
restart:
|
||||
|
||||
@@ -1095,9 +1092,6 @@ static int recv_stream(struct kiocb *iocb, struct socket *sock,
|
||||
goto exit;
|
||||
}
|
||||
|
||||
- /* will be updated in set_orig_addr() if needed */
|
||||
- m->msg_namelen = 0;
|
||||
-
|
||||
target = sock_rcvlowat(sk, flags & MSG_WAITALL, buf_len);
|
||||
timeout = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
|
||||
|
||||
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
|
||||
index e64bbcf..6c66e8d 100644
|
||||
--- a/net/unix/af_unix.c
|
||||
+++ b/net/unix/af_unix.c
|
||||
@@ -1762,7 +1762,6 @@ static void unix_copy_addr(struct msghdr *msg, struct sock *sk)
|
||||
{
|
||||
struct unix_sock *u = unix_sk(sk);
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
if (u->addr) {
|
||||
msg->msg_namelen = u->addr->len;
|
||||
memcpy(msg->msg_name, u->addr->name, u->addr->len);
|
||||
@@ -1786,8 +1785,6 @@ static int unix_dgram_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (flags&MSG_OOB)
|
||||
goto out;
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
err = mutex_lock_interruptible(&u->readlock);
|
||||
if (err) {
|
||||
err = sock_intr_errno(sock_rcvtimeo(sk, noblock));
|
||||
@@ -1927,8 +1924,6 @@ static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
target = sock_rcvlowat(sk, flags&MSG_WAITALL, size);
|
||||
timeo = sock_rcvtimeo(sk, flags&MSG_DONTWAIT);
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
/* Lock the socket to prevent queue disordering
|
||||
* while sleeps in memcpy_tomsg
|
||||
*/
|
||||
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
|
||||
index 4d93346..16f721c 100644
|
||||
--- a/net/vmw_vsock/af_vsock.c
|
||||
+++ b/net/vmw_vsock/af_vsock.c
|
||||
@@ -1663,8 +1663,6 @@ vsock_stream_recvmsg(struct kiocb *kiocb,
|
||||
vsk = vsock_sk(sk);
|
||||
err = 0;
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
lock_sock(sk);
|
||||
|
||||
if (sk->sk_state != SS_CONNECTED) {
|
||||
diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c
|
||||
index ffc11df..73ca104 100644
|
||||
--- a/net/vmw_vsock/vmci_transport.c
|
||||
+++ b/net/vmw_vsock/vmci_transport.c
|
||||
@@ -1746,8 +1746,6 @@ static int vmci_transport_dgram_dequeue(struct kiocb *kiocb,
|
||||
if (flags & MSG_OOB || flags & MSG_ERRQUEUE)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
- msg->msg_namelen = 0;
|
||||
-
|
||||
/* Retrieve the head sk_buff from the socket's receive queue. */
|
||||
err = 0;
|
||||
skb = skb_recv_datagram(&vsk->sk, flags, noblock, &err);
|
||||
diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c
|
||||
index 45a3ab5..7622789 100644
|
||||
--- a/net/x25/af_x25.c
|
||||
+++ b/net/x25/af_x25.c
|
||||
@@ -1340,10 +1340,9 @@ static int x25_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (sx25) {
|
||||
sx25->sx25_family = AF_X25;
|
||||
sx25->sx25_addr = x25->dest_addr;
|
||||
+ msg->msg_namelen = sizeof(*sx25);
|
||||
}
|
||||
|
||||
- msg->msg_namelen = sizeof(struct sockaddr_x25);
|
||||
-
|
||||
x25_check_rbuf(sk);
|
||||
rc = copied;
|
||||
out_free_dgram:
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
From c13a84a830a208fb3443628773c8ca0557773cc7 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michal=20Kube=C4=8Dek?= <mkubecek@suse.cz>
|
||||
Date: Wed, 11 Sep 2013 10:17:27 +0200
|
||||
Subject: [PATCH] netfilter: nf_conntrack: use RCU safe kfree for conntrack
|
||||
extensions
|
||||
|
||||
Commit 68b80f11 (netfilter: nf_nat: fix RCU races) introduced
|
||||
RCU protection for freeing extension data when reallocation
|
||||
moves them to a new location. We need the same protection when
|
||||
freeing them in nf_ct_ext_free() in order to prevent a
|
||||
use-after-free by other threads referencing a NAT extension data
|
||||
via bysource list.
|
||||
|
||||
Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
|
||||
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||
---
|
||||
include/net/netfilter/nf_conntrack_extend.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/net/netfilter/nf_conntrack_extend.h b/include/net/netfilter/nf_conntrack_extend.h
|
||||
index ff95434..88a1d40 100644
|
||||
--- a/include/net/netfilter/nf_conntrack_extend.h
|
||||
+++ b/include/net/netfilter/nf_conntrack_extend.h
|
||||
@@ -86,7 +86,7 @@ static inline void nf_ct_ext_destroy(struct nf_conn *ct)
|
||||
static inline void nf_ct_ext_free(struct nf_conn *ct)
|
||||
{
|
||||
if (ct->ext)
|
||||
- kfree(ct->ext);
|
||||
+ kfree_rcu(ct->ext, rcu);
|
||||
}
|
||||
|
||||
/* Add this type, returns pointer to data or NULL. */
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
From a97ad0c4b447a132a322cedc3a5f7fa4cab4b304 Mon Sep 17 00:00:00 2001
|
||||
From: Miroslav Lichvar <mlichvar@redhat.com>
|
||||
Date: Thu, 1 Aug 2013 19:31:35 +0200
|
||||
Subject: [PATCH] ntp: Make periodic RTC update more reliable
|
||||
|
||||
The current code requires that the scheduled update of the RTC happens
|
||||
in the closest tick to the half of the second. This seems to be
|
||||
difficult to achieve reliably. The scheduled work may be missing the
|
||||
target time by a tick or two and be constantly rescheduled every second.
|
||||
|
||||
Relax the limit to 10 ticks. As a typical RTC drifts in the 11-minute
|
||||
update interval by several milliseconds, this shouldn't affect the
|
||||
overall accuracy of the RTC much.
|
||||
|
||||
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
|
||||
Signed-off-by: John Stultz <john.stultz@linaro.org>
|
||||
---
|
||||
kernel/time/ntp.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c
|
||||
index 8f5b3b9..ab1fa7c 100644
|
||||
--- a/kernel/time/ntp.c
|
||||
+++ b/kernel/time/ntp.c
|
||||
@@ -475,6 +475,7 @@ static void sync_cmos_clock(struct work_struct *work)
|
||||
* called as close as possible to 500 ms before the new second starts.
|
||||
* This code is run on a timer. If the clock is set, that timer
|
||||
* may not expire at the correct time. Thus, we adjust...
|
||||
+ * We want the clock to be within a couple of ticks from the target.
|
||||
*/
|
||||
if (!ntp_synced()) {
|
||||
/*
|
||||
@@ -485,7 +486,7 @@ static void sync_cmos_clock(struct work_struct *work)
|
||||
}
|
||||
|
||||
getnstimeofday(&now);
|
||||
- if (abs(now.tv_nsec - (NSEC_PER_SEC / 2)) <= tick_nsec / 2) {
|
||||
+ if (abs(now.tv_nsec - (NSEC_PER_SEC / 2)) <= tick_nsec * 5) {
|
||||
struct timespec adjust = now;
|
||||
|
||||
fail = -ENODEV;
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -1,80 +0,0 @@
|
|||
diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
|
||||
index d78c495..2132830 100644
|
||||
--- a/drivers/net/wireless/rt2x00/rt2800.h
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2800.h
|
||||
@@ -65,6 +65,7 @@
|
||||
#define RF3021 0x0007
|
||||
#define RF3022 0x0008
|
||||
#define RF3052 0x0009
|
||||
+#define RF3070 0x3070
|
||||
#define RF2853 0x000a
|
||||
#define RF3320 0x000b
|
||||
#define RF3322 0x000c
|
||||
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||
index 1b41c8e..2958265 100644
|
||||
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
|
||||
@@ -2597,6 +2597,7 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
|
||||
case RF3322:
|
||||
rt2800_config_channel_rf3322(rt2x00dev, conf, rf, info);
|
||||
break;
|
||||
+ case RF3070:
|
||||
case RF5360:
|
||||
case RF5370:
|
||||
case RF5372:
|
||||
@@ -2611,7 +2612,8 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
|
||||
rt2800_config_channel_rf2xxx(rt2x00dev, conf, rf, info);
|
||||
}
|
||||
|
||||
- if (rt2x00_rf(rt2x00dev, RF3290) ||
|
||||
+ if (rt2x00_rf(rt2x00dev, RF3070) ||
|
||||
+ rt2x00_rf(rt2x00dev, RF3290) ||
|
||||
rt2x00_rf(rt2x00dev, RF3322) ||
|
||||
rt2x00_rf(rt2x00dev, RF5360) ||
|
||||
rt2x00_rf(rt2x00dev, RF5370) ||
|
||||
@@ -3219,6 +3221,7 @@ void rt2800_vco_calibration(struct rt2x00_dev *rt2x00dev)
|
||||
rt2x00_set_field8(&rfcsr, RFCSR7_RF_TUNING, 1);
|
||||
rt2800_rfcsr_write(rt2x00dev, 7, rfcsr);
|
||||
break;
|
||||
+ case RF3070:
|
||||
case RF3290:
|
||||
case RF5360:
|
||||
case RF5370:
|
||||
@@ -5731,6 +5734,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
|
||||
case RF3021:
|
||||
case RF3022:
|
||||
case RF3052:
|
||||
+ case RF3070:
|
||||
case RF3290:
|
||||
case RF3320:
|
||||
case RF3322:
|
||||
@@ -6186,6 +6190,7 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
|
||||
rt2x00_rf(rt2x00dev, RF2020) ||
|
||||
rt2x00_rf(rt2x00dev, RF3021) ||
|
||||
rt2x00_rf(rt2x00dev, RF3022) ||
|
||||
+ rt2x00_rf(rt2x00dev, RF3070) ||
|
||||
rt2x00_rf(rt2x00dev, RF3290) ||
|
||||
rt2x00_rf(rt2x00dev, RF3320) ||
|
||||
rt2x00_rf(rt2x00dev, RF3322) ||
|
||||
@@ -6219,10 +6224,11 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
|
||||
/*
|
||||
* Initialize HT information.
|
||||
*/
|
||||
- if (!rt2x00_rf(rt2x00dev, RF2020))
|
||||
+ if (!rt2x00_rf(rt2x00dev, RF2020)) {
|
||||
spec->ht.ht_supported = true;
|
||||
- else
|
||||
+ } else {
|
||||
spec->ht.ht_supported = false;
|
||||
+ }
|
||||
|
||||
spec->ht.cap =
|
||||
IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
|
||||
@@ -6290,6 +6296,7 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
|
||||
case RF3022:
|
||||
case RF3320:
|
||||
case RF3052:
|
||||
+ case RF3070:
|
||||
case RF3290:
|
||||
case RF5360:
|
||||
case RF5370:
|
|
@ -1,53 +0,0 @@
|
|||
Polling TX statuses too frequently has two negative effects. First is
|
||||
randomly peek CPU usage, causing overall system functioning delays.
|
||||
Second bad effect is that device is not able to fill TX statuses in
|
||||
H/W register on some workloads and we get lot of timeouts like below:
|
||||
|
||||
ieee80211 phy4: rt2800usb_entry_txstatus_timeout: Warning - TX status timeout for entry 7 in queue 2
|
||||
ieee80211 phy4: rt2800usb_entry_txstatus_timeout: Warning - TX status timeout for entry 7 in queue 2
|
||||
ieee80211 phy4: rt2800usb_txdone: Warning - Got TX status for an empty queue 2, dropping
|
||||
|
||||
This not only cause flood of messages in dmesg, but also bad throughput,
|
||||
since rate scaling algorithm can not work optimally.
|
||||
|
||||
In the future, we should probably make polling interval be adjusted
|
||||
automatically, but for now just increase values, this make mentioned
|
||||
problems gone.
|
||||
|
||||
Resolve:
|
||||
https://bugzilla.kernel.org/show_bug.cgi?id=62781
|
||||
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
||||
---
|
||||
drivers/net/wireless/rt2x00/rt2800usb.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
|
||||
index 96677ce5..e095e61 100644
|
||||
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
|
||||
@@ -176,8 +176,8 @@ static bool rt2800usb_tx_sta_fifo_read_completed(struct rt2x00_dev *rt2x00dev,
|
||||
queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work);
|
||||
|
||||
if (rt2800usb_txstatus_pending(rt2x00dev)) {
|
||||
- /* Read register after 250 us */
|
||||
- hrtimer_start(&rt2x00dev->txstatus_timer, ktime_set(0, 250000),
|
||||
+ /* Read register after 1 ms */
|
||||
+ hrtimer_start(&rt2x00dev->txstatus_timer, ktime_set(0, 1000000),
|
||||
HRTIMER_MODE_REL);
|
||||
return false;
|
||||
}
|
||||
@@ -202,8 +202,8 @@ static void rt2800usb_async_read_tx_status(struct rt2x00_dev *rt2x00dev)
|
||||
if (test_and_set_bit(TX_STATUS_READING, &rt2x00dev->flags))
|
||||
return;
|
||||
|
||||
- /* Read TX_STA_FIFO register after 500 us */
|
||||
- hrtimer_start(&rt2x00dev->txstatus_timer, ktime_set(0, 500000),
|
||||
+ /* Read TX_STA_FIFO register after 2 ms */
|
||||
+ hrtimer_start(&rt2x00dev->txstatus_timer, ktime_set(0, 2000000),
|
||||
HRTIMER_MODE_REL);
|
||||
}
|
||||
|
||||
--
|
||||
1.8.3.1
|
|
@ -0,0 +1,112 @@
|
|||
From ffe1ee94d526900ce1e5191cdd38934477dd209a Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
Date: Fri, 26 Oct 2012 14:02:09 -0400
|
||||
Subject: [PATCH] hibernate: Disable in a signed modules environment
|
||||
|
||||
There is currently no way to verify the resume image when returning
|
||||
from hibernate. This might compromise the signed modules trust model,
|
||||
so until we can work with signed hibernate images we disable it in
|
||||
a secure modules environment.
|
||||
|
||||
Signed-off-by: Josh Boyer <jwboyer@fedoraproject.com>
|
||||
---
|
||||
kernel/power/hibernate.c | 16 +++++++++++++++-
|
||||
kernel/power/main.c | 7 ++++++-
|
||||
kernel/power/user.c | 1 +
|
||||
3 files changed, 22 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
|
||||
index b26f5f1..e65228b 100644
|
||||
--- a/kernel/power/hibernate.c
|
||||
+++ b/kernel/power/hibernate.c
|
||||
@@ -28,6 +28,8 @@
|
||||
#include <linux/syscore_ops.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/genhd.h>
|
||||
+#include <linux/efi.h>
|
||||
+#include <linux/module.h>
|
||||
|
||||
#include "power.h"
|
||||
|
||||
@@ -632,6 +634,10 @@ int hibernate(void)
|
||||
{
|
||||
int error;
|
||||
|
||||
+ if (secure_modules()) {
|
||||
+ return -EPERM;
|
||||
+ }
|
||||
+
|
||||
lock_system_sleep();
|
||||
/* The snapshot device should not be opened while we're running */
|
||||
if (!atomic_add_unless(&snapshot_device_available, -1, 0)) {
|
||||
@@ -723,7 +729,7 @@ static int software_resume(void)
|
||||
/*
|
||||
* If the user said "noresume".. bail out early.
|
||||
*/
|
||||
- if (noresume)
|
||||
+ if (noresume || secure_modules())
|
||||
return 0;
|
||||
|
||||
/*
|
||||
@@ -889,6 +895,11 @@ static ssize_t disk_show(struct kobject *kobj, struct kobj_attribute *attr,
|
||||
int i;
|
||||
char *start = buf;
|
||||
|
||||
+ if (efi_enabled(EFI_SECURE_BOOT)) {
|
||||
+ buf += sprintf(buf, "[%s]\n", "disabled");
|
||||
+ return buf-start;
|
||||
+ }
|
||||
+
|
||||
for (i = HIBERNATION_FIRST; i <= HIBERNATION_MAX; i++) {
|
||||
if (!hibernation_modes[i])
|
||||
continue;
|
||||
@@ -923,6 +934,9 @@ static ssize_t disk_store(struct kobject *kobj, struct kobj_attribute *attr,
|
||||
char *p;
|
||||
int mode = HIBERNATION_INVALID;
|
||||
|
||||
+ if (secure_modules())
|
||||
+ return -EPERM;
|
||||
+
|
||||
p = memchr(buf, '\n', n);
|
||||
len = p ? p - buf : n;
|
||||
|
||||
diff --git a/kernel/power/main.c b/kernel/power/main.c
|
||||
index 1d1bf63..300f300 100644
|
||||
--- a/kernel/power/main.c
|
||||
+++ b/kernel/power/main.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/seq_file.h>
|
||||
+#include <linux/efi.h>
|
||||
|
||||
#include "power.h"
|
||||
|
||||
@@ -301,7 +302,11 @@ static ssize_t state_show(struct kobject *kobj, struct kobj_attribute *attr,
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_HIBERNATION
|
||||
- s += sprintf(s, "%s\n", "disk");
|
||||
+ if (!efi_enabled(EFI_SECURE_BOOT)) {
|
||||
+ s += sprintf(s, "%s\n", "disk");
|
||||
+ } else {
|
||||
+ s += sprintf(s, "\n");
|
||||
+ }
|
||||
#else
|
||||
if (s != buf)
|
||||
/* convert the last space to a newline */
|
||||
diff --git a/kernel/power/user.c b/kernel/power/user.c
|
||||
index 15cb72f..fa85ed5 100644
|
||||
--- a/kernel/power/user.c
|
||||
+++ b/kernel/power/user.c
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/freezer.h>
|
||||
#include <linux/module.h>
|
||||
+#include <linux/efi.h>
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -0,0 +1,874 @@
|
|||
From 8dea807503a1ba88d9e27595daae7f86ec968711 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Fri, 9 Aug 2013 17:58:15 -0400
|
||||
Subject: [PATCH 01/14] Add secure_modules() call
|
||||
|
||||
Provide a single call to allow kernel code to determine whether the system
|
||||
has been configured to either disable module loading entirely or to load
|
||||
only modules signed with a trusted key.
|
||||
|
||||
Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
---
|
||||
include/linux/module.h | 7 +++++++
|
||||
kernel/module.c | 10 ++++++++++
|
||||
2 files changed, 17 insertions(+)
|
||||
|
||||
diff --git a/include/linux/module.h b/include/linux/module.h
|
||||
index 46f1ea0..0c266b2 100644
|
||||
--- a/include/linux/module.h
|
||||
+++ b/include/linux/module.h
|
||||
@@ -509,6 +509,8 @@ int unregister_module_notifier(struct notifier_block * nb);
|
||||
|
||||
extern void print_modules(void);
|
||||
|
||||
+extern bool secure_modules(void);
|
||||
+
|
||||
#else /* !CONFIG_MODULES... */
|
||||
|
||||
/* Given an address, look for it in the exception tables. */
|
||||
@@ -619,6 +621,11 @@ static inline int unregister_module_notifier(struct notifier_block * nb)
|
||||
static inline void print_modules(void)
|
||||
{
|
||||
}
|
||||
+
|
||||
+static inline bool secure_modules(void)
|
||||
+{
|
||||
+ return false;
|
||||
+}
|
||||
#endif /* CONFIG_MODULES */
|
||||
|
||||
#ifdef CONFIG_SYSFS
|
||||
diff --git a/kernel/module.c b/kernel/module.c
|
||||
index 2069158..0e94acf 100644
|
||||
--- a/kernel/module.c
|
||||
+++ b/kernel/module.c
|
||||
@@ -3852,3 +3852,13 @@ void module_layout(struct module *mod,
|
||||
}
|
||||
EXPORT_SYMBOL(module_layout);
|
||||
#endif
|
||||
+
|
||||
+bool secure_modules(void)
|
||||
+{
|
||||
+#ifdef CONFIG_MODULE_SIG
|
||||
+ return (sig_enforce || modules_disabled);
|
||||
+#else
|
||||
+ return modules_disabled;
|
||||
+#endif
|
||||
+}
|
||||
+EXPORT_SYMBOL(secure_modules);
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From 9b7b3f6283bf784e4ea1c34e52646b12971b2823 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Thu, 8 Mar 2012 10:10:38 -0500
|
||||
Subject: [PATCH 02/14] PCI: Lock down BAR access when module security is
|
||||
enabled
|
||||
|
||||
Any hardware that can potentially generate DMA has to be locked down from
|
||||
userspace in order to avoid it being possible for an attacker to modify
|
||||
kernel code, allowing them to circumvent disabled module loading or module
|
||||
signing. Default to paranoid - in future we can potentially relax this for
|
||||
sufficiently IOMMU-isolated devices.
|
||||
|
||||
Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
---
|
||||
drivers/pci/pci-sysfs.c | 10 ++++++++++
|
||||
drivers/pci/proc.c | 8 +++++++-
|
||||
drivers/pci/syscall.c | 3 ++-
|
||||
3 files changed, 19 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
|
||||
index c0dbe1f..cd4e35f 100644
|
||||
--- a/drivers/pci/pci-sysfs.c
|
||||
+++ b/drivers/pci/pci-sysfs.c
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/vgaarb.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
+#include <linux/module.h>
|
||||
#include "pci.h"
|
||||
|
||||
static int sysfs_initialized; /* = 0 */
|
||||
@@ -624,6 +625,9 @@ pci_write_config(struct file* filp, struct kobject *kobj,
|
||||
loff_t init_off = off;
|
||||
u8 *data = (u8*) buf;
|
||||
|
||||
+ if (secure_modules())
|
||||
+ return -EPERM;
|
||||
+
|
||||
if (off > dev->cfg_size)
|
||||
return 0;
|
||||
if (off + count > dev->cfg_size) {
|
||||
@@ -930,6 +934,9 @@ pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr,
|
||||
resource_size_t start, end;
|
||||
int i;
|
||||
|
||||
+ if (secure_modules())
|
||||
+ return -EPERM;
|
||||
+
|
||||
for (i = 0; i < PCI_ROM_RESOURCE; i++)
|
||||
if (res == &pdev->resource[i])
|
||||
break;
|
||||
@@ -1037,6 +1044,9 @@ pci_write_resource_io(struct file *filp, struct kobject *kobj,
|
||||
struct bin_attribute *attr, char *buf,
|
||||
loff_t off, size_t count)
|
||||
{
|
||||
+ if (secure_modules())
|
||||
+ return -EPERM;
|
||||
+
|
||||
return pci_resource_io(filp, kobj, attr, buf, off, count, true);
|
||||
}
|
||||
|
||||
diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c
|
||||
index cdc7836..e3d498b 100644
|
||||
--- a/drivers/pci/proc.c
|
||||
+++ b/drivers/pci/proc.c
|
||||
@@ -117,6 +117,9 @@ proc_bus_pci_write(struct file *file, const char __user *buf, size_t nbytes, lof
|
||||
int size = dev->cfg_size;
|
||||
int cnt;
|
||||
|
||||
+ if (secure_modules())
|
||||
+ return -EPERM;
|
||||
+
|
||||
if (pos >= size)
|
||||
return 0;
|
||||
if (nbytes >= size)
|
||||
@@ -196,6 +199,9 @@ static long proc_bus_pci_ioctl(struct file *file, unsigned int cmd,
|
||||
#endif /* HAVE_PCI_MMAP */
|
||||
int ret = 0;
|
||||
|
||||
+ if (secure_modules())
|
||||
+ return -EPERM;
|
||||
+
|
||||
switch (cmd) {
|
||||
case PCIIOC_CONTROLLER:
|
||||
ret = pci_domain_nr(dev->bus);
|
||||
@@ -234,7 +240,7 @@ static int proc_bus_pci_mmap(struct file *file, struct vm_area_struct *vma)
|
||||
struct pci_filp_private *fpriv = file->private_data;
|
||||
int i, ret;
|
||||
|
||||
- if (!capable(CAP_SYS_RAWIO))
|
||||
+ if (!capable(CAP_SYS_RAWIO) || secure_modules())
|
||||
return -EPERM;
|
||||
|
||||
/* Make sure the caller is mapping a real resource for this device */
|
||||
diff --git a/drivers/pci/syscall.c b/drivers/pci/syscall.c
|
||||
index e1c1ec5..bffbf71 100644
|
||||
--- a/drivers/pci/syscall.c
|
||||
+++ b/drivers/pci/syscall.c
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <linux/errno.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/syscalls.h>
|
||||
+#include <linux/module.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include "pci.h"
|
||||
|
||||
@@ -92,7 +93,7 @@ SYSCALL_DEFINE5(pciconfig_write, unsigned long, bus, unsigned long, dfn,
|
||||
u32 dword;
|
||||
int err = 0;
|
||||
|
||||
- if (!capable(CAP_SYS_ADMIN))
|
||||
+ if (!capable(CAP_SYS_ADMIN) || secure_modules())
|
||||
return -EPERM;
|
||||
|
||||
dev = pci_get_bus_and_slot(bus, dfn);
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From aac2425a2664c09c2a369e1eec6e7a5bc2713cb1 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Thu, 8 Mar 2012 10:35:59 -0500
|
||||
Subject: [PATCH 03/14] x86: Lock down IO port access when module security is
|
||||
enabled
|
||||
|
||||
IO port access would permit users to gain access to PCI configuration
|
||||
registers, which in turn (on a lot of hardware) give access to MMIO register
|
||||
space. This would potentially permit root to trigger arbitrary DMA, so lock
|
||||
it down by default.
|
||||
|
||||
Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
---
|
||||
arch/x86/kernel/ioport.c | 5 +++--
|
||||
drivers/char/mem.c | 4 ++++
|
||||
2 files changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/ioport.c b/arch/x86/kernel/ioport.c
|
||||
index 4ddaf66..00b4403 100644
|
||||
--- a/arch/x86/kernel/ioport.c
|
||||
+++ b/arch/x86/kernel/ioport.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/thread_info.h>
|
||||
#include <linux/syscalls.h>
|
||||
#include <linux/bitmap.h>
|
||||
+#include <linux/module.h>
|
||||
#include <asm/syscalls.h>
|
||||
|
||||
/*
|
||||
@@ -28,7 +29,7 @@ asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on)
|
||||
|
||||
if ((from + num <= from) || (from + num > IO_BITMAP_BITS))
|
||||
return -EINVAL;
|
||||
- if (turn_on && !capable(CAP_SYS_RAWIO))
|
||||
+ if (turn_on && (!capable(CAP_SYS_RAWIO) || secure_modules()))
|
||||
return -EPERM;
|
||||
|
||||
/*
|
||||
@@ -103,7 +104,7 @@ SYSCALL_DEFINE1(iopl, unsigned int, level)
|
||||
return -EINVAL;
|
||||
/* Trying to gain more privileges? */
|
||||
if (level > old) {
|
||||
- if (!capable(CAP_SYS_RAWIO))
|
||||
+ if (!capable(CAP_SYS_RAWIO) || secure_modules())
|
||||
return -EPERM;
|
||||
}
|
||||
regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | (level << 12);
|
||||
diff --git a/drivers/char/mem.c b/drivers/char/mem.c
|
||||
index f895a8c..1af8664 100644
|
||||
--- a/drivers/char/mem.c
|
||||
+++ b/drivers/char/mem.c
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <linux/export.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/aio.h>
|
||||
+#include <linux/module.h>
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
@@ -563,6 +564,9 @@ static ssize_t write_port(struct file *file, const char __user *buf,
|
||||
unsigned long i = *ppos;
|
||||
const char __user *tmp = buf;
|
||||
|
||||
+ if (secure_modules())
|
||||
+ return -EPERM;
|
||||
+
|
||||
if (!access_ok(VERIFY_READ, buf, count))
|
||||
return -EFAULT;
|
||||
while (count-- > 0 && i < 65536) {
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From e7f9789c7eedf291972666befee726ff8e7126f6 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Fri, 9 Mar 2012 08:39:37 -0500
|
||||
Subject: [PATCH 04/14] ACPI: Limit access to custom_method
|
||||
|
||||
custom_method effectively allows arbitrary access to system memory, making
|
||||
it possible for an attacker to circumvent restrictions on module loading.
|
||||
Disable it if any such restrictions have been enabled.
|
||||
|
||||
Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
---
|
||||
drivers/acpi/custom_method.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/drivers/acpi/custom_method.c b/drivers/acpi/custom_method.c
|
||||
index 12b62f2..50647b3 100644
|
||||
--- a/drivers/acpi/custom_method.c
|
||||
+++ b/drivers/acpi/custom_method.c
|
||||
@@ -29,6 +29,9 @@ static ssize_t cm_write(struct file *file, const char __user * user_buf,
|
||||
struct acpi_table_header table;
|
||||
acpi_status status;
|
||||
|
||||
+ if (secure_modules())
|
||||
+ return -EPERM;
|
||||
+
|
||||
if (!(*ppos)) {
|
||||
/* parse the table header to get the table length */
|
||||
if (count <= sizeof(struct acpi_table_header))
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From d81cd6628c821d47bd086354cbc57b1474f3c1a8 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Fri, 9 Mar 2012 08:46:50 -0500
|
||||
Subject: [PATCH 05/14] asus-wmi: Restrict debugfs interface when module
|
||||
loading is restricted
|
||||
|
||||
We have no way of validating what all of the Asus WMI methods do on a
|
||||
given machine, and there's a risk that some will allow hardware state to
|
||||
be manipulated in such a way that arbitrary code can be executed in the
|
||||
kernel, circumventing module loading restrictions. Prevent that if any of
|
||||
these features are enabled.
|
||||
|
||||
Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
---
|
||||
drivers/platform/x86/asus-wmi.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
|
||||
index 19c313b..db18ef66 100644
|
||||
--- a/drivers/platform/x86/asus-wmi.c
|
||||
+++ b/drivers/platform/x86/asus-wmi.c
|
||||
@@ -1618,6 +1618,9 @@ static int show_dsts(struct seq_file *m, void *data)
|
||||
int err;
|
||||
u32 retval = -1;
|
||||
|
||||
+ if (secure_modules())
|
||||
+ return -EPERM;
|
||||
+
|
||||
err = asus_wmi_get_devstate(asus, asus->debug.dev_id, &retval);
|
||||
|
||||
if (err < 0)
|
||||
@@ -1634,6 +1637,9 @@ static int show_devs(struct seq_file *m, void *data)
|
||||
int err;
|
||||
u32 retval = -1;
|
||||
|
||||
+ if (secure_modules())
|
||||
+ return -EPERM;
|
||||
+
|
||||
err = asus_wmi_set_devstate(asus->debug.dev_id, asus->debug.ctrl_param,
|
||||
&retval);
|
||||
|
||||
@@ -1658,6 +1664,9 @@ static int show_call(struct seq_file *m, void *data)
|
||||
union acpi_object *obj;
|
||||
acpi_status status;
|
||||
|
||||
+ if (secure_modules())
|
||||
+ return -EPERM;
|
||||
+
|
||||
status = wmi_evaluate_method(ASUS_WMI_MGMT_GUID,
|
||||
1, asus->debug.method_id,
|
||||
&input, &output);
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From df75e984729ef50bb691b4d15472529fcd81580b Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Fri, 9 Mar 2012 09:28:15 -0500
|
||||
Subject: [PATCH 06/14] Restrict /dev/mem and /dev/kmem when module loading is
|
||||
restricted
|
||||
|
||||
Allowing users to write to address space makes it possible for the kernel
|
||||
to be subverted, avoiding module loading restrictions. Prevent this when
|
||||
any restrictions have been imposed on loading modules.
|
||||
|
||||
Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
---
|
||||
drivers/char/mem.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/drivers/char/mem.c b/drivers/char/mem.c
|
||||
index 1af8664..61406c8 100644
|
||||
--- a/drivers/char/mem.c
|
||||
+++ b/drivers/char/mem.c
|
||||
@@ -159,6 +159,9 @@ static ssize_t write_mem(struct file *file, const char __user *buf,
|
||||
unsigned long copied;
|
||||
void *ptr;
|
||||
|
||||
+ if (secure_modules())
|
||||
+ return -EPERM;
|
||||
+
|
||||
if (!valid_phys_addr_range(p, count))
|
||||
return -EFAULT;
|
||||
|
||||
@@ -497,6 +500,9 @@ static ssize_t write_kmem(struct file *file, const char __user *buf,
|
||||
char *kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */
|
||||
int err = 0;
|
||||
|
||||
+ if (secure_modules())
|
||||
+ return -EPERM;
|
||||
+
|
||||
if (p < (unsigned long) high_memory) {
|
||||
unsigned long to_write = min_t(unsigned long, count,
|
||||
(unsigned long)high_memory - p);
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From 78955913cc46cc5e5c7f2c71c1b07a5c18e06456 Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@redhat.com>
|
||||
Date: Mon, 25 Jun 2012 19:57:30 -0400
|
||||
Subject: [PATCH 07/14] acpi: Ignore acpi_rsdp kernel parameter when module
|
||||
loading is restricted
|
||||
|
||||
This option allows userspace to pass the RSDP address to the kernel, which
|
||||
makes it possible for a user to circumvent any restrictions imposed on
|
||||
loading modules. Disable it in that case.
|
||||
|
||||
Signed-off-by: Josh Boyer <jwboyer@redhat.com>
|
||||
---
|
||||
drivers/acpi/osl.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
|
||||
index 6ab2c35..e4c4410 100644
|
||||
--- a/drivers/acpi/osl.c
|
||||
+++ b/drivers/acpi/osl.c
|
||||
@@ -45,6 +45,7 @@
|
||||
#include <linux/list.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/semaphore.h>
|
||||
+#include <linux/module.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/uaccess.h>
|
||||
@@ -245,7 +246,7 @@ early_param("acpi_rsdp", setup_acpi_rsdp);
|
||||
acpi_physical_address __init acpi_os_get_root_pointer(void)
|
||||
{
|
||||
#ifdef CONFIG_KEXEC
|
||||
- if (acpi_rsdp)
|
||||
+ if (acpi_rsdp && !secure_modules())
|
||||
return acpi_rsdp;
|
||||
#endif
|
||||
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From 23aae9143fbece326b3a26bf5ba48956c99cabe4 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Fri, 9 Aug 2013 03:33:56 -0400
|
||||
Subject: [PATCH 08/14] kexec: Disable at runtime if the kernel enforces module
|
||||
loading restrictions
|
||||
|
||||
kexec permits the loading and execution of arbitrary code in ring 0, which
|
||||
is something that module signing enforcement is meant to prevent. It makes
|
||||
sense to disable kexec in this situation.
|
||||
|
||||
Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
---
|
||||
kernel/kexec.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/kernel/kexec.c b/kernel/kexec.c
|
||||
index 59f7b55..3e2b63a 100644
|
||||
--- a/kernel/kexec.c
|
||||
+++ b/kernel/kexec.c
|
||||
@@ -32,6 +32,7 @@
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/swap.h>
|
||||
#include <linux/syscore_ops.h>
|
||||
+#include <linux/module.h>
|
||||
|
||||
#include <asm/page.h>
|
||||
#include <asm/uaccess.h>
|
||||
@@ -943,6 +944,13 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,
|
||||
return -EPERM;
|
||||
|
||||
/*
|
||||
+ * kexec can be used to circumvent module loading restrictions, so
|
||||
+ * prevent loading in that case
|
||||
+ */
|
||||
+ if (secure_modules())
|
||||
+ return -EPERM;
|
||||
+
|
||||
+ /*
|
||||
* Verify we have a legal set of flags
|
||||
* This leaves us room for future extensions.
|
||||
*/
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From 218cd49aa2d6a085c5c4edc0396200864f0b54ad Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Tue, 3 Sep 2013 11:23:29 -0400
|
||||
Subject: [PATCH 09/14] uswsusp: Disable when module loading is restricted
|
||||
|
||||
uswsusp allows a user process to dump and then restore kernel state, which
|
||||
makes it possible to avoid module loading restrictions. Prevent this when
|
||||
any restrictions have been imposed on loading modules.
|
||||
|
||||
Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
---
|
||||
kernel/power/user.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/kernel/power/user.c b/kernel/power/user.c
|
||||
index 4ed81e7..15cb72f 100644
|
||||
--- a/kernel/power/user.c
|
||||
+++ b/kernel/power/user.c
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <linux/console.h>
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/freezer.h>
|
||||
+#include <linux/module.h>
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
@@ -48,6 +49,9 @@ static int snapshot_open(struct inode *inode, struct file *filp)
|
||||
struct snapshot_data *data;
|
||||
int error;
|
||||
|
||||
+ if (secure_modules())
|
||||
+ return -EPERM;
|
||||
+
|
||||
lock_system_sleep();
|
||||
|
||||
if (!atomic_add_unless(&snapshot_device_available, -1, 0)) {
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From beeaac053d4ae57dc65be1da8b46e5d4bc6542b8 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Fri, 8 Feb 2013 11:12:13 -0800
|
||||
Subject: [PATCH 10/14] x86: Restrict MSR access when module loading is
|
||||
restricted
|
||||
|
||||
Writing to MSRs should not be allowed if module loading is restricted,
|
||||
since it could lead to execution of arbitrary code in kernel mode. Based
|
||||
on a patch by Kees Cook.
|
||||
|
||||
Cc: Kees Cook <keescook@chromium.org>
|
||||
Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
---
|
||||
arch/x86/kernel/msr.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c
|
||||
index 88458fa..d08f7e3 100644
|
||||
--- a/arch/x86/kernel/msr.c
|
||||
+++ b/arch/x86/kernel/msr.c
|
||||
@@ -103,6 +103,9 @@ static ssize_t msr_write(struct file *file, const char __user *buf,
|
||||
int err = 0;
|
||||
ssize_t bytes = 0;
|
||||
|
||||
+ if (secure_modules())
|
||||
+ return -EPERM;
|
||||
+
|
||||
if (count % 8)
|
||||
return -EINVAL; /* Invalid chunk size */
|
||||
|
||||
@@ -150,6 +153,10 @@ static long msr_ioctl(struct file *file, unsigned int ioc, unsigned long arg)
|
||||
err = -EBADF;
|
||||
break;
|
||||
}
|
||||
+ if (secure_modules()) {
|
||||
+ err = -EPERM;
|
||||
+ break;
|
||||
+ }
|
||||
if (copy_from_user(®s, uregs, sizeof regs)) {
|
||||
err = -EFAULT;
|
||||
break;
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From b4331711c52aff0a6a9cef0f4b52fe261874d6f2 Mon Sep 17 00:00:00 2001
|
||||
From: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
Date: Fri, 9 Aug 2013 18:36:30 -0400
|
||||
Subject: [PATCH 11/14] Add option to automatically enforce module signatures
|
||||
when in Secure Boot mode
|
||||
|
||||
UEFI Secure Boot provides a mechanism for ensuring that the firmware will
|
||||
only load signed bootloaders and kernels. Certain use cases may also
|
||||
require that all kernel modules also be signed. Add a configuration option
|
||||
that enforces this automatically when enabled.
|
||||
|
||||
Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
|
||||
---
|
||||
Documentation/x86/zero-page.txt | 2 ++
|
||||
arch/x86/Kconfig | 10 ++++++++++
|
||||
arch/x86/boot/compressed/eboot.c | 36 +++++++++++++++++++++++++++++++++++
|
||||
arch/x86/include/uapi/asm/bootparam.h | 3 ++-
|
||||
arch/x86/kernel/setup.c | 6 ++++++
|
||||
include/linux/module.h | 6 ++++++
|
||||
kernel/module.c | 7 +++++++
|
||||
7 files changed, 69 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Documentation/x86/zero-page.txt b/Documentation/x86/zero-page.txt
|
||||
index 199f453..ec38acf 100644
|
||||
--- a/Documentation/x86/zero-page.txt
|
||||
+++ b/Documentation/x86/zero-page.txt
|
||||
@@ -30,6 +30,8 @@ Offset Proto Name Meaning
|
||||
1E9/001 ALL eddbuf_entries Number of entries in eddbuf (below)
|
||||
1EA/001 ALL edd_mbr_sig_buf_entries Number of entries in edd_mbr_sig_buffer
|
||||
(below)
|
||||
+1EB/001 ALL kbd_status Numlock is enabled
|
||||
+1EC/001 ALL secure_boot Secure boot is enabled in the firmware
|
||||
1EF/001 ALL sentinel Used to detect broken bootloaders
|
||||
290/040 ALL edd_mbr_sig_buffer EDD MBR signatures
|
||||
2D0/A00 ALL e820_map E820 memory map table
|
||||
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
|
||||
index b32ebf9..6a6c19b 100644
|
||||
--- a/arch/x86/Kconfig
|
||||
+++ b/arch/x86/Kconfig
|
||||
@@ -1581,6 +1581,16 @@ config EFI_STUB
|
||||
|
||||
See Documentation/x86/efi-stub.txt for more information.
|
||||
|
||||
+config EFI_SECURE_BOOT_SIG_ENFORCE
|
||||
+ def_bool n
|
||||
+ prompt "Force module signing when UEFI Secure Boot is enabled"
|
||||
+ ---help---
|
||||
+ UEFI Secure Boot provides a mechanism for ensuring that the
|
||||
+ firmware will only load signed bootloaders and kernels. Certain
|
||||
+ use cases may also require that all kernel modules also be signed.
|
||||
+ Say Y here to automatically enable module signature enforcement
|
||||
+ when a system boots with UEFI Secure Boot enabled.
|
||||
+
|
||||
config SECCOMP
|
||||
def_bool y
|
||||
prompt "Enable seccomp to safely compute untrusted bytecode"
|
||||
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
|
||||
index b7388a4..53bfe4f 100644
|
||||
--- a/arch/x86/boot/compressed/eboot.c
|
||||
+++ b/arch/x86/boot/compressed/eboot.c
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <asm/efi.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/desc.h>
|
||||
+#include <asm/bootparam_utils.h>
|
||||
|
||||
#undef memcpy /* Use memcpy from misc.c */
|
||||
|
||||
@@ -861,6 +862,37 @@ fail:
|
||||
return status;
|
||||
}
|
||||
|
||||
+static int get_secure_boot(void)
|
||||
+{
|
||||
+ u8 sb, setup;
|
||||
+ unsigned long datasize = sizeof(sb);
|
||||
+ efi_guid_t var_guid = EFI_GLOBAL_VARIABLE_GUID;
|
||||
+ efi_status_t status;
|
||||
+
|
||||
+ status = efi_call_phys5(sys_table->runtime->get_variable,
|
||||
+ L"SecureBoot", &var_guid, NULL, &datasize, &sb);
|
||||
+
|
||||
+ if (status != EFI_SUCCESS)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (sb == 0)
|
||||
+ return 0;
|
||||
+
|
||||
+
|
||||
+ status = efi_call_phys5(sys_table->runtime->get_variable,
|
||||
+ L"SetupMode", &var_guid, NULL, &datasize,
|
||||
+ &setup);
|
||||
+
|
||||
+ if (status != EFI_SUCCESS)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (setup == 1)
|
||||
+ return 0;
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/*
|
||||
* Because the x86 boot code expects to be passed a boot_params we
|
||||
* need to create one ourselves (usually the bootloader would create
|
||||
@@ -1169,6 +1201,10 @@ struct boot_params *efi_main(void *handle, efi_system_table_t *_table,
|
||||
if (sys_table->hdr.signature != EFI_SYSTEM_TABLE_SIGNATURE)
|
||||
goto fail;
|
||||
|
||||
+ sanitize_boot_params(boot_params);
|
||||
+
|
||||
+ boot_params->secure_boot = get_secure_boot();
|
||||
+
|
||||
setup_graphics(boot_params);
|
||||
|
||||
setup_efi_pci(boot_params);
|
||||
diff --git a/arch/x86/include/uapi/asm/bootparam.h b/arch/x86/include/uapi/asm/bootparam.h
|
||||
index c15ddaf..85d7685 100644
|
||||
--- a/arch/x86/include/uapi/asm/bootparam.h
|
||||
+++ b/arch/x86/include/uapi/asm/bootparam.h
|
||||
@@ -131,7 +131,8 @@ struct boot_params {
|
||||
__u8 eddbuf_entries; /* 0x1e9 */
|
||||
__u8 edd_mbr_sig_buf_entries; /* 0x1ea */
|
||||
__u8 kbd_status; /* 0x1eb */
|
||||
- __u8 _pad5[3]; /* 0x1ec */
|
||||
+ __u8 secure_boot; /* 0x1ec */
|
||||
+ __u8 _pad5[2]; /* 0x1ed */
|
||||
/*
|
||||
* The sentinel is set to a nonzero value (0xff) in header.S.
|
||||
*
|
||||
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
|
||||
index f8ec578..deeb7bc 100644
|
||||
--- a/arch/x86/kernel/setup.c
|
||||
+++ b/arch/x86/kernel/setup.c
|
||||
@@ -1129,6 +1129,12 @@ void __init setup_arch(char **cmdline_p)
|
||||
|
||||
io_delay_init();
|
||||
|
||||
+#ifdef CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE
|
||||
+ if (boot_params.secure_boot) {
|
||||
+ enforce_signed_modules();
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
/*
|
||||
* Parse the ACPI tables for possible boot-time SMP configuration.
|
||||
*/
|
||||
diff --git a/include/linux/module.h b/include/linux/module.h
|
||||
index 0c266b2..5a6374a 100644
|
||||
--- a/include/linux/module.h
|
||||
+++ b/include/linux/module.h
|
||||
@@ -184,6 +184,12 @@ const struct exception_table_entry *search_exception_tables(unsigned long add);
|
||||
|
||||
struct notifier_block;
|
||||
|
||||
+#ifdef CONFIG_MODULE_SIG
|
||||
+extern void enforce_signed_modules(void);
|
||||
+#else
|
||||
+static inline void enforce_signed_modules(void) {};
|
||||
+#endif
|
||||
+
|
||||
#ifdef CONFIG_MODULES
|
||||
|
||||
extern int modules_disabled; /* for sysctl */
|
||||
diff --git a/kernel/module.c b/kernel/module.c
|
||||
index 0e94acf..974139b 100644
|
||||
--- a/kernel/module.c
|
||||
+++ b/kernel/module.c
|
||||
@@ -3853,6 +3853,13 @@ void module_layout(struct module *mod,
|
||||
EXPORT_SYMBOL(module_layout);
|
||||
#endif
|
||||
|
||||
+#ifdef CONFIG_MODULE_SIG
|
||||
+void enforce_signed_modules(void)
|
||||
+{
|
||||
+ sig_enforce = true;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
bool secure_modules(void)
|
||||
{
|
||||
#ifdef CONFIG_MODULE_SIG
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From bb28516d346e6511f1e012321c48eb142763e539 Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@redhat.com>
|
||||
Date: Tue, 5 Feb 2013 19:25:05 -0500
|
||||
Subject: [PATCH 12/14] efi: Disable secure boot if shim is in insecure mode
|
||||
|
||||
A user can manually tell the shim boot loader to disable validation of
|
||||
images it loads. When a user does this, it creates a UEFI variable called
|
||||
MokSBState that does not have the runtime attribute set. Given that the
|
||||
user explicitly disabled validation, we can honor that and not enable
|
||||
secure boot mode if that variable is set.
|
||||
|
||||
Signed-off-by: Josh Boyer <jwboyer@redhat.com>
|
||||
---
|
||||
arch/x86/boot/compressed/eboot.c | 20 +++++++++++++++++++-
|
||||
1 file changed, 19 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
|
||||
index 53bfe4f..946028b 100644
|
||||
--- a/arch/x86/boot/compressed/eboot.c
|
||||
+++ b/arch/x86/boot/compressed/eboot.c
|
||||
@@ -864,8 +864,9 @@ fail:
|
||||
|
||||
static int get_secure_boot(void)
|
||||
{
|
||||
- u8 sb, setup;
|
||||
+ u8 sb, setup, moksbstate;
|
||||
unsigned long datasize = sizeof(sb);
|
||||
+ u32 attr;
|
||||
efi_guid_t var_guid = EFI_GLOBAL_VARIABLE_GUID;
|
||||
efi_status_t status;
|
||||
|
||||
@@ -889,6 +890,23 @@ static int get_secure_boot(void)
|
||||
if (setup == 1)
|
||||
return 0;
|
||||
|
||||
+ /* See if a user has put shim into insecure_mode. If so, and the variable
|
||||
+ * doesn't have the runtime attribute set, we might as well honor that.
|
||||
+ */
|
||||
+ var_guid = EFI_SHIM_LOCK_GUID;
|
||||
+ status = efi_call_phys5(sys_table->runtime->get_variable,
|
||||
+ L"MokSBState", &var_guid, &attr, &datasize,
|
||||
+ &moksbstate);
|
||||
+
|
||||
+ /* If it fails, we don't care why. Default to secure */
|
||||
+ if (status != EFI_SUCCESS)
|
||||
+ return 1;
|
||||
+
|
||||
+ if (!(attr & EFI_VARIABLE_RUNTIME_ACCESS)) {
|
||||
+ if (moksbstate == 1)
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
return 1;
|
||||
}
|
||||
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From 4c8824bac8d4284e66c39c365ba84151f2d78e87 Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
Date: Tue, 27 Aug 2013 13:28:43 -0400
|
||||
Subject: [PATCH 13/14] efi: Make EFI_SECURE_BOOT_SIG_ENFORCE depend on EFI
|
||||
|
||||
The functionality of the config option is dependent upon the platform being
|
||||
UEFI based. Reflect this in the config deps.
|
||||
|
||||
Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
---
|
||||
arch/x86/Kconfig | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
|
||||
index 6a6c19b..10498ec 100644
|
||||
--- a/arch/x86/Kconfig
|
||||
+++ b/arch/x86/Kconfig
|
||||
@@ -1582,7 +1582,8 @@ config EFI_STUB
|
||||
See Documentation/x86/efi-stub.txt for more information.
|
||||
|
||||
config EFI_SECURE_BOOT_SIG_ENFORCE
|
||||
- def_bool n
|
||||
+ def_bool n
|
||||
+ depends on EFI
|
||||
prompt "Force module signing when UEFI Secure Boot is enabled"
|
||||
---help---
|
||||
UEFI Secure Boot provides a mechanism for ensuring that the
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
||||
From 871b0ed1847c3c5413a4ca72ecf18735858f7708 Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
Date: Tue, 27 Aug 2013 13:33:03 -0400
|
||||
Subject: [PATCH 14/14] efi: Add EFI_SECURE_BOOT bit
|
||||
|
||||
UEFI machines can be booted in Secure Boot mode. Add a EFI_SECURE_BOOT bit
|
||||
for use with efi_enabled.
|
||||
|
||||
Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org>
|
||||
---
|
||||
arch/x86/kernel/setup.c | 2 ++
|
||||
include/linux/efi.h | 1 +
|
||||
2 files changed, 3 insertions(+)
|
||||
|
||||
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
|
||||
index deeb7bc..08dc16e 100644
|
||||
--- a/arch/x86/kernel/setup.c
|
||||
+++ b/arch/x86/kernel/setup.c
|
||||
@@ -1131,7 +1131,9 @@ void __init setup_arch(char **cmdline_p)
|
||||
|
||||
#ifdef CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE
|
||||
if (boot_params.secure_boot) {
|
||||
+ set_bit(EFI_SECURE_BOOT, &x86_efi_facility);
|
||||
enforce_signed_modules();
|
||||
+ pr_info("Secure boot enabled\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
diff --git a/include/linux/efi.h b/include/linux/efi.h
|
||||
index 5f8f176..eed2202 100644
|
||||
--- a/include/linux/efi.h
|
||||
+++ b/include/linux/efi.h
|
||||
@@ -634,6 +634,7 @@ extern int __init efi_setup_pcdp_console(char *);
|
||||
#define EFI_RUNTIME_SERVICES 3 /* Can we use runtime services? */
|
||||
#define EFI_MEMMAP 4 /* Can we use EFI memory map? */
|
||||
#define EFI_64BIT 5 /* Is the firmware 64-bit? */
|
||||
+#define EFI_SECURE_BOOT 6 /* Are we in Secure Boot mode? */
|
||||
|
||||
#ifdef CONFIG_EFI
|
||||
# ifdef CONFIG_X86
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -7,28 +7,20 @@ Some systems, such as EFI-based Apple systems, won't necessarily have an
|
|||
i8042 to initialize. We shouldn't be printing an error message in this
|
||||
case, since not detecting the chip is the correct behavior.
|
||||
---
|
||||
drivers/input/serio/i8042.c | 4 +---
|
||||
1 files changed, 1 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
|
||||
index 170f71e..4f3e632 100644
|
||||
index 52c9ebf..c374a96 100644
|
||||
--- a/drivers/input/serio/i8042.c
|
||||
+++ b/drivers/input/serio/i8042.c
|
||||
@@ -701,10 +701,8 @@ static int __devinit i8042_check_aux(void)
|
||||
|
||||
@@ -855,7 +855,6 @@ static int __init i8042_check_aux(void)
|
||||
static int i8042_controller_check(void)
|
||||
{
|
||||
- if (i8042_flush() == I8042_BUFFER_SIZE) {
|
||||
if (i8042_flush()) {
|
||||
- pr_err("No controller found\n");
|
||||
+ if (i8042_flush() == I8042_BUFFER_SIZE)
|
||||
return -ENODEV;
|
||||
- }
|
||||
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
1.6.0.1
|
||||
}
|
||||
|
||||
--
|
||||
|
||||
Socket fuzzers like sfuzz will trigger this printk a lot, even though it's
|
||||
ratelimited. It isn't particularly useful, so just remove it.
|
||||
|
||||
|
|
|
@ -1,71 +0,0 @@
|
|||
Bugzilla: 1031086
|
||||
Upstream-status: 3.12
|
||||
|
||||
From cd8fa0170867ce6e6e2d7edba1dc1a0b87485854 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Lameter <cl@linux.com>
|
||||
Date: Sat, 21 Sep 2013 21:56:34 +0000
|
||||
Subject: [PATCH] slab_common: Do not check for duplicate slab names
|
||||
|
||||
SLUB can alias multiple slab kmem_create_requests to one slab cache to save
|
||||
memory and increase the cache hotness. As a result the name of the slab can be
|
||||
stale. Only check the name for duplicates if we are in debug mode where we do
|
||||
not merge multiple caches.
|
||||
|
||||
This fixes the following problem reported by Jonathan Brassow:
|
||||
|
||||
The problem with kmem_cache* is this:
|
||||
|
||||
*) Assume CONFIG_SLUB is set
|
||||
1) kmem_cache_create(name="foo-a")
|
||||
- creates new kmem_cache structure
|
||||
2) kmem_cache_create(name="foo-b")
|
||||
- If identical cache characteristics, it will be merged with the previously
|
||||
created cache associated with "foo-a". The cache's refcount will be
|
||||
incremented and an alias will be created via sysfs_slab_alias().
|
||||
3) kmem_cache_destroy(<ptr>)
|
||||
- Attempting to destroy cache associated with "foo-a", but instead the
|
||||
refcount is simply decremented. I don't even think the sysfs aliases are
|
||||
ever removed...
|
||||
4) kmem_cache_create(name="foo-a")
|
||||
- This FAILS because kmem_cache_sanity_check colides with the existing
|
||||
name ("foo-a") associated with the non-removed cache.
|
||||
|
||||
This is a problem for RAID (specifically dm-raid) because the name used
|
||||
for the kmem_cache_create is ("raid%d-%p", level, mddev). If the cache
|
||||
persists for long enough, the memory address of an old mddev will be
|
||||
reused for a new mddev - causing an identical formulation of the cache
|
||||
name. Even though kmem_cache_destory had long ago been used to delete
|
||||
the old cache, the merging of caches has cause the name and cache of that
|
||||
old instance to be preserved and causes a colision (and thus failure) in
|
||||
kmem_cache_create(). I see this regularly in my testing.
|
||||
|
||||
Reported-by: Jonathan Brassow <jbrassow@redhat.com>
|
||||
Signed-off-by: Christoph Lameter <cl@linux.com>
|
||||
Signed-off-by: Pekka Enberg <penberg@kernel.org>
|
||||
---
|
||||
mm/slab_common.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/mm/slab_common.c b/mm/slab_common.c
|
||||
index 538bade..d434771 100644
|
||||
--- a/mm/slab_common.c
|
||||
+++ b/mm/slab_common.c
|
||||
@@ -55,6 +55,7 @@ static int kmem_cache_sanity_check(struct mem_cgroup *memcg, const char *name,
|
||||
continue;
|
||||
}
|
||||
|
||||
+#if !defined(CONFIG_SLUB) || !defined(CONFIG_SLUB_DEBUG_ON)
|
||||
/*
|
||||
* For simplicity, we won't check this in the list of memcg
|
||||
* caches. We have control over memcg naming, and if there
|
||||
@@ -68,6 +69,7 @@ static int kmem_cache_sanity_check(struct mem_cgroup *memcg, const char *name,
|
||||
s = NULL;
|
||||
return -EINVAL;
|
||||
}
|
||||
+#endif
|
||||
}
|
||||
|
||||
WARN_ON(strchr(name, ' ')); /* It confuses parsers */
|
||||
--
|
||||
1.8.3.1
|
||||
|
4
sources
4
sources
|
@ -1,2 +1,2 @@
|
|||
fea363551ff45fbe4cb88497b863b261 linux-3.11.tar.xz
|
||||
c918da07cf5ad4240945ae56c4de3bc0 patch-3.11.10.xz
|
||||
cc6ee608854e0da4b64f6c1ff8b6398c linux-3.12.tar.xz
|
||||
70e456d21f7e7c0dc2f9bd170f1ae4ee patch-3.12.5.xz
|
||||
|
|
|
@ -14,16 +14,19 @@ extraneous newline from the message.
|
|||
Signed-off-by: Jeff Layton <jlayton@redhat.com>
|
||||
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
|
||||
---
|
||||
Fixed up to apply to 3.12.1 by Josh Boyer <jwboyer@fedoraproject.org>
|
||||
|
||||
include/linux/sunrpc/rpc_pipe_fs.h | 2 ++
|
||||
net/sunrpc/auth_gss/auth_gss.c | 17 +++++++----------
|
||||
net/sunrpc/netns.h | 2 --
|
||||
net/sunrpc/rpc_pipe.c | 14 ++++++++++----
|
||||
4 files changed, 19 insertions(+), 16 deletions(-)
|
||||
|
||||
diff -up linux-3.11.9-200.fc19.x86_64/include/linux/sunrpc/rpc_pipe_fs.h.orig linux-3.11.9-200.fc19.x86_64/include/linux/sunrpc/rpc_pipe_fs.h
|
||||
--- linux-3.11.9-200.fc19.x86_64/include/linux/sunrpc/rpc_pipe_fs.h.orig 2013-11-21 10:11:17.893026000 -0500
|
||||
+++ linux-3.11.9-200.fc19.x86_64/include/linux/sunrpc/rpc_pipe_fs.h 2013-11-21 10:14:17.709348000 -0500
|
||||
@@ -94,5 +94,7 @@ extern int rpc_unlink(struct dentry *);
|
||||
diff --git a/include/linux/sunrpc/rpc_pipe_fs.h b/include/linux/sunrpc/rpc_pipe_fs.h
|
||||
index 85f1342..7f490be 100644
|
||||
--- a/include/linux/sunrpc/rpc_pipe_fs.h
|
||||
+++ b/include/linux/sunrpc/rpc_pipe_fs.h
|
||||
@@ -131,5 +131,7 @@ extern int rpc_unlink(struct dentry *);
|
||||
extern int register_rpc_pipefs(void);
|
||||
extern void unregister_rpc_pipefs(void);
|
||||
|
||||
|
@ -31,10 +34,11 @@ diff -up linux-3.11.9-200.fc19.x86_64/include/linux/sunrpc/rpc_pipe_fs.h.orig li
|
|||
+
|
||||
#endif
|
||||
#endif
|
||||
diff -up linux-3.11.9-200.fc19.x86_64/net/sunrpc/auth_gss/auth_gss.c.orig linux-3.11.9-200.fc19.x86_64/net/sunrpc/auth_gss/auth_gss.c
|
||||
--- linux-3.11.9-200.fc19.x86_64/net/sunrpc/auth_gss/auth_gss.c.orig 2013-09-02 16:46:10.000000000 -0400
|
||||
+++ linux-3.11.9-200.fc19.x86_64/net/sunrpc/auth_gss/auth_gss.c 2013-11-21 10:18:33.681923000 -0500
|
||||
@@ -507,8 +507,7 @@ static void warn_gssd(void)
|
||||
diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c
|
||||
index 0846566..1ada878 100644
|
||||
--- a/net/sunrpc/auth_gss/auth_gss.c
|
||||
+++ b/net/sunrpc/auth_gss/auth_gss.c
|
||||
@@ -517,8 +517,7 @@ static void warn_gssd(void)
|
||||
unsigned long now = jiffies;
|
||||
|
||||
if (time_after(now, ratelimit)) {
|
||||
|
@ -44,7 +48,7 @@ diff -up linux-3.11.9-200.fc19.x86_64/net/sunrpc/auth_gss/auth_gss.c.orig linux-
|
|||
ratelimit = now + 15*HZ;
|
||||
}
|
||||
}
|
||||
@@ -571,7 +570,6 @@ gss_create_upcall(struct gss_auth *gss_a
|
||||
@@ -581,7 +580,6 @@ gss_create_upcall(struct gss_auth *gss_auth, struct gss_cred *gss_cred)
|
||||
struct rpc_pipe *pipe;
|
||||
struct rpc_cred *cred = &gss_cred->gc_base;
|
||||
struct gss_upcall_msg *gss_msg;
|
||||
|
@ -52,7 +56,7 @@ diff -up linux-3.11.9-200.fc19.x86_64/net/sunrpc/auth_gss/auth_gss.c.orig linux-
|
|||
DEFINE_WAIT(wait);
|
||||
int err;
|
||||
|
||||
@@ -579,17 +577,16 @@ gss_create_upcall(struct gss_auth *gss_a
|
||||
@@ -589,17 +587,16 @@ gss_create_upcall(struct gss_auth *gss_auth, struct gss_cred *gss_cred)
|
||||
__func__, from_kuid(&init_user_ns, cred->cr_uid));
|
||||
retry:
|
||||
err = 0;
|
||||
|
@ -65,7 +69,7 @@ diff -up linux-3.11.9-200.fc19.x86_64/net/sunrpc/auth_gss/auth_gss.c.orig linux-
|
|||
+ warn_gssd();
|
||||
+ return -EACCES;
|
||||
+ }
|
||||
gss_msg = gss_setup_upcall(gss_auth->client, gss_auth, cred);
|
||||
gss_msg = gss_setup_upcall(gss_auth, cred);
|
||||
if (PTR_ERR(gss_msg) == -EAGAIN) {
|
||||
err = wait_event_interruptible_timeout(pipe_version_waitqueue,
|
||||
- sn->pipe_version >= 0, timeout);
|
||||
|
@ -76,9 +80,10 @@ diff -up linux-3.11.9-200.fc19.x86_64/net/sunrpc/auth_gss/auth_gss.c.orig linux-
|
|||
warn_gssd();
|
||||
err = -EACCES;
|
||||
}
|
||||
diff -up linux-3.11.9-200.fc19.x86_64/net/sunrpc/netns.h.orig linux-3.11.9-200.fc19.x86_64/net/sunrpc/netns.h
|
||||
--- linux-3.11.9-200.fc19.x86_64/net/sunrpc/netns.h.orig 2013-11-21 10:11:17.897029000 -0500
|
||||
+++ linux-3.11.9-200.fc19.x86_64/net/sunrpc/netns.h 2013-11-21 10:14:17.722351000 -0500
|
||||
diff --git a/net/sunrpc/netns.h b/net/sunrpc/netns.h
|
||||
index 8a8e841..94e506f 100644
|
||||
--- a/net/sunrpc/netns.h
|
||||
+++ b/net/sunrpc/netns.h
|
||||
@@ -33,8 +33,6 @@ struct sunrpc_net {
|
||||
int pipe_version;
|
||||
atomic_t pipe_users;
|
||||
|
@ -88,9 +93,10 @@ diff -up linux-3.11.9-200.fc19.x86_64/net/sunrpc/netns.h.orig linux-3.11.9-200.f
|
|||
};
|
||||
|
||||
extern int sunrpc_net_id;
|
||||
diff -up linux-3.11.9-200.fc19.x86_64/net/sunrpc/rpc_pipe.c.orig linux-3.11.9-200.fc19.x86_64/net/sunrpc/rpc_pipe.c
|
||||
--- linux-3.11.9-200.fc19.x86_64/net/sunrpc/rpc_pipe.c.orig 2013-11-21 10:11:17.903026000 -0500
|
||||
+++ linux-3.11.9-200.fc19.x86_64/net/sunrpc/rpc_pipe.c 2013-11-21 10:14:17.727348000 -0500
|
||||
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c
|
||||
index 40aef18..ad444f3 100644
|
||||
--- a/net/sunrpc/rpc_pipe.c
|
||||
+++ b/net/sunrpc/rpc_pipe.c
|
||||
@@ -216,14 +216,11 @@ rpc_destroy_inode(struct inode *inode)
|
||||
static int
|
||||
rpc_pipe_open(struct inode *inode, struct file *filp)
|
||||
|
@ -106,7 +112,7 @@ diff -up linux-3.11.9-200.fc19.x86_64/net/sunrpc/rpc_pipe.c.orig linux-3.11.9-20
|
|||
pipe = RPC_I(inode)->pipe;
|
||||
if (pipe == NULL)
|
||||
goto out;
|
||||
@@ -1082,7 +1079,6 @@ int rpc_pipefs_init_net(struct net *net)
|
||||
@@ -1231,7 +1228,6 @@ int rpc_pipefs_init_net(struct net *net)
|
||||
return PTR_ERR(sn->gssd_dummy);
|
||||
|
||||
mutex_init(&sn->pipefs_sb_lock);
|
||||
|
@ -114,7 +120,7 @@ diff -up linux-3.11.9-200.fc19.x86_64/net/sunrpc/rpc_pipe.c.orig linux-3.11.9-20
|
|||
sn->pipe_version = -1;
|
||||
return 0;
|
||||
}
|
||||
@@ -1236,6 +1232,16 @@ err_depopulate:
|
||||
@@ -1385,6 +1381,16 @@ err_depopulate:
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -131,4 +137,3 @@ diff -up linux-3.11.9-200.fc19.x86_64/net/sunrpc/rpc_pipe.c.orig linux-3.11.9-20
|
|||
static struct dentry *
|
||||
rpc_mount(struct file_system_type *fs_type,
|
||||
int flags, const char *dev_name, void *data)
|
||||
|
||||
|
|
|
@ -0,0 +1,243 @@
|
|||
From 71aac34ed679daa0bf772051eb40412b5bd95da3 Mon Sep 17 00:00:00 2001
|
||||
From: Kyle McMartin <kyle@redhat.com>
|
||||
Date: Fri, 30 Aug 2013 09:28:51 -0400
|
||||
Subject: [PATCH] Add sysrq option to disable secure boot mode
|
||||
|
||||
---
|
||||
arch/x86/kernel/setup.c | 35 +++++++++++++++++++++++++++++++++++
|
||||
drivers/input/misc/uinput.c | 1 +
|
||||
drivers/tty/sysrq.c | 19 +++++++++++++------
|
||||
include/linux/input.h | 5 +++++
|
||||
include/linux/sysrq.h | 8 +++++++-
|
||||
kernel/debug/kdb/kdb_main.c | 2 +-
|
||||
kernel/module.c | 4 ++--
|
||||
7 files changed, 64 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
|
||||
index 08dc16e..6971f8e 100644
|
||||
--- a/arch/x86/kernel/setup.c
|
||||
+++ b/arch/x86/kernel/setup.c
|
||||
@@ -70,6 +70,11 @@
|
||||
#include <linux/tboot.h>
|
||||
#include <linux/jiffies.h>
|
||||
|
||||
+#include <linux/fips.h>
|
||||
+#include <linux/cred.h>
|
||||
+#include <linux/sysrq.h>
|
||||
+#include <linux/init_task.h>
|
||||
+
|
||||
#include <video/edid.h>
|
||||
|
||||
#include <asm/mtrr.h>
|
||||
@@ -1253,3 +1258,33 @@ void __init i386_reserve_resources(void)
|
||||
}
|
||||
|
||||
#endif /* CONFIG_X86_32 */
|
||||
+
|
||||
+#ifdef CONFIG_MAGIC_SYSRQ
|
||||
+#ifdef CONFIG_MODULE_SIG
|
||||
+extern bool sig_enforce;
|
||||
+#endif
|
||||
+
|
||||
+static void sysrq_handle_secure_boot(int key)
|
||||
+{
|
||||
+ if (!efi_enabled(EFI_SECURE_BOOT))
|
||||
+ return;
|
||||
+
|
||||
+ pr_info("Secure boot disabled\n");
|
||||
+#ifdef CONFIG_MODULE_SIG
|
||||
+ sig_enforce = fips_enabled;
|
||||
+#endif
|
||||
+}
|
||||
+static struct sysrq_key_op secure_boot_sysrq_op = {
|
||||
+ .handler = sysrq_handle_secure_boot,
|
||||
+ .help_msg = "unSB(x)",
|
||||
+ .action_msg = "Disabling Secure Boot restrictions",
|
||||
+ .enable_mask = SYSRQ_DISABLE_USERSPACE,
|
||||
+};
|
||||
+static int __init secure_boot_sysrq(void)
|
||||
+{
|
||||
+ if (efi_enabled(EFI_SECURE_BOOT))
|
||||
+ register_sysrq_key('x', &secure_boot_sysrq_op);
|
||||
+ return 0;
|
||||
+}
|
||||
+late_initcall(secure_boot_sysrq);
|
||||
+#endif /*CONFIG_MAGIC_SYSRQ*/
|
||||
diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c
|
||||
index a0a4bba..3327cc3 100644
|
||||
--- a/drivers/input/misc/uinput.c
|
||||
+++ b/drivers/input/misc/uinput.c
|
||||
@@ -351,6 +351,7 @@ static int uinput_allocate_device(struct uinput_device *udev)
|
||||
if (!udev->dev)
|
||||
return -ENOMEM;
|
||||
|
||||
+ udev->dev->flags |= INPUTDEV_FLAGS_SYNTHETIC;
|
||||
udev->dev->event = uinput_dev_event;
|
||||
input_set_drvdata(udev->dev, udev);
|
||||
|
||||
diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
|
||||
index d5cc3ac..05b33f5 100644
|
||||
--- a/drivers/tty/sysrq.c
|
||||
+++ b/drivers/tty/sysrq.c
|
||||
@@ -461,6 +461,7 @@ static struct sysrq_key_op *sysrq_key_table[36] = {
|
||||
&sysrq_showstate_blocked_op, /* w */
|
||||
/* x: May be registered on ppc/powerpc for xmon */
|
||||
/* x: May be registered on sparc64 for global PMU dump */
|
||||
+ /* x: May be registered on x86_64 for disabling secure boot */
|
||||
NULL, /* x */
|
||||
/* y: May be registered on sparc64 for global register dump */
|
||||
NULL, /* y */
|
||||
@@ -504,7 +505,7 @@ static void __sysrq_put_key_op(int key, struct sysrq_key_op *op_p)
|
||||
sysrq_key_table[i] = op_p;
|
||||
}
|
||||
|
||||
-void __handle_sysrq(int key, bool check_mask)
|
||||
+void __handle_sysrq(int key, int from)
|
||||
{
|
||||
struct sysrq_key_op *op_p;
|
||||
int orig_log_level;
|
||||
@@ -524,11 +525,15 @@ void __handle_sysrq(int key, bool check_mask)
|
||||
|
||||
op_p = __sysrq_get_key_op(key);
|
||||
if (op_p) {
|
||||
+ /* Ban synthetic events from some sysrq functionality */
|
||||
+ if ((from == SYSRQ_FROM_PROC || from == SYSRQ_FROM_SYNTHETIC) &&
|
||||
+ op_p->enable_mask & SYSRQ_DISABLE_USERSPACE)
|
||||
+ printk("This sysrq operation is disabled from userspace.\n");
|
||||
/*
|
||||
* Should we check for enabled operations (/proc/sysrq-trigger
|
||||
* should not) and is the invoked operation enabled?
|
||||
*/
|
||||
- if (!check_mask || sysrq_on_mask(op_p->enable_mask)) {
|
||||
+ if (from == SYSRQ_FROM_KERNEL || sysrq_on_mask(op_p->enable_mask)) {
|
||||
printk("%s\n", op_p->action_msg);
|
||||
console_loglevel = orig_log_level;
|
||||
op_p->handler(key);
|
||||
@@ -559,7 +564,7 @@ void __handle_sysrq(int key, bool check_mask)
|
||||
void handle_sysrq(int key)
|
||||
{
|
||||
if (sysrq_on())
|
||||
- __handle_sysrq(key, true);
|
||||
+ __handle_sysrq(key, SYSRQ_FROM_KERNEL);
|
||||
}
|
||||
EXPORT_SYMBOL(handle_sysrq);
|
||||
|
||||
@@ -639,7 +644,7 @@ static void sysrq_do_reset(unsigned long _state)
|
||||
static void sysrq_handle_reset_request(struct sysrq_state *state)
|
||||
{
|
||||
if (state->reset_requested)
|
||||
- __handle_sysrq(sysrq_xlate[KEY_B], false);
|
||||
+ __handle_sysrq(sysrq_xlate[KEY_B], SYSRQ_FROM_KERNEL);
|
||||
|
||||
if (sysrq_reset_downtime_ms)
|
||||
mod_timer(&state->keyreset_timer,
|
||||
@@ -756,8 +761,10 @@ static bool sysrq_handle_keypress(struct sysrq_state *sysrq,
|
||||
|
||||
default:
|
||||
if (sysrq->active && value && value != 2) {
|
||||
+ int from = sysrq->handle.dev->flags & INPUTDEV_FLAGS_SYNTHETIC ?
|
||||
+ SYSRQ_FROM_SYNTHETIC : 0;
|
||||
sysrq->need_reinject = false;
|
||||
- __handle_sysrq(sysrq_xlate[code], true);
|
||||
+ __handle_sysrq(sysrq_xlate[code], from);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1038,7 +1045,7 @@ static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf,
|
||||
|
||||
if (get_user(c, buf))
|
||||
return -EFAULT;
|
||||
- __handle_sysrq(c, false);
|
||||
+ __handle_sysrq(c, SYSRQ_FROM_PROC);
|
||||
}
|
||||
|
||||
return count;
|
||||
diff --git a/include/linux/input.h b/include/linux/input.h
|
||||
index 82ce323..9e534f2 100644
|
||||
--- a/include/linux/input.h
|
||||
+++ b/include/linux/input.h
|
||||
@@ -42,6 +42,7 @@ struct input_value {
|
||||
* @phys: physical path to the device in the system hierarchy
|
||||
* @uniq: unique identification code for the device (if device has it)
|
||||
* @id: id of the device (struct input_id)
|
||||
+ * @flags: input device flags (SYNTHETIC, etc.)
|
||||
* @propbit: bitmap of device properties and quirks
|
||||
* @evbit: bitmap of types of events supported by the device (EV_KEY,
|
||||
* EV_REL, etc.)
|
||||
@@ -124,6 +125,8 @@ struct input_dev {
|
||||
const char *uniq;
|
||||
struct input_id id;
|
||||
|
||||
+ unsigned int flags;
|
||||
+
|
||||
unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)];
|
||||
|
||||
unsigned long evbit[BITS_TO_LONGS(EV_CNT)];
|
||||
@@ -190,6 +193,8 @@ struct input_dev {
|
||||
};
|
||||
#define to_input_dev(d) container_of(d, struct input_dev, dev)
|
||||
|
||||
+#define INPUTDEV_FLAGS_SYNTHETIC 0x000000001
|
||||
+
|
||||
/*
|
||||
* Verify that we are in sync with input_device_id mod_devicetable.h #defines
|
||||
*/
|
||||
diff --git a/include/linux/sysrq.h b/include/linux/sysrq.h
|
||||
index 7faf933..87ae634 100644
|
||||
--- a/include/linux/sysrq.h
|
||||
+++ b/include/linux/sysrq.h
|
||||
@@ -31,6 +31,8 @@
|
||||
#define SYSRQ_ENABLE_BOOT 0x0080
|
||||
#define SYSRQ_ENABLE_RTNICE 0x0100
|
||||
|
||||
+#define SYSRQ_DISABLE_USERSPACE 0x00010000
|
||||
+
|
||||
struct sysrq_key_op {
|
||||
void (*handler)(int);
|
||||
char *help_msg;
|
||||
@@ -45,8 +47,12 @@ struct sysrq_key_op {
|
||||
* are available -- else NULL's).
|
||||
*/
|
||||
|
||||
+#define SYSRQ_FROM_KERNEL 0x0001
|
||||
+#define SYSRQ_FROM_PROC 0x0002
|
||||
+#define SYSRQ_FROM_SYNTHETIC 0x0004
|
||||
+
|
||||
void handle_sysrq(int key);
|
||||
-void __handle_sysrq(int key, bool check_mask);
|
||||
+void __handle_sysrq(int key, int from);
|
||||
int register_sysrq_key(int key, struct sysrq_key_op *op);
|
||||
int unregister_sysrq_key(int key, struct sysrq_key_op *op);
|
||||
struct sysrq_key_op *__sysrq_get_key_op(int key);
|
||||
diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c
|
||||
index 00eb8f7..54fbbcc 100644
|
||||
--- a/kernel/debug/kdb/kdb_main.c
|
||||
+++ b/kernel/debug/kdb/kdb_main.c
|
||||
@@ -1921,7 +1921,7 @@ static int kdb_sr(int argc, const char **argv)
|
||||
if (argc != 1)
|
||||
return KDB_ARGCOUNT;
|
||||
kdb_trap_printk++;
|
||||
- __handle_sysrq(*argv[1], false);
|
||||
+ __handle_sysrq(*argv[1], SYSRQ_FROM_KERNEL);
|
||||
kdb_trap_printk--;
|
||||
|
||||
return 0;
|
||||
diff --git a/kernel/module.c b/kernel/module.c
|
||||
index bc7c987..5e4e2c2 100644
|
||||
--- a/kernel/module.c
|
||||
+++ b/kernel/module.c
|
||||
@@ -109,9 +109,9 @@ struct list_head *kdb_modules = &modules; /* kdb needs the list of modules */
|
||||
|
||||
#ifdef CONFIG_MODULE_SIG
|
||||
#ifdef CONFIG_MODULE_SIG_FORCE
|
||||
-static bool sig_enforce = true;
|
||||
+bool sig_enforce = true;
|
||||
#else
|
||||
-static bool sig_enforce = false;
|
||||
+bool sig_enforce = false;
|
||||
|
||||
static int param_set_bool_enable_only(const char *val,
|
||||
const struct kernel_param *kp)
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
diff --git a/kernel/module.c b/kernel/module.c
|
||||
index 921bed4..382414e 100644
|
||||
--- a/kernel/module.c
|
||||
+++ b/kernel/module.c
|
||||
@@ -2873,6 +2873,10 @@ static int check_module_license_and_versions(struct module *mod)
|
||||
if (strcmp(mod->name, "ndiswrapper") == 0)
|
||||
add_taint(TAINT_PROPRIETARY_MODULE, LOCKDEP_NOW_UNRELIABLE);
|
||||
|
||||
+ /* vbox is garbage. */
|
||||
+ if (strcmp(mod->name, "vboxdrv") == 0)
|
||||
+ add_taint(TAINT_CRAP, LOCKDEP_NOW_UNRELIABLE);
|
||||
+
|
||||
/* driverloader was caught wrongly pretending to be under GPL */
|
||||
if (strcmp(mod->name, "driverloader") == 0)
|
||||
add_taint_module(mod, TAINT_PROPRIETARY_MODULE,
|
|
@ -1,37 +0,0 @@
|
|||
From 52f48d0d9aaa621ffa5e08d79da99a3f8c93b848 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@openwrt.org>
|
||||
Date: Tue, 12 Nov 2013 16:34:41 +0100
|
||||
Subject: [PATCH] usbnet: fix status interrupt urb handling
|
||||
|
||||
Since commit 7b0c5f21f348a66de495868b8df0284e8dfd6bbf
|
||||
"sierra_net: keep status interrupt URB active", sierra_net triggers
|
||||
status interrupt polling before the net_device is opened (in order to
|
||||
properly receive the sync message response).
|
||||
|
||||
To be able to receive further interrupts, the interrupt urb needs to be
|
||||
re-submitted, so this patch removes the bogus check for netif_running().
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
||||
Tested-by: Dan Williams <dcbw@redhat.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/usb/usbnet.c | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
|
||||
index 90a429b..8494bb5 100644
|
||||
--- a/drivers/net/usb/usbnet.c
|
||||
+++ b/drivers/net/usb/usbnet.c
|
||||
@@ -204,9 +204,6 @@ static void intr_complete (struct urb *urb)
|
||||
break;
|
||||
}
|
||||
|
||||
- if (!netif_running (dev->net))
|
||||
- return;
|
||||
-
|
||||
status = usb_submit_urb (urb, GFP_ATOMIC);
|
||||
if (status != 0)
|
||||
netif_err(dev, timer, dev->net,
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
From: Julian Stecklina <jsteckli@os.info.tu-dresden.de>
|
||||
Subject: [PATCH] vfio, iommu: Fixed interaction of VFIO_IOMMU_MAP_DMA with IOMMU address limits
|
||||
|
||||
The BUG_ON in drivers/iommu/intel-iommu.c:785 can be triggered from userspace via
|
||||
VFIO by calling the VFIO_IOMMU_MAP_DMA ioctl on a vfio device with any address
|
||||
beyond the addressing capabilities of the IOMMU. The problem is that the ioctl code
|
||||
calls iommu_iova_to_phys before it calls iommu_map. iommu_map handles the case that
|
||||
it gets addresses beyond the addressing capabilities of its IOMMU.
|
||||
intel_iommu_iova_to_phys does not.
|
||||
|
||||
This patch fixes iommu_iova_to_phys to return NULL for addresses beyond what the
|
||||
IOMMU can handle. This in turn causes the ioctl call to fail in iommu_map and
|
||||
(correctly) return EFAULT to the user with a helpful warning message in the kernel
|
||||
log.
|
||||
|
||||
Signed-off-by: Julian Stecklina <jsteckli@os.inf.tu-dresden.de>
|
||||
---
|
||||
drivers/iommu/intel-iommu.c | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
|
||||
index eec0d3e..61303db 100644
|
||||
--- a/drivers/iommu/intel-iommu.c
|
||||
+++ b/drivers/iommu/intel-iommu.c
|
||||
@@ -782,7 +782,11 @@ static struct dma_pte *pfn_to_dma_pte(struct dmar_domain *domain,
|
||||
int offset;
|
||||
|
||||
BUG_ON(!domain->pgd);
|
||||
- BUG_ON(addr_width < BITS_PER_LONG && pfn >> addr_width);
|
||||
+
|
||||
+ if (addr_width < BITS_PER_LONG && pfn >> addr_width)
|
||||
+ /* Address beyond IOMMU's addressing capabilities. */
|
||||
+ return NULL;
|
||||
+
|
||||
parent = domain->pgd;
|
||||
|
||||
while (level > 0) {
|
||||
--
|
||||
1.8.3.1
|
|
@ -1,121 +0,0 @@
|
|||
Bugzilla: 1022733
|
||||
Upstream: Submitted for 3.13 and 3.12.y stable
|
||||
Delivered-To: jwboyer@gmail.com
|
||||
Received: by 10.76.104.107 with SMTP id gd11csp116929oab;
|
||||
Mon, 25 Nov 2013 15:45:36 -0800 (PST)
|
||||
X-Received: by 10.68.254.105 with SMTP id ah9mr20726084pbd.87.1385423136297;
|
||||
Mon, 25 Nov 2013 15:45:36 -0800 (PST)
|
||||
Return-Path: <netdev-owner@vger.kernel.org>
|
||||
Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67])
|
||||
by mx.google.com with ESMTP id am2si28999873pad.96.2013.11.25.15.44.53
|
||||
for <multiple recipients>;
|
||||
Mon, 25 Nov 2013 15:45:36 -0800 (PST)
|
||||
Received-SPF: pass (google.com: best guess record for domain of netdev-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67;
|
||||
Authentication-Results: mx.google.com;
|
||||
spf=pass (google.com: best guess record for domain of netdev-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mail=netdev-owner@vger.kernel.org
|
||||
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
||||
id S1753536Ab3KYXl6 (ORCPT <rfc822;lnxuff@gmail.com> + 99 others);
|
||||
Mon, 25 Nov 2013 18:41:58 -0500
|
||||
Received: from violet.fr.zoreil.com ([92.243.8.30]:57806 "EHLO
|
||||
violet.fr.zoreil.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
||||
with ESMTP id S1751913Ab3KYXlz (ORCPT
|
||||
<rfc822;netdev@vger.kernel.org>); Mon, 25 Nov 2013 18:41:55 -0500
|
||||
Received: from violet.fr.zoreil.com (localhost [127.0.0.1])
|
||||
by violet.fr.zoreil.com (8.14.5/8.14.5) with ESMTP id rAPNewrt012676;
|
||||
Tue, 26 Nov 2013 00:40:58 +0100
|
||||
Received: (from romieu@localhost)
|
||||
by violet.fr.zoreil.com (8.14.5/8.14.5/Submit) id rAPNewbX012675;
|
||||
Tue, 26 Nov 2013 00:40:58 +0100
|
||||
Date: Tue, 26 Nov 2013 00:40:58 +0100
|
||||
From: Francois Romieu <romieu@fr.zoreil.com>
|
||||
To: netdev@vger.kernel.org
|
||||
Cc: David Miller <davem@davemloft.net>,
|
||||
"Alex A. Schmidt" <aaschmidt1@gmail.com>,
|
||||
Michele Baldessari <michele@acksyn.org>,
|
||||
Jamie Heilman <jamie@audible.transient.net>,
|
||||
Julia Lawall <Julia.Lawall@lip6.fr>
|
||||
Subject: [PATCH net 1/1] via-velocity: fix netif_receive_skb use in irq
|
||||
disabled section.
|
||||
Message-ID: <20131125234058.GA12566@electric-eye.fr.zoreil.com>
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=us-ascii
|
||||
Content-Disposition: inline
|
||||
X-Organisation: Land of Sunshine Inc.
|
||||
User-Agent: Mutt/1.5.21 (2010-09-15)
|
||||
Sender: netdev-owner@vger.kernel.org
|
||||
Precedence: bulk
|
||||
List-ID: <netdev.vger.kernel.org>
|
||||
X-Mailing-List: netdev@vger.kernel.org
|
||||
|
||||
2fdac010bdcf10a30711b6924612dfc40daf19b8 ("via-velocity.c: update napi
|
||||
implementation") overlooked an irq disabling spinlock when the Rx part
|
||||
of the NAPI poll handler was converted from netif_rx to netif_receive_skb.
|
||||
|
||||
NAPI Rx processing can be taken out of the locked section with a pair of
|
||||
napi_{disable / enable} since it only races with the MTU change function.
|
||||
|
||||
An heavier rework of the NAPI locking would be able to perform NAPI Tx
|
||||
before Rx where I simply removed one of velocity_tx_srv calls.
|
||||
|
||||
References: https://bugzilla.redhat.com/show_bug.cgi?id=1022733
|
||||
Fixes: 2fdac010bdcf (via-velocity.c: update napi implementation)
|
||||
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
|
||||
Tested-by: Alex A. Schmidt <aaschmidt1@gmail.com>
|
||||
Cc: Jamie Heilman <jamie@audible.transient.net>
|
||||
Cc: Michele Baldessari <michele@acksyn.org>
|
||||
Cc: Julia Lawall <Julia.Lawall@lip6.fr>
|
||||
---
|
||||
|
||||
It is relevant for stable 3.11.x and 3.12.y.
|
||||
|
||||
drivers/net/ethernet/via/via-velocity.c | 11 ++++++-----
|
||||
1 file changed, 6 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/via/via-velocity.c b/drivers/net/ethernet/via/via-velocity.c
|
||||
index d022bf9..ad61d26 100644
|
||||
--- a/drivers/net/ethernet/via/via-velocity.c
|
||||
+++ b/drivers/net/ethernet/via/via-velocity.c
|
||||
@@ -2172,16 +2172,13 @@ static int velocity_poll(struct napi_struct *napi, int budget)
|
||||
unsigned int rx_done;
|
||||
unsigned long flags;
|
||||
|
||||
- spin_lock_irqsave(&vptr->lock, flags);
|
||||
/*
|
||||
* Do rx and tx twice for performance (taken from the VIA
|
||||
* out-of-tree driver).
|
||||
*/
|
||||
- rx_done = velocity_rx_srv(vptr, budget / 2);
|
||||
- velocity_tx_srv(vptr);
|
||||
- rx_done += velocity_rx_srv(vptr, budget - rx_done);
|
||||
+ rx_done = velocity_rx_srv(vptr, budget);
|
||||
+ spin_lock_irqsave(&vptr->lock, flags);
|
||||
velocity_tx_srv(vptr);
|
||||
-
|
||||
/* If budget not fully consumed, exit the polling mode */
|
||||
if (rx_done < budget) {
|
||||
napi_complete(napi);
|
||||
@@ -2342,6 +2339,8 @@ static int velocity_change_mtu(struct net_device *dev, int new_mtu)
|
||||
if (ret < 0)
|
||||
goto out_free_tmp_vptr_1;
|
||||
|
||||
+ napi_disable(&vptr->napi);
|
||||
+
|
||||
spin_lock_irqsave(&vptr->lock, flags);
|
||||
|
||||
netif_stop_queue(dev);
|
||||
@@ -2362,6 +2361,8 @@ static int velocity_change_mtu(struct net_device *dev, int new_mtu)
|
||||
|
||||
velocity_give_many_rx_descs(vptr);
|
||||
|
||||
+ napi_enable(&vptr->napi);
|
||||
+
|
||||
mac_enable_int(vptr->mac_regs);
|
||||
netif_start_queue(dev);
|
||||
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe netdev" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
|
@ -1,20 +0,0 @@
|
|||
diff --git a/include/linux/mmdebug.h b/include/linux/mmdebug.h
|
||||
index 580bd58..3d908e9 100644
|
||||
--- a/include/linux/mmdebug.h
|
||||
+++ b/include/linux/mmdebug.h
|
||||
@@ -2,13 +2,13 @@
|
||||
#define LINUX_MM_DEBUG_H 1
|
||||
|
||||
#ifdef CONFIG_DEBUG_VM
|
||||
-#define VM_BUG_ON(cond) BUG_ON(cond)
|
||||
+#define VM_BUG_ON(cond) WARN_ON(cond)
|
||||
#else
|
||||
#define VM_BUG_ON(cond) BUILD_BUG_ON_INVALID(cond)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DEBUG_VIRTUAL
|
||||
-#define VIRTUAL_BUG_ON(cond) BUG_ON(cond)
|
||||
+#define VIRTUAL_BUG_ON(cond) WARN_ON(cond)
|
||||
#else
|
||||
#define VIRTUAL_BUG_ON(cond) do { } while (0)
|
||||
#endif
|
|
@ -0,0 +1,13 @@
|
|||
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
|
||||
index f67e839..d726b2d 100644
|
||||
--- a/arch/x86/Kconfig
|
||||
+++ b/arch/x86/Kconfig
|
||||
@@ -825,7 +825,7 @@ config MAXSMP
|
||||
config NR_CPUS
|
||||
int "Maximum number of CPUs" if SMP && !MAXSMP
|
||||
range 2 8 if SMP && X86_32 && !X86_BIGSMP
|
||||
- range 2 512 if SMP && !MAXSMP
|
||||
+ range 2 1024 if SMP && !MAXSMP
|
||||
default "1" if !SMP
|
||||
default "4096" if MAXSMP
|
||||
default "32" if SMP && (X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000)
|
Loading…
Reference in New Issue