2.6.20-stable review
Subsystems (10)
cover 2.6.20-stable review
This is the start of the stable review cycle for the 2.6.20.3 release. There are 20 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let us know. If anyone is a maintainer of the proper subsystem, and wants to add a Signed-off-by: line to the patch, please respond with it.
These patches are sent out with a number of different people on the Cc:
line. If you wish to be a reviewer, please email [email protected] to add your name to the list. If you want to be off the reviewer list, also email us.
Responses should be made by Tuesday March 13 00:00:00 UTC. Anything received after that time might be too late.
thanks,
greg k-h
PATCH 1/20 conntrack: fix {nf, ip}_ct_iterate_cleanup endless loops
-stable review patch. If anyone has any objections, please let us know.
------------------
From: Patrick McHardy <[email protected]>
[NETFILTER]: conntrack: fix {nf,ip}_ct_iterate_cleanup endless loops
Fix {nf,ip}_ct_iterate_cleanup unconfirmed list handling:
- unconfirmed entries can not be killed manually, they are removed on confirmation or final destruction of the conntrack entry, which means we might iterate forever without making forward progress.
This can happen in combination with the conntrack event cache, which holds a reference to the conntrack entry, which is only released when the packet makes it all the way through the stack or a different packet is handled.
- taking references to an unconfirmed entry and using it outside the locked section doesn't work, the list entries are not refcounted and another CPU might already be waiting to destroy the entry
What the code really wants to do is make sure the references of the hash table to the selected conntrack entries are released, so they will be destroyed once all references from skbs and the event cache are dropped.
Since unconfirmed entries haven't even entered the hash yet, simply mark them as dying and skip confirmation based on that.
--- include/linux/netfilter_ipv4/ip_conntrack_core.h | 2 +- include/net/netfilter/nf_conntrack_core.h | 2 +- net/ipv4/netfilter/ip_conntrack_core.c | 2 +- net/netfilter/nf_conntrack_core.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-)
include/linux/netfilter_ipv4/ip_conntrack_core.h +1 -1
@@ -45,7 +45,7 @@ static inline int ip_conntrack_confirm(sint ret =NF_ACCEPT ;if (ct) { -if (!is_confirmed (ct)) +if (!is_confirmed (ct) && !is_dying (ct)) ret =__ip_conntrack_confirm (pskb);ip_ct_deliver_cached_events (ct); }
include/net/netfilter/nf_conntrack_core.h +1 -1
@@ -64,7 +64,7 @@ static inline int nf_conntrack_confirm(sint ret =NF_ACCEPT ;if (ct) { -if (!nf_ct_is_confirmed (ct)) +if (!nf_ct_is_confirmed (ct) && !nf_ct_is_dying (ct)) ret =__nf_conntrack_confirm (pskb);nf_ct_deliver_cached_events (ct); }
net/ipv4/netfilter/ip_conntrack_core.c +1 -1
@@ -1242,7 +1242,7 @@ get_next_corpse(int (*iter)(struct ip_colist_for_each_entry (h, &unconfirmed, list) { ct =tuplehash_to_ctrack (h);if (iter (ct, data)) - goto found; +set_bit (IPS_DYING_BIT , &ct->status); }write_unlock_bh (&ip_conntrack_lock);return NULL ;
net/netfilter/nf_conntrack_core.c +1 -1
@@ -1052,7 +1052,7 @@ get_next_corpse(int (*iter)(struct nf_colist_for_each_entry (h, &unconfirmed, list) { ct =nf_ct_tuplehash_to_ctrack (h);if (iter (ct, data)) - goto found; +set_bit (IPS_DYING_BIT , &ct->status); }write_unlock_bh (&nf_conntrack_lock);return NULL ;
PATCH 2/20 nf_conntrack/nf_nat: fix incorrect config ifdefs
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Patrick McHardy <[email protected]>
[NETFILTER]: nf_conntrack/nf_nat: fix incorrect config ifdefs
The nf_conntrack_netlink config option is named CONFIG_NF_CT_NETLINK, but multiple files use CONFIG_IP_NF_CONNTRACK_NETLINK or CONFIG_NF_CONNTRACK_NETLINK for ifdefs.
--- net/ipv4/netfilter/nf_nat_core.c | 3 +-- net/ipv4/netfilter/nf_nat_proto_gre.c | 3 +-- net/ipv4/netfilter/nf_nat_proto_icmp.c | 3 +-- net/ipv4/netfilter/nf_nat_proto_tcp.c | 3 +-- net/ipv4/netfilter/nf_nat_proto_udp.c | 3 +-- net/netfilter/nf_conntrack_proto_gre.c | 3 +-- 6 files changed, 6 insertions(+), 12 deletions(-)
net/ipv4/netfilter/nf_nat_core.c +1 -2
@@ -540,8 +540,7 @@ void nf_nat_protocol_unregister(struct n }EXPORT_SYMBOL (nf_nat_protocol_unregister); -#if defined(CONFIG_IP_NF_CONNTRACK_NETLINK ) || \ - defined(CONFIG_IP_NF_CONNTRACK_NETLINK_MODULE ) +#if defined(CONFIG_NF_CT_NETLINK ) || defined(CONFIG_NF_CT_NETLINK_MODULE )int nf_nat_port_range_to_nfattr (struct sk_buff *skb,const struct nf_nat_range *range)
net/ipv4/netfilter/nf_nat_proto_gre.c +1 -2
@@ -152,8 +152,7 @@ static struct nf_nat_protocol gre __read .manip_pkt = gre_manip_pkt, .in_range = gre_in_range, .unique_tuple = gre_unique_tuple, -#if defined(CONFIG_IP_NF_CONNTRACK_NETLINK ) || \ - defined(CONFIG_IP_NF_CONNTRACK_NETLINK_MODULE ) +#if defined(CONFIG_NF_CT_NETLINK ) || defined(CONFIG_NF_CT_NETLINK_MODULE ) .range_to_nfattr = nf_nat_port_range_to_nfattr, .nfattr_to_range = nf_nat_port_nfattr_to_range,#endif
net/ipv4/netfilter/nf_nat_proto_icmp.c +1 -2
@@ -78,8 +78,7 @@ struct nf_nat_protocol nf_nat_protocol_i .manip_pkt = icmp_manip_pkt, .in_range = icmp_in_range, .unique_tuple = icmp_unique_tuple, -#if defined(CONFIG_IP_NF_CONNTRACK_NETLINK ) || \ - defined(CONFIG_IP_NF_CONNTRACK_NETLINK_MODULE ) +#if defined(CONFIG_NF_CT_NETLINK ) || defined(CONFIG_NF_CT_NETLINK_MODULE ) .range_to_nfattr = nf_nat_port_range_to_nfattr, .nfattr_to_range = nf_nat_port_nfattr_to_range,#endif
net/ipv4/netfilter/nf_nat_proto_tcp.c +1 -2
@@ -140,8 +140,7 @@ struct nf_nat_protocol nf_nat_protocol_t .manip_pkt = tcp_manip_pkt, .in_range = tcp_in_range, .unique_tuple = tcp_unique_tuple, -#if defined(CONFIG_IP_NF_CONNTRACK_NETLINK ) || \ - defined(CONFIG_IP_NF_CONNTRACK_NETLINK_MODULE ) +#if defined(CONFIG_NF_CT_NETLINK ) || defined(CONFIG_NF_CT_NETLINK_MODULE ) .range_to_nfattr = nf_nat_port_range_to_nfattr, .nfattr_to_range = nf_nat_port_nfattr_to_range,#endif
net/ipv4/netfilter/nf_nat_proto_udp.c +1 -2
@@ -130,8 +130,7 @@ struct nf_nat_protocol nf_nat_protocol_u .manip_pkt = udp_manip_pkt, .in_range = udp_in_range, .unique_tuple = udp_unique_tuple, -#if defined(CONFIG_IP_NF_CONNTRACK_NETLINK ) || \ - defined(CONFIG_IP_NF_CONNTRACK_NETLINK_MODULE ) +#if defined(CONFIG_NF_CT_NETLINK ) || defined(CONFIG_NF_CT_NETLINK_MODULE ) .range_to_nfattr = nf_nat_port_range_to_nfattr, .nfattr_to_range = nf_nat_port_nfattr_to_range,#endif
net/netfilter/nf_conntrack_proto_gre.c +1 -2
@@ -281,8 +281,7 @@ static struct nf_conntrack_l4proto nf_co .new = gre_new, .destroy = gre_destroy, .me = THIS_MODULE, -#if defined(CONFIG_NF_CONNTRACK_NETLINK ) || \ - defined(CONFIG_NF_CONNTRACK_NETLINK_MODULE ) +#if defined(CONFIG_NF_CT_NETLINK ) || defined(CONFIG_NF_CT_NETLINK_MODULE ) .tuple_to_nfattr = nf_ct_port_tuple_to_nfattr, .nfattr_to_tuple = nf_ct_port_nfattr_to_tuple,#endif
PATCH 3/20 tcp conntrack: accept SYN|URG as valid
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Patrick McHardy <[email protected]>
[NETFILTER]: tcp conntrack: accept SYN|URG as valid
Some stacks apparently send packets with SYN|URG set. Linux accepts these packets, so TCP conntrack should to.
Pointed out by Martijn Posthuma <[email protected]>.
--- net/ipv4/netfilter/ip_conntrack_proto_tcp.c | 4 +++- net/netfilter/nf_conntrack_proto_tcp.c | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-)
net/ipv4/netfilter/ip_conntrack_proto_tcp.c +3 -1
@@ -821,8 +821,10 @@ void ip_conntrack_tcp_update(struct sk_bstatic const u8 tcp_valid_flags[(TH_FIN |TH_SYN |TH_RST |TH_PUSH |TH_ACK |TH_URG ) +1 ] = { [TH_SYN ] =1 , - [TH_SYN |TH_ACK ] =1 , [TH_SYN |TH_PUSH ] =1 , + [TH_SYN |TH_URG ] =1 , + [TH_SYN |TH_PUSH |TH_URG ] =1 , + [TH_SYN |TH_ACK ] =1 , [TH_SYN |TH_ACK |TH_PUSH ] =1 , [TH_RST ] =1 , [TH_RST |TH_ACK ] =1 ,
net/netfilter/nf_conntrack_proto_tcp.c +3 -1
@@ -778,8 +778,10 @@ EXPORT_SYMBOL_GPL(nf_conntrack_tcp_updatstatic u8 tcp_valid_flags[(TH_FIN |TH_SYN |TH_RST |TH_PUSH |TH_ACK |TH_URG ) +1 ] = { [TH_SYN ] =1 , - [TH_SYN |TH_ACK ] =1 , [TH_SYN |TH_PUSH ] =1 , + [TH_SYN |TH_URG ] =1 , + [TH_SYN |TH_PUSH |TH_URG ] =1 , + [TH_SYN |TH_ACK ] =1 , [TH_SYN |TH_ACK |TH_PUSH ] =1 , [TH_RST ] =1 , [TH_RST |TH_ACK ] =1 ,
PATCH 4/20 nfnetlink_log: fix reference leak
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Patrick McHardy <[email protected]>
[NETFILTER]: nfnetlink_log: fix reference leak
Stop reference leaking in nfulnl_log_packet(). If we start a timer we are already taking another reference.
--- net/netfilter/nfnetlink_log.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
net/netfilter/nfnetlink_log.c +4 -3
@@ -720,15 +720,16 @@ nfulnl_log_packet(unsigned int pf, inst->timer.expires = jiffies + (inst->flushtimeout*HZ /100 );add_timer (&inst->timer); } -spin_unlock_bh (&inst->lock); +unlock_and_release: +spin_unlock_bh (&inst->lock); +instance_put (inst);return ; alloc_failure: -spin_unlock_bh (&inst->lock); -instance_put (inst);UDEBUG ("error allocating skb\n" );/* FIXME: statistics */ + goto unlock_and_release; } static int
PATCH 5/20 nfnetlink_log: fix use after free
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Patrick McHardy <[email protected]>
[NETFILTER]: nfnetlink_log: fix use after free
Paranoia: instance_put() might have freed the inst pointer when we spin_unlock_bh().
--- net/netfilter/nfnetlink_log.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/netfilter/nfnetlink_log.c +1 -1
@@ -397,8 +397,8 @@ static void nfulnl_timer(unsigned long dif (timer_pending (&inst->timer))/* is it always true or false here? */ del_timer (&inst->timer);__nfulnl_send (inst); -instance_put (inst);spin_unlock_bh (&inst->lock); +instance_put (inst); }/* This is an inline function, we don't really care about a long
PATCH 6/20 nfnetlink_log: fix NULL pointer dereference
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Micha Mirosaw <[email protected]>
[NETFILTER]: nfnetlink_log: fix NULL pointer dereference
Fix the nasty NULL dereference on multiple packets per netlink message.
BUG: unable to handle kernel NULL pointer dereference at virtual address 00000004 printing eip: f8a4b3bf *pde = 00000000 Oops: 0002 [#1] SMP Modules linked in: nfnetlink_log ipt_ttl ipt_REDIRECT xt_tcpudp iptable_nat nf_nat nf_conntrack
_ipv4 xt_state ipt_ipp2p xt_NFLOG xt_hashlimit ip6_tables iptable_filter xt_multiport xt_mark i pt_set iptable_raw xt_MARK iptable_mangle ip_tables cls_fw cls_u32 sch_esfq sch_htb ip_set_ipma p ip_set ipt_ULOG x_tables dm_snapshot dm_mirror loop e1000 parport_pc parport e100 floppy ide_ cd cdrom
CPU: 0 EIP: 0060:[<f8a4b3bf>] Not tainted VLI EFLAGS: 00010206 (2.6.20 #5)
EIP is at __nfulnl_send+0x24/0x51 [nfnetlink_log]
eax: 00000000 ebx: f2b5cbc0 ecx: c03f5f54 edx: c03f4000
esi: f2b5cbc8 edi: c03f5f54 ebp: f8a4b3ec esp: c03f5f30
ds: 007b es: 007b ss: 0068
Process swapper (pid: 0, ti=c03f4000 task=c03bece0 task.ti=c03f4000)
Stack: f2b5cbc0 f8a4b401 00000100 c0444080 c012af49 00000000 f6f19100 f6f19000
c1707800 c03f5f54 c03f5f54 00000123 00000021 c03e8d08 c0426380 00000009
c0126932 00000000 00000046 c03e9980 c03e6000 0047b007 c01269bd 00000000
Call Trace:
[<f8a4b401>] nfulnl_timer+0x15/0x25 [nfnetlink_log]
[<c012af49>] run_timer_softirq+0x10a/0x164
[<c0126932>] __do_softirq+0x60/0xba
[<c01269bd>] do_softirq+0x31/0x35
[<c0104f6e>] do_IRQ+0x62/0x74
[<c01036cb>] common_interrupt+0x23/0x28
[<c0101018>] default_idle+0x0/0x3f
[<c0101045>] default_idle+0x2d/0x3f
[<c01010fa>] cpu_idle+0xa0/0xb9
[<c03fb7f5>] start_kernel+0x1a8/0x1ac
[<c03fb293>] unknown_bootoption+0x0/0x181
=======================
Code: 5e 5f 5b 5e 5f 5d c3 53 89 c3 8d 40 1c 83 7b 1c 00 74 05 e8 2c ee 6d c7 83 7b 14 00 75 04
31 c0 eb 34 83 7b 10 01 76 09 8b 43 18 <66> c7 40 04 03 00 8b 53 34 8b 43 14 b9 40 00 00 00 e8
08 9a 84
EIP: [<f8a4b3bf>] __nfulnl_send+0x24/0x51 [nfnetlink_log] SS:ESP 0068:c03f5f30
<0>Kernel panic - not syncing: Fatal exception in interrupt
<0>Rebooting in 5 seconds..Panic no more!
--- net/netfilter/nfnetlink_log.c | 1 + 1 file changed, 1 insertion(+)
net/netfilter/nfnetlink_log.c +1 -0
@@ -564,6 +564,7 @@ __build_packet_message(struct nfulnl_ins } nlh->nlmsg_len = inst->skb->tail - old_tail; + inst->lastnlh = nlh;return 0 ; nlmsg_failure:
PATCH 7/20 nfnetlink_log: fix possible NULL pointer dereference
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Michal Miroslaw <[email protected]>
[NETFILTER]: nfnetlink_log: fix possible NULL pointer dereference
Eliminate possible NULL pointer dereference in nfulnl_recv_config().
--- net/netfilter/nfnetlink_log.c | 4 ++++ 1 file changed, 4 insertions(+)
net/netfilter/nfnetlink_log.c +4 -0
@@ -867,6 +867,9 @@ nfulnl_recv_config(struct sock *ctnl, st ret = -EINVAL ;break ; } + +if (!inst) + goto out; }else {if (!inst) { UDEBUG("no config command, and no instance for "
@@ -920,6 +923,7 @@ nfulnl_recv_config(struct sock *ctnl, st out_put:instance_put (inst); +out:return ret; }
PATCH 8/20 ip6_route_me_harder should take into account mark
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Yasuyuki Kozakai <[email protected]>
[NETFILTER]: ip6_route_me_harder should take into account mark
--- net/ipv6/netfilter.c | 1 + 1 file changed, 1 insertion(+)
net/ipv6/netfilter.c +1 -0
@@ -15,6 +15,7 @@ int ip6_route_me_harder(struct sk_buff *struct dst_entry *dst;struct flowi fl = { .oif = skb->sk ? skb->sk->sk_bound_dev_if :0 , + .mark = skb->mark, .nl_u = { .ip6_u = { .daddr = iph->daddr,
PATCH 9/20 nf_conntrack: fix incorrect classification of IPv6 fragments as ESTABLISHED
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Patrick McHardy <[email protected]>
[NETFILTER]: nf_conntrack: fix incorrect classification of IPv6 fragments as ESTABLISHED
The individual fragments of a packet reassembled by conntrack have the conntrack reference from the reassembled packet attached, but nfctinfo is not copied. This leaves it initialized to 0, which unfortunately is the value of IP_CT_ESTABLISHED.
The result is that all IPv6 fragments are tracked as ESTABLISHED, allowing them to bypass a usual ruleset which accepts ESTABLISHED packets early.
--- net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c | 1 + 1 file changed, 1 insertion(+)
net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c +1 -0
@@ -257,6 +257,7 @@ static unsigned int ipv6_conntrack_in(un }nf_conntrack_get (reasm->nfct); (*pskb)->nfct = reasm->nfct; + (*pskb)->nfctinfo = reasm->nfctinfo;return NF_ACCEPT ; }
PATCH 10/20 nfnetlink_log: zero-terminate prefix
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Patrick McHardy <[email protected]>
[NETFILTER]: nfnetlink_log: zero-terminate prefix
Userspace expects a zero-terminated string, so include the trailing zero in the netlink message.
--- net/netfilter/nfnetlink_log.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/netfilter/nfnetlink_log.c +1 -1
@@ -620,7 +620,7 @@ nfulnl_log_packet(unsigned int pf, plen =0 ;if (prefix) - plen =strlen (prefix); + plen =strlen (prefix) +1 ;/* all macros expand to constant values at compile time */ /* FIXME: do we want to make the size calculation conditional based on
PATCH 11/20 nfnetlink_log: fix crash on bridged packet
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Patrick McHardy <[email protected]>
[NETFILTER]: nfnetlink_log: fix crash on bridged packet
physoutdev is only set on purely bridged packet, when nfnetlink_log is used in the OUTPUT/FORWARD/POSTROUTING hooks on packets forwarded from or to a bridge it crashes when trying to dereference skb->nf_bridge->physoutdev.
Reported by Holger Eitzenberger <[email protected]>
--- net/netfilter/nfnetlink_log.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/netfilter/nfnetlink_log.c +1 -1
@@ -491,7 +491,7 @@ __build_packet_message(struct nfulnl_ins* for physical device (when called from ipv4) */ NFA_PUT (inst->skb,NFULA_IFINDEX_OUTDEV ,sizeof (tmp_uint), &tmp_uint); -if (skb->nf_bridge) { +if (skb->nf_bridge && skb->nf_bridge->physoutdev) { tmp_uint =htonl (skb->nf_bridge->physoutdev->ifindex); NFA_PUT(inst->skb, NFULA_IFINDEX_PHYSOUTDEV,
PATCH 12/20 nfnetlink_log: fix reference counting
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Michal Miroslaw <[email protected]>
[NETFILTER]: nfnetlink_log: fix reference counting
Fix reference counting (memory leak) problem in __nfulnl_send() and callers related to packet queueing.
--- net/netfilter/nfnetlink_log.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/netfilter/nfnetlink_log.c +2 -1
@@ -220,7 +220,8 @@ _instance_destroy2(struct nfulnl_instanc/* timer "holds" one reference (we have one more) */ if (timer_pending (&inst->timer)) {del_timer (&inst->timer); -instance_put (inst); + +instance_put (inst); }if (inst->qlen)__nfulnl_send (inst);
Re: [stable] [patch 12/20] nfnetlink_log: fix reference counting
Quoted 22 lines · Greg KH
-stable review patch. If anyone has any objections, please let us know.
------------------
From: Michal Miroslaw <[email protected]>[NETFILTER]:
nfnetlink_log: fix reference countingFix reference counting (memory leak) problem in
__nfulnl_send()and callers related to packet queueing.Signed-off-by Michal Miroslaw <[email protected]>Signed-off-by Patrick McHardy <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>--- net/netfilter/nfnetlink_log.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/netfilter/nfnetlink_log.c _instance_destroy2(struct nfulnl_instanc · line 227
Quoted 9 lines
net/netfilter/nfnetlink_log.c +2
-1@@ -220,7 +220,8 @@ _instance_destroy2(struct nfulnl_instanc/* timer "holds" one reference (we have one more) */ if (timer_pending (&inst->timer)) {del_timer (&inst->timer); -instance_put (inst); + +instance_put (inst); }if (inst->qlen)__nfulnl_send (inst);
As this patch does nothing, it's now dropped. It was my fault as the original patch didn't apply and I messed up using quilt here.
thanks,
greg k-h
Re: [stable] [patch 12/20] nfnetlink_log: fix reference counting
Quoted 4 lines · Greg KH
Quoted 2 lines
[NETFILTER]:
nfnetlink_log: fix reference countingAs this patch does nothing, it's now dropped. It was my fault as the original patch didn't apply and I messed up using quilt here.
Sorry, I must have messed up something. I've fixed up the original patch, this one should apply on top of the stable queue with the broken patch removed.
[NETFILTER]: nfnetlink_log: fix reference counting
Fix reference counting (memory leak) problem in __nfulnl_send() and callers related to packet queueing.
---
commit 3ed110cfb9e71fa5f6c44720f20a8e705e9bad0c
tree 607c19476244b034aaf8c0da12f04349cd48bf90
parent 43ff9c5b97da4d085ddf5e37a12a25ed74c14d5a
author Michal Miroslaw <[email protected]> Tue, 13 Mar 2007 16:41:58 +0100 committer Patrick McHardy <[email protected]> Tue, 13 Mar 2007 16:41:58 +0100
net/netfilter/nfnetlink_log.c | 8 ++------ 1 files changed, 2 insertions(+), 6 deletions(-)
net/netfilter/nfnetlink_log.c +2 -6
@@ -218,10 +218,8 @@ _instance_destroy2(struct nfulnl_instancspin_lock_bh (&inst->lock);if (inst->skb) {/* timer "holds" one reference (we have one more) */ -if (timer_pending (&inst->timer)) { -del_timer (&inst->timer); +if (del_timer (&inst->timer))instance_put (inst); - }if (inst->qlen)__nfulnl_send (inst);if (inst->skb) {
@@ -695,10 +693,8 @@ #endifUDEBUG ("flushing old skb\n" );/* timer "holds" one reference (we have another one) */ -if (timer_pending (&inst->timer)) { -del_timer (&inst->timer); +if (del_timer (&inst->timer))instance_put (inst); - }__nfulnl_send (inst);if (!(inst->skb =nfulnl_alloc_skb (nlbufsiz, size))) {
PATCH 13/20 Fix bug 7994 sleeping function called from invalid context
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Douglas Gilbert <[email protected]>
- addresses the reported bug (with GFP_KERNEL -> GFP_ATOMIC)
- improves error checking, and
- is a subset of the changes to scsi_debug in lk 2.6.21-rc*
Compiled and lightly tested (in lk 2.6.21-rc2 environment).
--- drivers/scsi/scsi_debug.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)
drivers/scsi/scsi_debug.c +9 -3
@@ -954,7 +954,9 @@ static int resp_inquiry(struct scsi_cmndint alloc_len, n, ret; alloc_len = (cmd[3 ] <<8 ) + cmd[4 ]; - arr =kzalloc (SDEBUG_MAX_INQ_ARR_SZ ,GFP_KERNEL ); + arr =kzalloc (SDEBUG_MAX_INQ_ARR_SZ ,GFP_ATOMIC ); +if (! arr) +return DID_REQUEUE <<16 ;if (devip->wlun) pq_pdt =0x1e ;/* present, wlun */ else if (scsi_debug_no_lun_0 && (0 == devip->lun))
@@ -1217,7 +1219,9 @@ static int resp_report_tgtpgs(struct scs alen = ((cmd[6 ] <<24 ) + (cmd[7 ] <<16 ) + (cmd[8 ] <<8 ) + cmd[9 ]); - arr =kzalloc (SDEBUG_MAX_TGTPGS_ARR_SZ ,GFP_KERNEL ); + arr =kzalloc (SDEBUG_MAX_TGTPGS_ARR_SZ ,GFP_ATOMIC ); +if (! arr) +return DID_REQUEUE <<16 ;/* * EVPD page 0x88 states we have two ports, one * real and a fake port with no device connected.
@@ -1996,6 +2000,8 @@ static int scsi_debug_slave_configure(stif (sdp->host->max_cmd_len !=SCSI_DEBUG_MAX_CMD_LEN ) sdp->host->max_cmd_len =SCSI_DEBUG_MAX_CMD_LEN ; devip =devInfoReg (sdp); +if (NULL == devip) +return 1 ;/* no resources, will be marked offline */ sdp->hostdata = devip;if (sdp->host->cmd_per_lun) scsi_adjust_queue_depth(sdp, SDEBUG_TAGGED_QUEUING,
@@ -2044,7 +2050,7 @@ static struct sdebug_dev_info * devInfoR } }if (NULL == open_devip) {/* try and make a new one */ - open_devip =kzalloc (sizeof (*open_devip),GFP_KERNEL ); + open_devip =kzalloc (sizeof (*open_devip),GFP_ATOMIC );if (NULL == open_devip) {printk (KERN_ERR "%s: out of memory at line %d\n" , __FUNCTION__, __LINE__);
PATCH 14/20 bcm43xx: Fix problem with >1 GB RAM
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Larry Finger <[email protected]>
[PATCH] bcm43xx: Fix problem with >1 GB RAM
Some versions of the bcm43xx chips only support 30-bit DMA, which means that the descriptors and buffers must be in the first 1 GB of RAM. On the i386 and x86_64 architectures with more than 1 GB RAM, an incorrect assignment may occur. This patch ensures that the various DMA addresses are within the capability of the chip. Testing has been limited to x86_64 as no one has an i386 system with more than 1 GB RAM.
--- drivers/net/wireless/bcm43xx/bcm43xx.h | 1 drivers/net/wireless/bcm43xx/bcm43xx_dma.c | 171 +++++++++++++++++++++-------- 2 files changed, 125 insertions(+), 47 deletions(-)
drivers/net/wireless/bcm43xx/bcm43xx.h +1 -0
@@ -766,6 +766,7 @@ struct bcm43xx_private {* This is currently always BCM43xx_BUSTYPE_PCI */ u8 bustype; +u64 dma_mask;u16 board_vendor;u16 board_type;
drivers/net/wireless/bcm43xx/bcm43xx_dma.c +124 -47
259 lines not on this page · raw message
PATCH 15/20 Fix compat_getsockopt
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Johannes Berg <[email protected]>
[NET]: Fix compat_sock_common_getsockopt typo.
This patch fixes a typo in compat_sock_common_getsockopt.
--- net/core/sock.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/core/sock.c +1 -1
@@ -1597,7 +1597,7 @@ int compat_sock_common_getsockopt(struct {struct sock *sk = sock->sk; -if (sk->sk_prot->compat_setsockopt !=NULL ) +if (sk->sk_prot->compat_getsockopt !=NULL )return sk->sk_prot->compat_getsockopt (sk, level, optname, optval, optlen);return sk->sk_prot->getsockopt (sk, level, optname, optval, optlen);
PATCH 16/20 fix for bugzilla #7544 (keyspan USB-to-serial converter)
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Rainer Weikusat <[email protected]>
At least the Keyspan USA-19HS USB-to-serial converter supports two different configurations, one where the input endpoints have interrupt transfer type and one where they are bulk endpoints. The default UHCI configuration uses the interrupt input endpoints. The keyspan driver, OTOH, assumes that the device has only bulk endpoints (all URBs are initialized by calling usb_fill_bulk_urb in keyspan.c/ keyspan_setup_urb). This causes the interval field of the input URBs to have a value of zero instead of one, which 'accidentally' worked with Linux at least up to 2.6.17.11 but stopped to with 2.6.18, which changed the UHCI support code handling URBs for interrupt endpoints. The patch below modifies to driver to initialize its input URBs either as interrupt or as bulk URBs, depending on the transfertype contained in the associated endpoint descriptor (only tested with the default configuration) enabling the driver to again receive data from the serial converter.
Greg K-H reworked the patch.
--- drivers/usb/serial/keyspan.c | 49 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 4 deletions(-)
drivers/usb/serial/keyspan.c +45 -4
@@ -1275,11 +1275,31 @@ static int keyspan_fake_startup (struct }/* Helper functions used by keyspan_setup_urbs */ +static struct usb_endpoint_descriptor const *find_ep (struct usb_serial const *serial, +int endpoint) +{ +struct usb_host_interface *iface_desc; +struct usb_endpoint_descriptor *ep; +int i; + + iface_desc = serial->interface->cur_altsetting; +for (i =0 ; i < iface_desc->desc.bNumEndpoints; ++i) { + ep = &iface_desc->endpoint[i].desc; +if (ep->bEndpointAddress == endpoint) +return ep; + } +dev_warn (&serial->interface->dev,"found no endpoint descriptor for " +"endpoint %x\n" , endpoint); +return NULL ; +} +static struct urb *keyspan_setup_urb (struct usb_serial *serial,int endpoint,int dir,void *ctx,char *buf,int len,void (*callback)(struct urb *)) {struct urb *urb; +struct usb_endpoint_descriptor const *ep_desc; +char const *ep_type_name;if (endpoint ==-1 )return NULL ;/* endpoint not needed */
@@ -1291,11 +1311,32 @@ static struct urb *keyspan_setup_urb (streturn NULL ; } -/* Fill URB using supplied data. */ -usb_fill_bulk_urb (urb, serial->dev, -usb_sndbulkpipe (serial->dev, endpoint) | dir, - buf, len, callback, ctx); + ep_desc =find_ep (serial, endpoint); +if (!ep_desc) { +/* leak the urb, something's wrong and the callers don't care */ +return urb; + } +if (usb_endpoint_xfer_int (ep_desc)) { + ep_type_name ="INT" ; +usb_fill_int_urb (urb, serial->dev, +usb_sndintpipe (serial->dev, endpoint) | dir, + buf, len, callback, ctx, + ep_desc->bInterval); + }else if (usb_endpoint_xfer_bulk (ep_desc)) { + ep_type_name ="BULK" ; +usb_fill_bulk_urb (urb, serial->dev, +usb_sndbulkpipe (serial->dev, endpoint) | dir, + buf, len, callback, ctx); + }else { +dev_warn (&serial->interface->dev, +"unsupported endpoint type %x\n" , + ep_desc->bmAttributes &USB_ENDPOINT_XFERTYPE_MASK ); +usb_free_urb (urb); +return NULL ; + } +dbg ("%s - using urb %p for %s endpoint %x" , + __func__, urb, ep_type_name, endpoint);return urb; }
PATCH 17/20 Fix callback bug in connector
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Philipp Reisner <[email protected]>
[CONNECTOR]: Bugfix for cn_call_callback()
When system under heavy stress and must allocate new work instead of reusing old one, new work must use correct completion callback.
Patch is based on Philipp's and Lars' work.
I only cleaned small stuff (and removed spaces instead of tabs).
--- drivers/connector/connector.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-)
drivers/connector/connector.c +11 -11
@@ -128,7 +128,7 @@ EXPORT_SYMBOL_GPL(cn_netlink_send);*/ static int cn_call_callback (struct cn_msg *msg,void (*destruct_data)(void *),void *data) { -struct cn_callback_entry *__cbq; +struct cn_callback_entry *__cbq, *__new_cbq;struct cn_dev *dev = &cdev;int err = -ENODEV ;
@@ -148,27 +148,27 @@ static int cn_call_callback(struct cn_ms }else {struct cn_callback_data *d; - __cbq =kzalloc (sizeof (*__cbq),GFP_ATOMIC ); -if (__cbq) { - d = &__cbq->data; + err = -ENOMEM ; + __new_cbq =kzalloc (sizeof (struct cn_callback_entry ),GFP_ATOMIC ); +if (__new_cbq) { + d = &__new_cbq->data; d->callback_priv = msg; d->callback = __cbq->data.callback; d->ddata = data; d->destruct_data = destruct_data; - d->free = __cbq; + d->free = __new_cbq; -INIT_WORK (&__cbq->work, +INIT_WORK (&__new_cbq->work, &cn_queue_wrapper); - +if (queue_work (dev->cbdev->cn_queue, - &__cbq->work)) + &__new_cbq->work)) err =0 ;else { -kfree (__cbq); +kfree (__new_cbq); err = -EINVAL ; } - }else - err = -ENOMEM ; + } }break ; }
PATCH 18/20 Fix sparc64 device register probing
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: David Miller <[email protected]>
[SPARC]: Fix bus handling in build_device_resources().
We mistakedly modify 'bus' in the innermost loop. What should happen is that at each register index iteration, we start with the same 'bus'.
So preserve it's value at the top level, and use a loop local variable 'dbus' for iteration.
This bug causes registers other than the first to be decoded improperly.
--- arch/sparc/kernel/of_device.c | 7 ++++--- arch/sparc64/kernel/of_device.c | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-)
arch/sparc/kernel/of_device.c +4 -3
@@ -495,7 +495,7 @@ static void __init build_device_resourceu32 *reg = (preg + (index * ((na + ns) *4 )));struct device_node *dp = op->node;struct device_node *pp = p_op->node; -struct of_bus *pbus; +struct of_bus *pbus, *dbus;u64 size, result =OF_BAD_ADDR ;unsigned long flags;int dna, dns;
@@ -516,6 +516,7 @@ static void __init build_device_resource dna = na; dns = ns; + dbus = bus;while (1 ) { dp = pp;
@@ -528,13 +529,13 @@ static void __init build_device_resource pbus =of_match_bus (pp); pbus->count_cells (dp, &pna, &pns); -if (build_one_resource (dp, bus, pbus, addr, +if (build_one_resource (dp, dbus, pbus, addr, dna, dns, pna))break ; dna = pna; dns = pns; - bus = pbus; + dbus = pbus; } build_res:
arch/sparc64/kernel/of_device.c +4 -3
@@ -581,7 +581,7 @@ static void __init build_device_resourceu32 *reg = (preg + (index * ((na + ns) *4 )));struct device_node *dp = op->node;struct device_node *pp = p_op->node; -struct of_bus *pbus; +struct of_bus *pbus, *dbus;u64 size, result =OF_BAD_ADDR ;unsigned long flags;int dna, dns;
@@ -599,6 +599,7 @@ static void __init build_device_resource dna = na; dns = ns; + dbus = bus;while (1 ) { dp = pp;
@@ -611,13 +612,13 @@ static void __init build_device_resource pbus =of_match_bus (pp); pbus->count_cells (dp, &pna, &pns); -if (build_one_resource (dp, bus, pbus, addr, +if (build_one_resource (dp, dbus, pbus, addr, dna, dns, pna))break ; dna = pna; dns = pns; - bus = pbus; + dbus = pbus; } build_res:
PATCH 19/20 Fix timewait jiffies
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Eric Dumazet <[email protected]>
[INET]: twcal_jiffie should be unsigned long, not int
--- include/net/inet_timewait_sock.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/net/inet_timewait_sock.h +1 -1
@@ -66,7 +66,7 @@ struct inet_hashinfo;struct inet_timewait_death_row {/* Short-time timewait calendar */ int twcal_hand; -int twcal_jiffie; +unsigned long twcal_jiffie;struct timer_list twcal_timer;struct hlist_head twcal_row[INET_TWDR_RECYCLE_SLOTS ];
PATCH 20/20 Fix UDP header pointer after pskb_trim_rcsum()
In reply to Greg KH-stable review patch. If anyone has any objections, please let us know.
------------------
From: Herbert Xu <[email protected]>
[UDP]: Reread uh pointer after pskb_trim
The header may have moved when trimming.
--- net/ipv4/udp.c | 1 + 1 file changed, 1 insertion(+)
net/ipv4/udp.c +1 -0
@@ -1214,6 +1214,7 @@ int __udp4_lib_rcv(struct sk_buff *skb,if (ulen <sizeof (*uh) ||pskb_trim_rcsum (skb, ulen)) goto short_packet; + uh = skb->h.uh;udp4_csum_init (skb, uh);
Quoted 1 line · Greg KH
This is the start of the stable review cycle for the 2.6.20.3 release.
Oh, the rolled up patch is at:
kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.20.3-rc1.gz
thanks,
greg k-h
Quoted 5 lines · Greg KH
Quoted 1 line · Greg KH
This is the start of the stable review cycle for the 2.6.20.3 release.
Oh, the rolled up patch is at:
kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.20.3-rc1.gz
You mean:
kernel.org/pub/linux/kernel/v2.6/incr/patch-2.6.20.3-rc1.gz
?
Quoted 4 lines · Chuck Ebbert
Quoted 3 lines · Greg KH
Quoted 1 line · Greg KH
This is the start of the stable review cycle for the 2.6.20.3 release.
Quoted 8 lines
Quoted 2 lines
Oh, the rolled up patch is at:
kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.20.3-rc1.gzYou mean:
kernel.org/pub/linux/kernel/v2.6/incr/patch-2.6.20.3-rc1.gz
?
Oops, I put it in the wrong directory, sorry about that. I've now moved it to the testing/ subdir.
thanks,
greg k-h