[kernel] r11678 - in dists/sid/linux-2.6/debian: . patches/bugfix/all/stable patches/series

Bastian Blank waldi at alioth.debian.org
Sun Jun 22 08:10:21 UTC 2008


Author: waldi
Date: Sun Jun 22 08:10:19 2008
New Revision: 11678

Log:
Add stable release 2.6.25.8.

* debian/changelog: Update.
* debian/patches/bugfix/all/stable/2.6.25.8.patch: Add.
* debian/patches/series/6: Add new patch.


Added:
   dists/sid/linux-2.6/debian/patches/bugfix/all/stable/2.6.25.8.patch
Modified:
   dists/sid/linux-2.6/debian/changelog
   dists/sid/linux-2.6/debian/patches/series/6

Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog	(original)
+++ dists/sid/linux-2.6/debian/changelog	Sun Jun 22 08:10:19 2008
@@ -59,6 +59,24 @@
   * Enable CONFIG_CIFS_EXPERIMENTAL and CONFIG_CIFS_UPCALL, required for
     CIFS mounts to be able to use Kerberos authentication.  Closes: #480663.
 
+  [ Bastian Blank ]
+  * Add stable release 2.6.25.8:
+    - x86: disable mwait for AMD family 10H/11H CPUs
+    - x86: remove mwait capability C-state check
+    - nf_conntrack_h323: fix memory leak in module initialization error path
+    - nf_conntrack_h323: fix module unload crash
+    - nf_conntrack: fix ctnetlink related crash in nf_nat_setup_info()
+    - SCSI: sr: fix corrupt CD data after media change and delay
+    - ACPICA: Ignore ACPI table signature for Load() operator
+    - scsi_host regression: fix scsi host leak
+    - b43: Fix possible NULL pointer dereference in DMA code
+    - b43: Fix noise calculation WARN_ON
+    - virtio_net: Fix skb->csum_start computation
+    - opti621: remove DMA support
+    - opti621: disable read prefetch
+    - Fix tty speed handling on 8250
+    - x86-64: Fix "bytes left to copy" return value for copy_from_user()
+
  -- maximilian attems <maks at debian.org>  Tue, 17 Jun 2008 15:32:16 +0200
 
 linux-2.6 (2.6.25-5) unstable; urgency=low

Added: dists/sid/linux-2.6/debian/patches/bugfix/all/stable/2.6.25.8.patch
==============================================================================
--- (empty file)
+++ dists/sid/linux-2.6/debian/patches/bugfix/all/stable/2.6.25.8.patch	Sun Jun 22 08:10:19 2008
@@ -0,0 +1,497 @@
+diff --git a/Makefile b/Makefile
+index ab94c3f..e18e2b8 100644
+diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
+index c8890b8..39b1b7e 100644
+--- a/arch/x86/kernel/process_32.c
++++ b/arch/x86/kernel/process_32.c
+@@ -259,12 +259,31 @@ static void mwait_idle(void)
+ 	mwait_idle_with_hints(0, 0);
+ }
+ 
++/*
++ * mwait selection logic:
++ *
++ * It depends on the CPU. For AMD CPUs that support MWAIT this is
++ * wrong. Family 0x10 and 0x11 CPUs will enter C1 on HLT. Powersavings
++ * then depend on a clock divisor and current Pstate of the core. If
++ * all cores of a processor are in halt state (C1) the processor can
++ * enter the C1E (C1 enhanced) state. If mwait is used this will never
++ * happen.
++ *
++ * idle=mwait overrides this decision and forces the usage of mwait.
++ */
+ static int __cpuinit mwait_usable(const struct cpuinfo_x86 *c)
+ {
+ 	if (force_mwait)
+ 		return 1;
+-	/* Any C1 states supported? */
+-	return c->cpuid_level >= 5 && ((cpuid_edx(5) >> 4) & 0xf) > 0;
++
++	if (c->x86_vendor == X86_VENDOR_AMD) {
++		switch(c->x86) {
++		case 0x10:
++		case 0x11:
++			return 0;
++		}
++	}
++	return 1;
+ }
+ 
+ void __cpuinit select_idle_routine(const struct cpuinfo_x86 *c)
+diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
+index 1316f1c..53b9c4c 100644
+--- a/arch/x86/kernel/process_64.c
++++ b/arch/x86/kernel/process_64.c
+@@ -254,13 +254,31 @@ static void mwait_idle(void)
+ 	}
+ }
+ 
+-
++/*
++ * mwait selection logic:
++ *
++ * It depends on the CPU. For AMD CPUs that support MWAIT this is
++ * wrong. Family 0x10 and 0x11 CPUs will enter C1 on HLT. Powersavings
++ * then depend on a clock divisor and current Pstate of the core. If
++ * all cores of a processor are in halt state (C1) the processor can
++ * enter the C1E (C1 enhanced) state. If mwait is used this will never
++ * happen.
++ *
++ * idle=mwait overrides this decision and forces the usage of mwait.
++ */
+ static int __cpuinit mwait_usable(const struct cpuinfo_x86 *c)
+ {
+ 	if (force_mwait)
+ 		return 1;
+-	/* Any C1 states supported? */
+-	return c->cpuid_level >= 5 && ((cpuid_edx(5) >> 4) & 0xf) > 0;
++
++	if (c->x86_vendor == X86_VENDOR_AMD) {
++		switch(c->x86) {
++		case 0x10:
++		case 0x11:
++			return 0;
++		}
++	}
++	return 1;
+ }
+ 
+ void __cpuinit select_idle_routine(const struct cpuinfo_x86 *c)
+diff --git a/arch/x86/lib/copy_user_64.S b/arch/x86/lib/copy_user_64.S
+index 70bebd3..ee1c3f6 100644
+--- a/arch/x86/lib/copy_user_64.S
++++ b/arch/x86/lib/copy_user_64.S
+@@ -217,19 +217,19 @@ ENTRY(copy_user_generic_unrolled)
+ 	/* table sorted by exception address */
+ 	.section __ex_table,"a"
+ 	.align 8
+-	.quad .Ls1,.Ls1e
+-	.quad .Ls2,.Ls2e
+-	.quad .Ls3,.Ls3e
+-	.quad .Ls4,.Ls4e
+-	.quad .Ld1,.Ls1e
++	.quad .Ls1,.Ls1e	/* Ls1-Ls4 have copied zero bytes */
++	.quad .Ls2,.Ls1e
++	.quad .Ls3,.Ls1e
++	.quad .Ls4,.Ls1e
++	.quad .Ld1,.Ls1e	/* Ld1-Ld4 have copied 0-24 bytes */
+ 	.quad .Ld2,.Ls2e
+ 	.quad .Ld3,.Ls3e
+ 	.quad .Ld4,.Ls4e
+-	.quad .Ls5,.Ls5e
+-	.quad .Ls6,.Ls6e
+-	.quad .Ls7,.Ls7e
+-	.quad .Ls8,.Ls8e
+-	.quad .Ld5,.Ls5e
++	.quad .Ls5,.Ls5e	/* Ls5-Ls8 have copied 32 bytes */
++	.quad .Ls6,.Ls5e
++	.quad .Ls7,.Ls5e
++	.quad .Ls8,.Ls5e
++	.quad .Ld5,.Ls5e	/* Ld5-Ld8 have copied 32-56 bytes */
+ 	.quad .Ld6,.Ls6e
+ 	.quad .Ld7,.Ls7e
+ 	.quad .Ld8,.Ls8e
+@@ -244,11 +244,8 @@ ENTRY(copy_user_generic_unrolled)
+ 	.quad .Le5,.Le_zero
+ 	.previous
+ 
+-	/* compute 64-offset for main loop. 8 bytes accuracy with error on the
+-	   pessimistic side. this is gross. it would be better to fix the
+-	   interface. */
+ 	/* eax: zero, ebx: 64 */
+-.Ls1e: 	addl $8,%eax
++.Ls1e: 	addl $8,%eax		/* eax is bytes left uncopied within the loop (Ls1e: 64 .. Ls8e: 8) */
+ .Ls2e: 	addl $8,%eax
+ .Ls3e: 	addl $8,%eax
+ .Ls4e: 	addl $8,%eax
+diff --git a/arch/x86/lib/copy_user_nocache_64.S b/arch/x86/lib/copy_user_nocache_64.S
+index 5196762..9d3d1ab 100644
+--- a/arch/x86/lib/copy_user_nocache_64.S
++++ b/arch/x86/lib/copy_user_nocache_64.S
+@@ -145,19 +145,19 @@ ENTRY(__copy_user_nocache)
+ 	/* table sorted by exception address */
+ 	.section __ex_table,"a"
+ 	.align 8
+-	.quad .Ls1,.Ls1e
+-	.quad .Ls2,.Ls2e
+-	.quad .Ls3,.Ls3e
+-	.quad .Ls4,.Ls4e
+-	.quad .Ld1,.Ls1e
++	.quad .Ls1,.Ls1e	/* .Ls[1-4] - 0 bytes copied */
++	.quad .Ls2,.Ls1e
++	.quad .Ls3,.Ls1e
++	.quad .Ls4,.Ls1e
++	.quad .Ld1,.Ls1e	/* .Ld[1-4] - 0..24 bytes coped */
+ 	.quad .Ld2,.Ls2e
+ 	.quad .Ld3,.Ls3e
+ 	.quad .Ld4,.Ls4e
+-	.quad .Ls5,.Ls5e
+-	.quad .Ls6,.Ls6e
+-	.quad .Ls7,.Ls7e
+-	.quad .Ls8,.Ls8e
+-	.quad .Ld5,.Ls5e
++	.quad .Ls5,.Ls5e	/* .Ls[5-8] - 32 bytes copied */
++	.quad .Ls6,.Ls5e
++	.quad .Ls7,.Ls5e
++	.quad .Ls8,.Ls5e
++	.quad .Ld5,.Ls5e	/* .Ld[5-8] - 32..56 bytes copied */
+ 	.quad .Ld6,.Ls6e
+ 	.quad .Ld7,.Ls7e
+ 	.quad .Ld8,.Ls8e
+@@ -172,11 +172,8 @@ ENTRY(__copy_user_nocache)
+ 	.quad .Le5,.Le_zero
+ 	.previous
+ 
+-	/* compute 64-offset for main loop. 8 bytes accuracy with error on the
+-	   pessimistic side. this is gross. it would be better to fix the
+-	   interface. */
+ 	/* eax: zero, ebx: 64 */
+-.Ls1e: 	addl $8,%eax
++.Ls1e: 	addl $8,%eax	/* eax: bytes left uncopied: Ls1e: 64 .. Ls8e: 8 */
+ .Ls2e: 	addl $8,%eax
+ .Ls3e: 	addl $8,%eax
+ .Ls4e: 	addl $8,%eax
+diff --git a/drivers/acpi/tables/tbinstal.c b/drivers/acpi/tables/tbinstal.c
+index 3bc0c67..225e88c 100644
+--- a/drivers/acpi/tables/tbinstal.c
++++ b/drivers/acpi/tables/tbinstal.c
+@@ -123,17 +123,13 @@ acpi_tb_add_table(struct acpi_table_desc *table_desc,
+ 		}
+ 	}
+ 
+-	/* The table must be either an SSDT or a PSDT or an OEMx */
+-
+-	if ((!ACPI_COMPARE_NAME(table_desc->pointer->signature, ACPI_SIG_PSDT))
+-	    &&
+-	    (!ACPI_COMPARE_NAME(table_desc->pointer->signature, ACPI_SIG_SSDT))
+-	    && (strncmp(table_desc->pointer->signature, "OEM", 3))) {
+-		ACPI_ERROR((AE_INFO,
+-			    "Table has invalid signature [%4.4s], must be SSDT, PSDT or OEMx",
+-			    table_desc->pointer->signature));
+-		return_ACPI_STATUS(AE_BAD_SIGNATURE);
+-	}
++	/*
++	 * Originally, we checked the table signature for "SSDT" or "PSDT" here.
++	 * Next, we added support for OEMx tables, signature "OEM".
++	 * Valid tables were encountered with a null signature, so we've just
++	 * given up on validating the signature, since it seems to be a waste
++	 * of code. The original code was removed (05/2008).
++	 */
+ 
+ 	(void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
+ 
+diff --git a/drivers/ide/pci/opti621.c b/drivers/ide/pci/opti621.c
+index 46e8748..3eecbd4 100644
+--- a/drivers/ide/pci/opti621.c
++++ b/drivers/ide/pci/opti621.c
+@@ -103,18 +103,6 @@
+  *  address: 50 ns, data: 50 ns, recovery: 100 ns.
+  */
+ 
+-/* #define READ_PREFETCH 0 */
+-/* Uncomment for disable read prefetch.
+- * There is some readprefetch capatibility in hdparm,
+- * but when I type hdparm -P 1 /dev/hda, I got errors
+- * and till reset drive is inaccessible.
+- * This (hw) read prefetch is safe on my drive.
+- */
+-
+-#ifndef READ_PREFETCH
+-#define READ_PREFETCH 0x40 /* read prefetch is enabled */
+-#endif /* else read prefetch is disabled */
+-
+ #define READ_REG 0	/* index of Read cycle timing register */
+ #define WRITE_REG 1	/* index of Write cycle timing register */
+ #define CNTRL_REG 3	/* index of Control register */
+@@ -260,7 +248,8 @@ static void opti621_set_pio_mode(ide_drive_t *drive, const u8 pio)
+ 
+ 	cycle1 = ((first.data_time-1)<<4)  | (first.recovery_time-2);
+ 	cycle2 = ((second.data_time-1)<<4) | (second.recovery_time-2);
+-	misc = READ_PREFETCH | ((ax-1)<<4) | ((drdy-2)<<1);
++
++	misc = ((ax - 1) << 4) | ((drdy - 2) << 1);
+ 
+ #ifdef OPTI621_DEBUG
+ 	printk("%s: master: address: %d, data: %d, "
+@@ -335,20 +324,16 @@ static const struct ide_port_info opti621_chipsets[] __devinitdata = {
+ 		.name		= "OPTI621",
+ 		.init_hwif	= init_hwif_opti621,
+ 		.enablebits	= {{0x45,0x80,0x00}, {0x40,0x08,0x00}},
+-		.host_flags	= IDE_HFLAG_TRUST_BIOS_FOR_DMA |
++		.host_flags	= IDE_HFLAG_NO_DMA |
+ 				  IDE_HFLAG_BOOTABLE,
+ 		.pio_mask	= ATA_PIO3,
+-		.swdma_mask	= ATA_SWDMA2,
+-		.mwdma_mask	= ATA_MWDMA2,
+ 	},{	/* 1 */
+ 		.name		= "OPTI621X",
+ 		.init_hwif	= init_hwif_opti621,
+ 		.enablebits	= {{0x45,0x80,0x00}, {0x40,0x08,0x00}},
+-		.host_flags	= IDE_HFLAG_TRUST_BIOS_FOR_DMA |
++		.host_flags	= IDE_HFLAG_NO_DMA |
+ 				  IDE_HFLAG_BOOTABLE,
+ 		.pio_mask	= ATA_PIO3,
+-		.swdma_mask	= ATA_SWDMA2,
+-		.mwdma_mask	= ATA_MWDMA2,
+ 	}
+ };
+ 
+diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
+index 555b70c..2d31587 100644
+--- a/drivers/net/virtio_net.c
++++ b/drivers/net/virtio_net.c
+@@ -83,9 +83,7 @@ static void receive_skb(struct net_device *dev, struct sk_buff *skb,
+ 	BUG_ON(len > MAX_PACKET_LEN);
+ 
+ 	skb_trim(skb, len);
+-	skb->protocol = eth_type_trans(skb, dev);
+-	pr_debug("Receiving skb proto 0x%04x len %i type %i\n",
+-		 ntohs(skb->protocol), skb->len, skb->pkt_type);
++
+ 	dev->stats.rx_bytes += skb->len;
+ 	dev->stats.rx_packets++;
+ 
+@@ -95,6 +93,10 @@ static void receive_skb(struct net_device *dev, struct sk_buff *skb,
+ 			goto frame_err;
+ 	}
+ 
++	skb->protocol = eth_type_trans(skb, dev);
++	pr_debug("Receiving skb proto 0x%04x len %i type %i\n",
++		 ntohs(skb->protocol), skb->len, skb->pkt_type);
++
+ 	if (hdr->gso_type != VIRTIO_NET_HDR_GSO_NONE) {
+ 		pr_debug("GSO!\n");
+ 		switch (hdr->gso_type & ~VIRTIO_NET_HDR_GSO_ECN) {
+diff --git a/drivers/net/wireless/b43/b43.h b/drivers/net/wireless/b43/b43.h
+index 44ebdea..b14087b 100644
+--- a/drivers/net/wireless/b43/b43.h
++++ b/drivers/net/wireless/b43/b43.h
+@@ -596,7 +596,6 @@ struct b43_dma {
+ 
+ /* Context information for a noise calculation (Link Quality). */
+ struct b43_noise_calculation {
+-	u8 channel_at_start;
+ 	bool calculation_running;
+ 	u8 nr_samples;
+ 	s8 samples[8][4];
+diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c
+index 4ec1915..f74dba2 100644
+--- a/drivers/net/wireless/b43/dma.c
++++ b/drivers/net/wireless/b43/dma.c
+@@ -850,6 +850,7 @@ struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev,
+ 	if (!ring)
+ 		goto out;
+ 	ring->type = type;
++	ring->dev = dev;
+ 
+ 	nr_slots = B43_RXRING_SLOTS;
+ 	if (for_tx)
+@@ -901,7 +902,6 @@ struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev,
+ 				 DMA_TO_DEVICE);
+ 	}
+ 
+-	ring->dev = dev;
+ 	ring->nr_slots = nr_slots;
+ 	ring->mmio_base = b43_dmacontroller_base(type, controller_index);
+ 	ring->index = controller_index;
+diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
+index 6966eec..b4a2042 100644
+--- a/drivers/net/wireless/b43/main.c
++++ b/drivers/net/wireless/b43/main.c
+@@ -1027,7 +1027,6 @@ static void b43_generate_noise_sample(struct b43_wldev *dev)
+ 	b43_jssi_write(dev, 0x7F7F7F7F);
+ 	b43_write32(dev, B43_MMIO_MACCMD,
+ 		    b43_read32(dev, B43_MMIO_MACCMD) | B43_MACCMD_BGNOISE);
+-	B43_WARN_ON(dev->noisecalc.channel_at_start != dev->phy.channel);
+ }
+ 
+ static void b43_calculate_link_quality(struct b43_wldev *dev)
+@@ -1036,7 +1035,6 @@ static void b43_calculate_link_quality(struct b43_wldev *dev)
+ 
+ 	if (dev->noisecalc.calculation_running)
+ 		return;
+-	dev->noisecalc.channel_at_start = dev->phy.channel;
+ 	dev->noisecalc.calculation_running = 1;
+ 	dev->noisecalc.nr_samples = 0;
+ 
+@@ -1053,9 +1051,16 @@ static void handle_irq_noise(struct b43_wldev *dev)
+ 
+ 	/* Bottom half of Link Quality calculation. */
+ 
++	/* Possible race condition: It might be possible that the user
++	 * changed to a different channel in the meantime since we
++	 * started the calculation. We ignore that fact, since it's
++	 * not really that much of a problem. The background noise is
++	 * an estimation only anyway. Slightly wrong results will get damped
++	 * by the averaging of the 8 sample rounds. Additionally the
++	 * value is shortlived. So it will be replaced by the next noise
++	 * calculation round soon. */
++
+ 	B43_WARN_ON(!dev->noisecalc.calculation_running);
+-	if (dev->noisecalc.channel_at_start != phy->channel)
+-		goto drop_calculation;
+ 	*((__le32 *)noise) = cpu_to_le32(b43_jssi_read(dev));
+ 	if (noise[0] == 0x7F || noise[1] == 0x7F ||
+ 	    noise[2] == 0x7F || noise[3] == 0x7F)
+@@ -1096,11 +1101,10 @@ static void handle_irq_noise(struct b43_wldev *dev)
+ 			average -= 48;
+ 
+ 		dev->stats.link_noise = average;
+-	      drop_calculation:
+ 		dev->noisecalc.calculation_running = 0;
+ 		return;
+ 	}
+-      generate_new:
++generate_new:
+ 	b43_generate_noise_sample(dev);
+ }
+ 
+diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c
+index ed7e0a1..079c733 100644
+--- a/drivers/scsi/hosts.c
++++ b/drivers/scsi/hosts.c
+@@ -455,9 +455,10 @@ struct Scsi_Host *scsi_host_lookup(unsigned short hostnum)
+ 	struct Scsi_Host *shost = ERR_PTR(-ENXIO);
+ 
+ 	cdev = class_find_child(&shost_class, &hostnum, __scsi_host_match);
+-	if (cdev)
++	if (cdev) {
+ 		shost = scsi_host_get(class_to_shost(cdev));
+-
++		class_device_put(cdev);
++	}
+ 	return shost;
+ }
+ EXPORT_SYMBOL(scsi_host_lookup);
+diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
+index 7ee86d4..c82df8b 100644
+--- a/drivers/scsi/sr.c
++++ b/drivers/scsi/sr.c
+@@ -178,6 +178,9 @@ int sr_test_unit_ready(struct scsi_device *sdev, struct scsi_sense_hdr *sshdr)
+ 		the_result = scsi_execute_req(sdev, cmd, DMA_NONE, NULL,
+ 					      0, sshdr, SR_TIMEOUT,
+ 					      retries--);
++		if (scsi_sense_valid(sshdr) &&
++		    sshdr->sense_key == UNIT_ATTENTION)
++			sdev->changed = 1;
+ 
+ 	} while (retries > 0 &&
+ 		 (!scsi_status_is_good(the_result) ||
+diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
+index 77f7a7f..d60705e 100644
+--- a/drivers/serial/8250.c
++++ b/drivers/serial/8250.c
+@@ -2174,7 +2174,9 @@ serial8250_set_termios(struct uart_port *port, struct ktermios *termios,
+ 	}
+ 	serial8250_set_mctrl(&up->port, up->port.mctrl);
+ 	spin_unlock_irqrestore(&up->port.lock, flags);
+-	tty_termios_encode_baud_rate(termios, baud, baud);
++	/* Don't rewrite B0 */
++	if (tty_termios_baud_rate(termios))
++		tty_termios_encode_baud_rate(termios, baud, baud);
+ }
+ 
+ static void
+diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
+index 4147de6..8785784 100644
+--- a/net/netfilter/nf_conntrack_core.c
++++ b/net/netfilter/nf_conntrack_core.c
+@@ -199,8 +199,6 @@ destroy_conntrack(struct nf_conntrack *nfct)
+ 	if (l4proto && l4proto->destroy)
+ 		l4proto->destroy(ct);
+ 
+-	nf_ct_ext_destroy(ct);
+-
+ 	rcu_read_unlock();
+ 
+ 	spin_lock_bh(&nf_conntrack_lock);
+@@ -523,6 +521,7 @@ static void nf_conntrack_free_rcu(struct rcu_head *head)
+ 
+ void nf_conntrack_free(struct nf_conn *ct)
+ {
++	nf_ct_ext_destroy(ct);
+ 	call_rcu(&ct->rcu, nf_conntrack_free_rcu);
+ }
+ EXPORT_SYMBOL_GPL(nf_conntrack_free);
+diff --git a/net/netfilter/nf_conntrack_h323_main.c b/net/netfilter/nf_conntrack_h323_main.c
+index 898f192..7407dd3 100644
+--- a/net/netfilter/nf_conntrack_h323_main.c
++++ b/net/netfilter/nf_conntrack_h323_main.c
+@@ -617,6 +617,7 @@ static struct nf_conntrack_helper nf_conntrack_helper_h245 __read_mostly = {
+ 	.me			= THIS_MODULE,
+ 	.max_expected		= H323_RTP_CHANNEL_MAX * 4 + 2 /* T.120 */,
+ 	.timeout		= 240,
++	.tuple.src.l3num	= AF_UNSPEC,
+ 	.tuple.dst.protonum	= IPPROTO_UDP,
+ 	.help			= h245_help
+ };
+@@ -1758,6 +1759,7 @@ static void __exit nf_conntrack_h323_fini(void)
+ 	nf_conntrack_helper_unregister(&nf_conntrack_helper_ras[0]);
+ 	nf_conntrack_helper_unregister(&nf_conntrack_helper_q931[1]);
+ 	nf_conntrack_helper_unregister(&nf_conntrack_helper_q931[0]);
++	nf_conntrack_helper_unregister(&nf_conntrack_helper_h245);
+ 	kfree(h323_buffer);
+ 	pr_debug("nf_ct_h323: fini\n");
+ }
+@@ -1770,28 +1772,34 @@ static int __init nf_conntrack_h323_init(void)
+ 	h323_buffer = kmalloc(65536, GFP_KERNEL);
+ 	if (!h323_buffer)
+ 		return -ENOMEM;
+-	ret = nf_conntrack_helper_register(&nf_conntrack_helper_q931[0]);
++	ret = nf_conntrack_helper_register(&nf_conntrack_helper_h245);
+ 	if (ret < 0)
+ 		goto err1;
+-	ret = nf_conntrack_helper_register(&nf_conntrack_helper_q931[1]);
++	ret = nf_conntrack_helper_register(&nf_conntrack_helper_q931[0]);
+ 	if (ret < 0)
+ 		goto err2;
+-	ret = nf_conntrack_helper_register(&nf_conntrack_helper_ras[0]);
++	ret = nf_conntrack_helper_register(&nf_conntrack_helper_q931[1]);
+ 	if (ret < 0)
+ 		goto err3;
+-	ret = nf_conntrack_helper_register(&nf_conntrack_helper_ras[1]);
++	ret = nf_conntrack_helper_register(&nf_conntrack_helper_ras[0]);
+ 	if (ret < 0)
+ 		goto err4;
++	ret = nf_conntrack_helper_register(&nf_conntrack_helper_ras[1]);
++	if (ret < 0)
++		goto err5;
+ 	pr_debug("nf_ct_h323: init success\n");
+ 	return 0;
+ 
+-err4:
++err5:
+ 	nf_conntrack_helper_unregister(&nf_conntrack_helper_ras[0]);
+-err3:
++err4:
+ 	nf_conntrack_helper_unregister(&nf_conntrack_helper_q931[1]);
+-err2:
++err3:
+ 	nf_conntrack_helper_unregister(&nf_conntrack_helper_q931[0]);
++err2:
++	nf_conntrack_helper_unregister(&nf_conntrack_helper_h245);
+ err1:
++	kfree(h323_buffer);
+ 	return ret;
+ }
+ 

Modified: dists/sid/linux-2.6/debian/patches/series/6
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/6	(original)
+++ dists/sid/linux-2.6/debian/patches/series/6	Sun Jun 22 08:10:19 2008
@@ -1 +1,2 @@
 + bugfix/all/stable/2.6.25.7.patch
++ bugfix/all/stable/2.6.25.8.patch



More information about the Kernel-svn-changes mailing list