summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustin M. Forbes <jforbes@redhat.com>2013-12-09 09:28:52 -0600
committerJustin M. Forbes <jforbes@redhat.com>2013-12-09 09:28:52 -0600
commit06c368d01904e22fd8d94efe47cba52cf30af3d6 (patch)
tree271dcd30a2a301ad6d2c7e1d0158e1de340d6601
parent636d1173770251eb2d1e460cc88cd31532855e7f (diff)
downloadkernel-06c368d01904e22fd8d94efe47cba52cf30af3d6.tar.gz
kernel-06c368d01904e22fd8d94efe47cba52cf30af3d6.tar.xz
kernel-06c368d01904e22fd8d94efe47cba52cf30af3d6.zip
Linux v3.12.4
-rw-r--r--0001-ip6_output-fragment-outgoing-reassembled-skb-properl.patch39
-rw-r--r--0002-netfilter-push-reasm-skb-through-instead-of-original.patch499
-rw-r--r--drm-radeon-24hz-audio-fixes.patch173
-rw-r--r--elevator-Fix-a-race-in-elevator-switching-and-md.patch163
-rw-r--r--elevator-acquire-q-sysfs_lock-in-elevator_change.patch122
-rw-r--r--inet-fix-addr_len-msg_namelen-assignment-in-recv_error-and-rxpmtu-functions.patch253
-rw-r--r--inet-prevent-leakage-of-uninitialized-memory-to-user.patch256
-rw-r--r--iommu-Remove-stack-trace-from-broken-irq-remapping-warning.patch50
-rw-r--r--ipv6-fix-headroom-calculation-in-udp6_ufo_fragment.patch43
-rw-r--r--kernel.spec77
-rw-r--r--ntp-Make-periodic-RTC-update-more-reliable.patch47
-rw-r--r--rt2800-add-support-for-rf3070.patch87
-rw-r--r--sources2
-rw-r--r--usbnet-fix-status-interrupt-urb-handling.patch40
-rw-r--r--vfio-iommu-Fixed-interaction-of-VFIO_IOMMU_MAP_DMA.patch42
-rw-r--r--via-velocity-fix-netif_receive_skb-use-in-irq-disable.patch121
16 files changed, 5 insertions, 2009 deletions
diff --git a/0001-ip6_output-fragment-outgoing-reassembled-skb-properl.patch b/0001-ip6_output-fragment-outgoing-reassembled-skb-properl.patch
deleted file mode 100644
index a19217d12..000000000
--- a/0001-ip6_output-fragment-outgoing-reassembled-skb-properl.patch
+++ /dev/null
@@ -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
-
diff --git a/0002-netfilter-push-reasm-skb-through-instead-of-original.patch b/0002-netfilter-push-reasm-skb-through-instead-of-original.patch
deleted file mode 100644
index 27fee5173..000000000
--- a/0002-netfilter-push-reasm-skb-through-instead-of-original.patch
+++ /dev/null
@@ -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
-
diff --git a/drm-radeon-24hz-audio-fixes.patch b/drm-radeon-24hz-audio-fixes.patch
deleted file mode 100644
index 4fd8341ed..000000000
--- a/drm-radeon-24hz-audio-fixes.patch
+++ /dev/null
@@ -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
-
diff --git a/elevator-Fix-a-race-in-elevator-switching-and-md.patch b/elevator-Fix-a-race-in-elevator-switching-and-md.patch
deleted file mode 100644
index f8d8cca2b..000000000
--- a/elevator-Fix-a-race-in-elevator-switching-and-md.patch
+++ /dev/null
@@ -1,163 +0,0 @@
-Bugzilla: 902012
-Upstream-status: 3.13
-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/
diff --git a/elevator-acquire-q-sysfs_lock-in-elevator_change.patch b/elevator-acquire-q-sysfs_lock-in-elevator_change.patch
deleted file mode 100644
index 02c767c67..000000000
--- a/elevator-acquire-q-sysfs_lock-in-elevator_change.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-Bugzilla: 902012
-Upstream-status: 3.13
-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/
diff --git a/inet-fix-addr_len-msg_namelen-assignment-in-recv_error-and-rxpmtu-functions.patch b/inet-fix-addr_len-msg_namelen-assignment-in-recv_error-and-rxpmtu-functions.patch
deleted file mode 100644
index b76fd2a36..000000000
--- a/inet-fix-addr_len-msg_namelen-assignment-in-recv_error-and-rxpmtu-functions.patch
+++ /dev/null
@@ -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
-
diff --git a/inet-prevent-leakage-of-uninitialized-memory-to-user.patch b/inet-prevent-leakage-of-uninitialized-memory-to-user.patch
deleted file mode 100644
index c5b941134..000000000
--- a/inet-prevent-leakage-of-uninitialized-memory-to-user.patch
+++ /dev/null
@@ -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
-
diff --git a/iommu-Remove-stack-trace-from-broken-irq-remapping-warning.patch b/iommu-Remove-stack-trace-from-broken-irq-remapping-warning.patch
deleted file mode 100644
index 235f514b6..000000000
--- a/iommu-Remove-stack-trace-from-broken-irq-remapping-warning.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-Bugzilla: 982153
-Upstream-status: 3.13
-
-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
diff --git a/ipv6-fix-headroom-calculation-in-udp6_ufo_fragment.patch b/ipv6-fix-headroom-calculation-in-udp6_ufo_fragment.patch
deleted file mode 100644
index 0895c0930..000000000
--- a/ipv6-fix-headroom-calculation-in-udp6_ufo_fragment.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-Bugzilla: 1030015
-Upstream-status: 3.13
-
-From 0e033e04c2678dbbe74a46b23fffb7bb918c288e 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 08e23b0..e7359f9 100644
---- a/net/ipv6/udp_offload.c
-+++ b/net/ipv6/udp_offload.c
-@@ -90,7 +90,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
-
diff --git a/kernel.spec b/kernel.spec
index cc293e143..9b6e62caa 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -74,7 +74,7 @@ Summary: The Linux kernel
%if 0%{?released_kernel}
# Do we have a -stable update to apply?
-%define stable_update 3
+%define stable_update 4
# Is it a -stable RC?
%define stable_rc 0
# Set rpm version accordingly
@@ -708,22 +708,6 @@ Patch22000: weird-root-dentry-name-debug.patch
Patch25047: drm-radeon-Disable-writeback-by-default-on-ppc.patch
-#rhbz 985522
-Patch25107: ntp-Make-periodic-RTC-update-more-reliable.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
-Patch25116: rt2800-add-support-for-rf3070.patch
-
-#rhbz 982153
-Patch25123: iommu-Remove-stack-trace-from-broken-irq-remapping-warning.patch
-
-#rhbz 998732
-Patch25124: vfio-iommu-Fixed-interaction-of-VFIO_IOMMU_MAP_DMA.patch
-
#rhbz 896695
Patch25127: 0002-iwlwifi-don-t-WARN-on-bad-firmware-state.patch
@@ -735,19 +719,9 @@ Patch25129: cpupower-Fix-segfault-due-to-incorrect-getopt_long-a.patch
Patch25140: drm-qxl-backport-fixes-for-Fedora.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
-
#rhbz 1011362
Patch25148: alx-Reset-phy-speed-after-resume.patch
-#rhbz 1010679
-Patch25149: drm-radeon-24hz-audio-fixes.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
@@ -756,16 +730,6 @@ 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
@@ -1441,22 +1405,6 @@ ApplyPatch ath9k_rx_dma_stop_check.patch
ApplyPatch drm-radeon-Disable-writeback-by-default-on-ppc.patch
-#rhbz 985522
-ApplyPatch ntp-Make-periodic-RTC-update-more-reliable.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 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 0002-iwlwifi-don-t-WARN-on-bad-firmware-state.patch
@@ -1468,19 +1416,9 @@ ApplyPatch cpupower-Fix-segfault-due-to-incorrect-getopt_long-a.patch
ApplyPatch drm-qxl-backport-fixes-for-Fedora.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 1010679
-ApplyPatch drm-radeon-24hz-audio-fixes.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
@@ -1489,16 +1427,6 @@ 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
@@ -2305,6 +2233,9 @@ fi
# ||----w |
# || ||
%changelog
+* Mon Dec 09 2013 Justin M. Forbes <jforbes@fedoraproject.org> - 3.12.4-1
+- Linux v3.12.4
+
* Thu Dec 05 2013 Josh Boyer <jwboyer@fedoraproject.org>
- Add various fixes for keys crashes and an SELinux issue (rhbz 1035000)
diff --git a/ntp-Make-periodic-RTC-update-more-reliable.patch b/ntp-Make-periodic-RTC-update-more-reliable.patch
deleted file mode 100644
index a2f6cea47..000000000
--- a/ntp-Make-periodic-RTC-update-more-reliable.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-Bugzilla: 985522
-Upstream-status: 3.13
-
-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
-
diff --git a/rt2800-add-support-for-rf3070.patch b/rt2800-add-support-for-rf3070.patch
deleted file mode 100644
index dba9860bd..000000000
--- a/rt2800-add-support-for-rf3070.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-Bugzilla: 974072
-Upstream-status: 3.13
-
-Add support for new RF chip ID: 3070. It seems to be the same as 5370,
-maybe vendor just put wrong value on the eeprom, but add this id anyway
-since devices with it showed on the marked.
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
-
-diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
-index fa33b5e..e3eb952 100644
---- a/drivers/net/wireless/rt2x00/rt2800.h
-+++ b/drivers/net/wireless/rt2x00/rt2800.h
-@@ -52,6 +52,7 @@
- * RF3322 2.4G 2T2R(RT3352/RT3371/RT3372/RT3391/RT3392)
- * RF3053 2.4G/5G 3T3R(RT3883/RT3563/RT3573/RT3593/RT3662)
- * RF5592 2.4G/5G 2T2R
-+ * RF3070 2.4G 1T1R
- * RF5360 2.4G 1T1R
- * RF5370 2.4G 1T1R
- * RF5390 2.4G 1T1R
-@@ -70,6 +71,7 @@
- #define RF3322 0x000c
- #define RF3053 0x000d
- #define RF5592 0x000f
-+#define RF3070 0x3070
- #define RF3290 0x3290
- #define RF5360 0x5360
- #define RF5370 0x5370
-diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
-index 88ce656..d2f638f 100644
---- a/drivers/net/wireless/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
-@@ -3152,6 +3152,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:
-@@ -3166,7 +3167,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) ||
-@@ -4264,6 +4266,7 @@ void rt2800_vco_calibration(struct rt2x00_dev *rt2x00dev)
- rt2800_rfcsr_write(rt2x00dev, 7, rfcsr);
- break;
- case RF3053:
-+ case RF3070:
- case RF3290:
- case RF5360:
- case RF5370:
-@@ -7021,6 +7024,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
- case RF3022:
- case RF3052:
- case RF3053:
-+ case RF3070:
- case RF3290:
- case RF3320:
- case RF3322:
-@@ -7543,6 +7547,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) ||
-@@ -7671,6 +7676,7 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
- case RF3320:
- case RF3052:
- case RF3053:
-+ case RF3070:
- case RF3290:
- case RF5360:
- case RF5370:
---
-To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
-the body of a message to majordomo@vger.kernel.org
-More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/sources b/sources
index dfd21ab0b..838437cbf 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
cc6ee608854e0da4b64f6c1ff8b6398c linux-3.12.tar.xz
-b7a603bf67e69936cf049fc6b37d9085 patch-3.12.3.xz
+511b5a2f0de55b5e91fd293766ce182b patch-3.12.4.xz
diff --git a/usbnet-fix-status-interrupt-urb-handling.patch b/usbnet-fix-status-interrupt-urb-handling.patch
deleted file mode 100644
index 2e60e0727..000000000
--- a/usbnet-fix-status-interrupt-urb-handling.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-Bugzilla: 998342
-Upstream-status: 3.13
-
-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
-
diff --git a/vfio-iommu-Fixed-interaction-of-VFIO_IOMMU_MAP_DMA.patch b/vfio-iommu-Fixed-interaction-of-VFIO_IOMMU_MAP_DMA.patch
deleted file mode 100644
index 7cced5a81..000000000
--- a/vfio-iommu-Fixed-interaction-of-VFIO_IOMMU_MAP_DMA.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-Bugzilla: 998732
-Upstream-status: 3.13
-
-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
diff --git a/via-velocity-fix-netif_receive_skb-use-in-irq-disable.patch b/via-velocity-fix-netif_receive_skb-use-in-irq-disable.patch
deleted file mode 100644
index 820f47056..000000000
--- a/via-velocity-fix-netif_receive_skb-use-in-irq-disable.patch
+++ /dev/null
@@ -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