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

maximilian attems maks-guest at alioth.debian.org
Thu Jan 25 13:48:23 CET 2007


Author: maks-guest
Date: Thu Jan 25 13:48:22 2007
New Revision: 8212

Added:
   dists/sid/linux-2.6/debian/patches/bugfix/2.6.16.38
Modified:
   dists/sid/linux-2.6/debian/changelog
   dists/sid/linux-2.6/debian/patches/series/10
Log:
add 2.6.16.38 bits,
back out the previous hfs fix, was not complete.
patch should help our security track.


Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog	(original)
+++ dists/sid/linux-2.6/debian/changelog	Thu Jan 25 13:48:22 2007
@@ -1,13 +1,39 @@
 linux-2.6 (2.6.18.dfsg.1-10) UNRELEASED; urgency=low
 
   * Add patches out of stable queue 2.6.18
-   - [amd64] Don't leak NT bit into next task (CVE-2006-5755)
-   - IB/srp: Fix FMR mapping for 32-bit kernels and addresses above 4G
-   - SCSI: add missing cdb clearing in scsi_execute()
+    - [amd64] Don't leak NT bit into next task (CVE-2006-5755)
+    - IB/srp: Fix FMR mapping for 32-bit kernels and addresses above 4G
+    - SCSI: add missing cdb clearing in scsi_execute()
   * Xen postinst: Use takeover for update-initramfs. Makes postinst idempotent.
     On creation it should always overwrite. (closes: #401183)
+  * Hand-picked from stable release 2.6.16.38:
+    - i2c-viapro: Add support for the VT8237A and VT8251
+    - PCI: irq: irq and pci_ids patch for Intel ICH9
+    - i2c-i801: SMBus patch for Intel ICH9
+    - fix the UML compilation
+    - drm: allow detection of new VIA chipsets
+    - drm: Add the P4VM800PRO PCI ID.
+    - rio: typo in bitwise AND expression.
+    - i2c-mv64xxx: Fix random oops at boot
+    - i2c: fix broken ds1337 initialization
+    - [SUNKBD]: Fix sunkbd_enable(sunkbd, 0); obvious.
+    - Call init_timer() for ISDN PPP CCP reset state timer (CVE-2006-5749)
+    - V4L: cx88: Fix leadtek_eeprom tagging
+    - SPI/MTD: mtd_dataflash oops prevention
+    - grow_buffers() infinite loop fix (CVE-2006-5757/CVE-2006-6060)
+    - corrupted cramfs filesystems cause kernel oops (CVE-2006-5823)
+    - ext2: skip pages past number of blocks in ext2_find_entry
+      (CVE-2006-6054)
+    - handle ext3 directory corruption better (CVE-2006-6053)
+    - hfs_fill_super returns success even if no root inode (CVE-2006-6056)
+      backout previous fix, was not complete.
+    - Fix for shmem_truncate_range() BUG_ON()
+    - ebtables: check struct type before computing gap
+    - [IPV4/IPV6]: Fix inet{,6} device initialization order.
+    - [IPV6] Fix joining all-node multicast group.
+    - [SOUND] Sparc CS4231: Use 64 for period_bytes_min
 
- -- maximilian attems <maks at stro.at>  Thu, 25 Jan 2007 10:20:39 +0100
+ -- maximilian attems <maks at stro.at>  Thu, 25 Jan 2007 13:35:13 +0100
 
 linux-2.6 (2.6.18.dfsg.1-9) unstable; urgency=low
 

Added: dists/sid/linux-2.6/debian/patches/bugfix/2.6.16.38
==============================================================================
--- (empty file)
+++ dists/sid/linux-2.6/debian/patches/bugfix/2.6.16.38	Thu Jan 25 13:48:22 2007
@@ -0,0 +1,591 @@
+diff --git a/Documentation/i2c/busses/i2c-viapro b/Documentation/i2c/busses/i2c-viapro
+index 1677566..2568034 100644
+--- a/Documentation/i2c/busses/i2c-viapro
++++ b/Documentation/i2c/busses/i2c-viapro
+@@ -7,9 +7,12 @@ Supported adapters:
+   * VIA Technologies, Inc. VT82C686A/B
+     Datasheet: Sometimes available at the VIA website
+ 
+-  * VIA Technologies, Inc. VT8231, VT8233, VT8233A, VT8235, VT8237R
++  * VIA Technologies, Inc. VT8231, VT8233, VT8233A
+     Datasheet: available on request from VIA
+ 
++  * VIA Technologies, Inc. VT8235, VT8237R, VT8237A, VT8251
++    Datasheet: available on request and under NDA from VIA
++
+ Authors:
+ 	Kyösti Mälkki <kmalkki at cc.hut.fi>,
+ 	Mark D. Studebaker <mdsxyz123 at yahoo.com>,
+@@ -39,6 +42,8 @@ Your lspci -n listing must show one of these :
+  device 1106:8235   (VT8231 function 4)
+  device 1106:3177   (VT8235)
+  device 1106:3227   (VT8237R)
++ device 1106:3337   (VT8237A)
++ device 1106:3287   (VT8251)
+ 
+ If none of these show up, you should look in the BIOS for settings like
+ enable ACPI / SMBus or even USB.
+diff --git a/arch/i386/pci/irq.c b/arch/i386/pci/irq.c
+index e84f915..842c581 100644
+--- a/arch/i386/pci/irq.c
++++ b/arch/i386/pci/irq.c
+@@ -544,6 +544,12 @@ static __init int intel_router_probe(struct irq_router *r, struct pci_dev *route
+ 		case PCI_DEVICE_ID_INTEL_ICH8_2:
+ 		case PCI_DEVICE_ID_INTEL_ICH8_3:
+ 		case PCI_DEVICE_ID_INTEL_ICH8_4:
++		case PCI_DEVICE_ID_INTEL_ICH9_0:
++		case PCI_DEVICE_ID_INTEL_ICH9_1:
++		case PCI_DEVICE_ID_INTEL_ICH9_2:
++		case PCI_DEVICE_ID_INTEL_ICH9_3:
++		case PCI_DEVICE_ID_INTEL_ICH9_4:
++		case PCI_DEVICE_ID_INTEL_ICH9_5:
+ 			r->name = "PIIX/ICH";
+ 			r->get = pirq_piix_get;
+ 			r->set = pirq_piix_set;
+diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c
+index bbf34cb..215ef68 100644
+--- a/arch/um/os-Linux/skas/process.c
++++ b/arch/um/os-Linux/skas/process.c
+@@ -17,6 +17,7 @@
+ #include <sys/time.h>
+ #include <asm/unistd.h>
+ #include <asm/types.h>
++#include <asm/page.h>
+ #include "user.h"
+ #include "sysdep/ptrace.h"
+ #include "user_util.h"
+diff --git a/drivers/char/drm/drm_pciids.h b/drivers/char/drm/drm_pciids.h
+index 2c17e88..869ae73 100644
+--- a/drivers/char/drm/drm_pciids.h
++++ b/drivers/char/drm/drm_pciids.h
+@@ -185,6 +185,10 @@
+ 	{0x1106, 0x3122, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+ 	{0x1106, 0x7205, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+ 	{0x1106, 0x3108, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
++	{0x1106, 0x3304, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
++	{0x1106, 0x3157, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
++	{0x1106, 0x3344, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
++	{0x1106, 0x7204, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+ 	{0, 0, 0}
+ 
+ #define i810_PCI_IDS \
+diff --git a/drivers/char/rio/rio_linux.c b/drivers/char/rio/rio_linux.c
+index c9af283..06bd77f 100644
+--- a/drivers/char/rio/rio_linux.c
++++ b/drivers/char/rio/rio_linux.c
+@@ -1186,7 +1186,7 @@ static int __init rio_init(void)
+ 				rio_dprintk(RIO_DEBUG_INIT, "Enabling interrupts on rio card.\n");
+ 				hp->Mode |= RIO_PCI_INT_ENABLE;
+ 			} else
+-				hp->Mode &= !RIO_PCI_INT_ENABLE;
++				hp->Mode &= ~RIO_PCI_INT_ENABLE;
+ 			rio_dprintk(RIO_DEBUG_INIT, "New Mode: %x\n", hp->Mode);
+ 			rio_start_card_running(hp);
+ 		}
+diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
+index ff92735..0188a9d 100644
+--- a/drivers/i2c/busses/Kconfig
++++ b/drivers/i2c/busses/Kconfig
+@@ -125,6 +125,7 @@ config I2C_I801
+ 	    ICH7
+ 	    ESB2
+ 	    ICH8
++	    ICH9
+ 
+ 	  This driver can also be built as a module.  If so, the module
+ 	  will be called i2c-i801.
+@@ -462,19 +463,19 @@ config I2C_VIA
+ 	  will be called i2c-via.
+ 
+ config I2C_VIAPRO
+-	tristate "VIA 82C596/82C686/823x"
++	tristate "VIA 82C596/82C686/82xx"
+ 	depends on I2C && PCI
+ 	help
+ 	  If you say yes to this option, support will be included for the VIA
+-	  82C596/82C686/823x I2C interfaces.  Specifically, the following 
++	  82C596/82C686/82xx I2C interfaces.  Specifically, the following
+ 	  chipsets are supported:
+-	  82C596A/B
+-	  82C686A/B
+-	  8231
+-	  8233
+-	  8233A
+-	  8235
+-	  8237
++	    VT82C596A/B
++	    VT82C686A/B
++	    VT8231
++	    VT8233/A
++	    VT8235
++	    VT8237R/A
++	    VT8251
+ 
+ 	  This driver can also be built as a module.  If so, the module
+ 	  will be called i2c-viapro.
+diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
+index dfca749..23e8eee 100644
+--- a/drivers/i2c/busses/i2c-i801.c
++++ b/drivers/i2c/busses/i2c-i801.c
+@@ -33,6 +33,7 @@
+     ICH7		27DA
+     ESB2		269B
+     ICH8		283E
++    ICH9		2930
+     This driver supports several versions of Intel's I/O Controller Hubs (ICH).
+     For SMBus support, they are similar to the PIIX4 and are part
+     of Intel's '810' and other chipsets.
+@@ -534,6 +535,7 @@ static struct pci_device_id i801_ids[] = {
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_17) },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_17) },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_5) },
++	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_6) },
+ 	{ 0, }
+ };
+ 
+diff --git a/drivers/i2c/busses/i2c-mv64xxx.c b/drivers/i2c/busses/i2c-mv64xxx.c
+index 22781d8..3f44216 100644
+--- a/drivers/i2c/busses/i2c-mv64xxx.c
++++ b/drivers/i2c/busses/i2c-mv64xxx.c
+@@ -525,6 +525,8 @@ mv64xxx_i2c_probe(struct platform_device *pd)
+ 	platform_set_drvdata(pd, drv_data);
+ 	i2c_set_adapdata(&drv_data->adapter, drv_data);
+ 
++	mv64xxx_i2c_hw_init(drv_data);
++
+ 	if (request_irq(drv_data->irq, mv64xxx_i2c_intr, 0,
+ 			MV64XXX_I2C_CTLR_NAME, drv_data)) {
+ 		dev_err(&drv_data->adapter.dev,
+@@ -538,8 +540,6 @@ mv64xxx_i2c_probe(struct platform_device *pd)
+ 		goto exit_free_irq;
+ 	}
+ 
+-	mv64xxx_i2c_hw_init(drv_data);
+-
+ 	return 0;
+ 
+ 	exit_free_irq:
+diff --git a/drivers/i2c/busses/i2c-viapro.c b/drivers/i2c/busses/i2c-viapro.c
+index 47e52bf..1ccc0fb 100644
+--- a/drivers/i2c/busses/i2c-viapro.c
++++ b/drivers/i2c/busses/i2c-viapro.c
+@@ -34,6 +34,8 @@
+    VT8233A            0x3147             yes?
+    VT8235             0x3177             yes
+    VT8237R            0x3227             yes
++   VT8237A            0x3337             yes
++   VT8251             0x3287             yes
+ 
+    Note: we assume there can only be one device, with one SMBus interface.
+ */
+@@ -381,7 +383,9 @@ found:
+ 	dev_dbg(&pdev->dev, "VT596_smba = 0x%X\n", vt596_smba);
+ 
+ 	switch (pdev->device) {
++	case PCI_DEVICE_ID_VIA_8251:
+ 	case PCI_DEVICE_ID_VIA_8237:
++	case PCI_DEVICE_ID_VIA_8237A:
+ 	case PCI_DEVICE_ID_VIA_8235:
+ 	case PCI_DEVICE_ID_VIA_8233A:
+ 	case PCI_DEVICE_ID_VIA_8233_0:
+@@ -432,8 +436,12 @@ static struct pci_device_id vt596_ids[] = {
+ 	  .driver_data = SMBBA3 },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237),
+ 	  .driver_data = SMBBA3 },
++	{ PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237A),
++	  .driver_data = SMBBA3 },
+ 	{ PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8231_4),
+ 	  .driver_data = SMBBA1 },
++	{ PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8251),
++	  .driver_data = SMBBA3 },
+ 	{ 0, }
+ };
+ 
+diff --git a/drivers/i2c/chips/ds1337.c b/drivers/i2c/chips/ds1337.c
+index 93d483b..ec17d6b 100644
+--- a/drivers/i2c/chips/ds1337.c
++++ b/drivers/i2c/chips/ds1337.c
+@@ -347,13 +347,19 @@ static void ds1337_init_client(struct i2c_client *client)
+ 
+ 	if ((status & 0x80) || (control & 0x80)) {
+ 		/* RTC not running */
+-		u8 buf[16];
++		u8 buf[1+16];	/* First byte is interpreted as address */
+ 		struct i2c_msg msg[1];
+ 
+ 		dev_dbg(&client->dev, "%s: RTC not running!\n", __FUNCTION__);
+ 
+ 		/* Initialize all, including STATUS and CONTROL to zero */
+ 		memset(buf, 0, sizeof(buf));
++
++		/* Write valid values in the date/time registers */
++		buf[1+DS1337_REG_DAY] = 1;
++		buf[1+DS1337_REG_DATE] = 1;
++		buf[1+DS1337_REG_MONTH] = 1;
++
+ 		msg[0].addr = client->addr;
+ 		msg[0].flags = 0;
+ 		msg[0].len = sizeof(buf);
+diff --git a/drivers/input/keyboard/sunkbd.c b/drivers/input/keyboard/sunkbd.c
+index b15b6d8..84c00a5 100644
+--- a/drivers/input/keyboard/sunkbd.c
++++ b/drivers/input/keyboard/sunkbd.c
+@@ -226,7 +226,7 @@ static void sunkbd_reinit(void *data)
+ static void sunkbd_enable(struct sunkbd *sunkbd, int enable)
+ {
+ 	serio_pause_rx(sunkbd->serio);
+-	sunkbd->enabled = 1;
++	sunkbd->enabled = enable;
+ 	serio_continue_rx(sunkbd->serio);
+ }
+ 
+diff --git a/drivers/isdn/i4l/isdn_ppp.c b/drivers/isdn/i4l/isdn_ppp.c
+index 1a19a0f..b3f0e01 100644
+--- a/drivers/isdn/i4l/isdn_ppp.c
++++ b/drivers/isdn/i4l/isdn_ppp.c
+@@ -2346,6 +2346,7 @@ static struct ippp_ccp_reset_state *isdn_ppp_ccp_reset_alloc_state(struct ippp_s
+ 		rs->state = CCPResetIdle;
+ 		rs->is = is;
+ 		rs->id = id;
++		init_timer(&rs->timer);
+ 		rs->timer.data = (unsigned long)rs;
+ 		rs->timer.function = isdn_ppp_ccp_timer_callback;
+ 		is->reset->rs[id] = rs;
+diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c
+index 1bc9992..a24af92 100644
+--- a/drivers/media/video/cx88/cx88-cards.c
++++ b/drivers/media/video/cx88/cx88-cards.c
+@@ -1261,7 +1261,7 @@ const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids);
+ /* ----------------------------------------------------------------------- */
+ /* some leadtek specific stuff                                             */
+ 
+-static void __devinit leadtek_eeprom(struct cx88_core *core, u8 *eeprom_data)
++static void leadtek_eeprom(struct cx88_core *core, u8 *eeprom_data)
+ {
+ 	/* This is just for the "Winfast 2000XP Expert" board ATM; I don't have data on
+ 	 * any others.
+diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c
+index a19480d..dabffa2 100644
+--- a/drivers/mtd/devices/mtd_dataflash.c
++++ b/drivers/mtd/devices/mtd_dataflash.c
+@@ -536,7 +536,7 @@ static int __devinit dataflash_probe(struct spi_device *spi)
+ 	if (status <= 0 || status == 0xff) {
+ 		DEBUG(MTD_DEBUG_LEVEL1, "%s: status error %d\n",
+ 				spi->dev.bus_id, status);
+-		if (status == 0xff)
++		if (status == 0 || status == 0xff)
+ 			status = -ENODEV;
+ 		return status;
+ 	}
+diff --git a/drivers/usb/net/Kconfig b/drivers/usb/net/Kconfig
+index efd6ca7..6c94f59 100644
+--- a/drivers/usb/net/Kconfig
++++ b/drivers/usb/net/Kconfig
+@@ -84,6 +84,7 @@ config USB_PEGASUS
+ config USB_RTL8150
+ 	tristate "USB RTL8150 based ethernet device support (EXPERIMENTAL)"
+ 	depends on EXPERIMENTAL
++	select MII
+ 	help
+ 	  Say Y here if you have RTL8150 based usb-ethernet adapter.
+ 	  Send me <petkan at users.sourceforge.net> any comments you may have.
+diff --git a/fs/buffer.c b/fs/buffer.c
+index a9b3994..8a17ebb 100644
+--- a/fs/buffer.c
++++ b/fs/buffer.c
+@@ -1179,8 +1179,21 @@ grow_buffers(struct block_device *bdev, sector_t block, int size)
+ 	} while ((size << sizebits) < PAGE_SIZE);
+ 
+ 	index = block >> sizebits;
+-	block = index << sizebits;
+ 
++	/*
++	 * Check for a block which wants to lie outside our maximum possible
++	 * pagecache index.  (this comparison is done using sector_t types).
++	 */
++	if (unlikely(index != block >> sizebits)) {
++		char b[BDEVNAME_SIZE];
++
++		printk(KERN_ERR "%s: requested out-of-range block %llu for "
++			"device %s\n",
++			__FUNCTION__, (unsigned long long)block,
++			bdevname(bdev, b));
++		return -EIO;
++	}
++	block = index << sizebits;
+ 	/* Create a page with the proper size buffers.. */
+ 	page = grow_dev_page(bdev, block, index, size);
+ 	if (!page)
+@@ -1207,12 +1220,16 @@ __getblk_slow(struct block_device *bdev, sector_t block, int size)
+ 
+ 	for (;;) {
+ 		struct buffer_head * bh;
++		int ret;
+ 
+ 		bh = __find_get_block(bdev, block, size);
+ 		if (bh)
+ 			return bh;
+ 
+-		if (!grow_buffers(bdev, block, size))
++		ret = grow_buffers(bdev, block, size);
++		if (ret < 0)
++			return NULL;
++		if (ret == 0)
+ 			free_more_memory();
+ 	}
+ }
+diff --git a/fs/cramfs/inode.c b/fs/cramfs/inode.c
+index 8ad52f5..30fdd5d 100644
+--- a/fs/cramfs/inode.c
++++ b/fs/cramfs/inode.c
+@@ -482,6 +482,8 @@ static int cramfs_readpage(struct file *file, struct page * page)
+ 		pgdata = kmap(page);
+ 		if (compr_len == 0)
+ 			; /* hole */
++		else if (compr_len > (PAGE_CACHE_SIZE << 1))
++			printk(KERN_ERR "cramfs: bad compressed blocksize %u\n", compr_len);
+ 		else {
+ 			mutex_lock(&read_mutex);
+ 			bytes_filled = cramfs_uncompress_block(pgdata,
+diff --git a/fs/ext2/dir.c b/fs/ext2/dir.c
+index b3dbd71..8a27dcc 100644
+--- a/fs/ext2/dir.c
++++ b/fs/ext2/dir.c
+@@ -369,6 +369,14 @@ struct ext2_dir_entry_2 * ext2_find_entry (struct inode * dir,
+ 		}
+ 		if (++n >= npages)
+ 			n = 0;
++		/* next page is past the blocks we've got */
++		if (unlikely(n > (dir->i_blocks >> (PAGE_CACHE_SHIFT - 9)))) {
++			ext2_error(dir->i_sb, __FUNCTION__,
++				"dir %lu size %lld exceeds block count %llu",
++				dir->i_ino, dir->i_size,
++				(unsigned long long)dir->i_blocks);
++				goto out;
++		}
+ 	} while (n != start);
+ out:
+ 	return NULL;
+diff --git a/fs/ext3/dir.c b/fs/ext3/dir.c
+index 832867a..6611801 100644
+--- a/fs/ext3/dir.c
++++ b/fs/ext3/dir.c
+@@ -134,6 +134,9 @@ static int ext3_readdir(struct file * filp,
+ 			ext3_error (sb, "ext3_readdir",
+ 				"directory #%lu contains a hole at offset %lu",
+ 				inode->i_ino, (unsigned long)filp->f_pos);
++			/* corrupt size?  Maybe no more blocks to read */
++			if (filp->f_pos > inode->i_blocks << 9)
++				break;
+ 			filp->f_pos += sb->s_blocksize - offset;
+ 			continue;
+ 		}
+diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c
+index 7be89fe..3035dd4 100644
+--- a/fs/ext3/namei.c
++++ b/fs/ext3/namei.c
+@@ -551,6 +551,15 @@ static int htree_dirblock_to_tree(struct file *dir_file,
+ 					   dir->i_sb->s_blocksize -
+ 					   EXT3_DIR_REC_LEN(0));
+ 	for (; de < top; de = ext3_next_entry(de)) {
++		if (!ext3_check_dir_entry("htree_dirblock_to_tree", dir, de, bh,
++					(block<<EXT3_BLOCK_SIZE_BITS(dir->i_sb))
++						+((char *)de - bh->b_data))) {
++			/* On error, skip the f_pos to the next block. */
++			dir_file->f_pos = (dir_file->f_pos |
++					(dir->i_sb->s_blocksize - 1)) + 1;
++			brelse (bh);
++			return count;
++		}
+ 		ext3fs_dirhash(de->name, de->name_len, hinfo);
+ 		if ((hinfo->hash < start_hash) ||
+ 		    ((hinfo->hash == start_hash) &&
+diff --git a/fs/hfs/super.c b/fs/hfs/super.c
+index 1181d11..2e1819b 100644
+--- a/fs/hfs/super.c
++++ b/fs/hfs/super.c
+@@ -390,11 +390,13 @@ static int hfs_fill_super(struct super_block *sb, void *data, int silent)
+ 		hfs_find_exit(&fd);
+ 		goto bail_no_root;
+ 	}
++	res = -EINVAL;
+ 	root_inode = hfs_iget(sb, &fd.search_key->cat, &rec);
+ 	hfs_find_exit(&fd);
+ 	if (!root_inode)
+ 		goto bail_no_root;
+ 
++	res = -ENOMEM;
+ 	sb->s_root = d_alloc_root(root_inode);
+ 	if (!sb->s_root)
+ 		goto bail_iput;
+diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
+index dab8ba7..ed96bf7 100644
+--- a/include/linux/pci_ids.h
++++ b/include/linux/pci_ids.h
+@@ -2129,6 +2129,13 @@
+ #define PCI_DEVICE_ID_INTEL_ICH8_4	0x2815
+ #define PCI_DEVICE_ID_INTEL_ICH8_5	0x283e
+ #define PCI_DEVICE_ID_INTEL_ICH8_6	0x2850
++#define PCI_DEVICE_ID_INTEL_ICH9_0	0x2910
++#define PCI_DEVICE_ID_INTEL_ICH9_1	0x2911
++#define PCI_DEVICE_ID_INTEL_ICH9_2	0x2912
++#define PCI_DEVICE_ID_INTEL_ICH9_3	0x2913
++#define PCI_DEVICE_ID_INTEL_ICH9_4	0x2914
++#define PCI_DEVICE_ID_INTEL_ICH9_5	0x2915
++#define PCI_DEVICE_ID_INTEL_ICH9_6	0x2930
+ #define PCI_DEVICE_ID_INTEL_82855PM_HB	0x3340
+ #define PCI_DEVICE_ID_INTEL_82830_HB	0x3575
+ #define PCI_DEVICE_ID_INTEL_82830_CGC	0x3577
+diff --git a/mm/shmem.c b/mm/shmem.c
+index 1bc2285..e25bced 100644
+--- a/mm/shmem.c
++++ b/mm/shmem.c
+@@ -510,7 +510,12 @@ static void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end)
+ 			size = SHMEM_NR_DIRECT;
+ 		nr_swaps_freed = shmem_free_swp(ptr+idx, ptr+size);
+ 	}
+-	if (!topdir)
++
++	/*
++	 * If there are no indirect blocks or we are punching a hole
++	 * below indirect blocks, nothing to be done.
++	 */
++	if (!topdir || (punch_hole && (limit <= SHMEM_NR_DIRECT)))
+ 		goto done2;
+ 
+ 	BUG_ON(limit <= SHMEM_NR_DIRECT);
+diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c
+index 8171fea..558df47 100644
+--- a/net/bridge/netfilter/ebtables.c
++++ b/net/bridge/netfilter/ebtables.c
+@@ -596,7 +596,7 @@ ebt_check_entry(struct ebt_entry *e, struct ebt_table_info *newinfo,
+ 	struct ebt_entry_target *t;
+ 	struct ebt_target *target;
+ 	unsigned int i, j, hook = 0, hookmask = 0;
+-	size_t gap = e->next_offset - e->target_offset;
++	size_t gap;
+ 	int ret;
+ 
+ 	/* don't mess with the struct ebt_entries */
+@@ -646,6 +646,7 @@ ebt_check_entry(struct ebt_entry *e, struct ebt_table_info *newinfo,
+ 	if (ret != 0)
+ 		goto cleanup_watchers;
+ 	t = (struct ebt_entry_target *)(((char *)e) + e->target_offset);
++	gap = e->next_offset - e->target_offset;
+ 	target = find_target_lock(t->u.name, &ret, &ebt_mutex);
+ 	if (!target)
+ 		goto cleanup_watchers;
+diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
+index 3ffa60d..73a6200 100644
+--- a/net/ipv4/devinet.c
++++ b/net/ipv4/devinet.c
+@@ -158,9 +158,8 @@ struct in_device *inetdev_init(struct net_device *dev)
+ 			      NET_IPV4_NEIGH, "ipv4", NULL, NULL);
+ #endif
+ 
+-	/* Account for reference dev->ip_ptr */
++	/* Account for reference dev->ip_ptr (below) */
+ 	in_dev_hold(in_dev);
+-	rcu_assign_pointer(dev->ip_ptr, in_dev);
+ 
+ #ifdef CONFIG_SYSCTL
+ 	devinet_sysctl_register(in_dev, &in_dev->cnf);
+@@ -169,6 +168,8 @@ struct in_device *inetdev_init(struct net_device *dev)
+ 	if (dev->flags & IFF_UP)
+ 		ip_mc_up(in_dev);
+ out:
++	/* we can receive as soon as ip_ptr is set -- do this last */
++	rcu_assign_pointer(dev->ip_ptr, in_dev);
+ 	return in_dev;
+ out_kfree:
+ 	kfree(in_dev);
+diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
+index 807c021..c75cd1c 100644
+--- a/net/ipv6/mcast.c
++++ b/net/ipv6/mcast.c
+@@ -2252,8 +2252,6 @@ void ipv6_mc_up(struct inet6_dev *idev)
+ 
+ void ipv6_mc_init_dev(struct inet6_dev *idev)
+ {
+-	struct in6_addr maddr;
+-
+ 	write_lock_bh(&idev->lock);
+ 	rwlock_init(&idev->mc_lock);
+ 	idev->mc_gq_running = 0;
+@@ -2269,10 +2267,6 @@ void ipv6_mc_init_dev(struct inet6_dev *idev)
+ 	idev->mc_maxdelay = IGMP6_UNSOLICITED_IVAL;
+ 	idev->mc_v1_seen = 0;
+ 	write_unlock_bh(&idev->lock);
+-
+-	/* Add all-nodes address. */
+-	ipv6_addr_all_nodes(&maddr);
+-	ipv6_dev_mc_inc(idev->dev, &maddr);
+ }
+ 
+ /*
+diff --git a/sound/sparc/cs4231.c b/sound/sparc/cs4231.c
+index fd65439..e581a02 100644
+--- a/sound/sparc/cs4231.c
++++ b/sound/sparc/cs4231.c
+@@ -1271,7 +1271,7 @@ static struct snd_pcm_hardware snd_cs4231_playback =
+ 	.channels_min		= 1,
+ 	.channels_max		= 2,
+ 	.buffer_bytes_max	= (32*1024),
+-	.period_bytes_min	= 4096,
++	.period_bytes_min	= 64,
+ 	.period_bytes_max	= (32*1024),
+ 	.periods_min		= 1,
+ 	.periods_max		= 1024,
+@@ -1291,7 +1291,7 @@ static struct snd_pcm_hardware snd_cs4231_capture =
+ 	.channels_min		= 1,
+ 	.channels_max		= 2,
+ 	.buffer_bytes_max	= (32*1024),
+-	.period_bytes_min	= 4096,
++	.period_bytes_min	= 64,
+ 	.period_bytes_max	= (32*1024),
+ 	.periods_min		= 1,
+ 	.periods_max		= 1024,
+@@ -1799,7 +1799,7 @@ static irqreturn_t snd_cs4231_sbus_interrupt(int irq, void *dev_id, struct pt_re
+ 	snd_cs4231_outm(chip, CS4231_IRQ_STATUS, ~CS4231_ALL_IRQS | ~status, 0);
+ 	spin_unlock_irqrestore(&chip->lock, flags);
+ 
+-	return 0;
++	return IRQ_HANDLED;
+ }
+ 
+ /*
+@@ -1824,7 +1824,6 @@ static int sbus_dma_request(struct cs4231_dma_control *dma_cont, dma_addr_t bus_
+ 	if (!(csr & test))
+ 		goto out;
+ 	err = -EBUSY;
+-	csr = sbus_readl(base->regs + APCCSR);
+ 	test = APC_XINT_CNVA;
+ 	if ( base->dir == APC_PLAY )
+ 		test = APC_XINT_PNVA;
+@@ -1865,17 +1864,16 @@ static void sbus_dma_enable(struct cs4231_dma_control *dma_cont, int on)
+ 
+ 	spin_lock_irqsave(&base->lock, flags);
+ 	if (!on) {
+-		if (base->dir == APC_PLAY) { 
+-			sbus_writel(0, base->regs + base->dir + APCNVA); 
+-			sbus_writel(1, base->regs + base->dir + APCC); 
+-		}
+-		else
+-		{
+-			sbus_writel(0, base->regs + base->dir + APCNC); 
+-			sbus_writel(0, base->regs + base->dir + APCVA); 
+-		} 
++		sbus_writel(0, base->regs + base->dir + APCNC);
++		sbus_writel(0, base->regs + base->dir + APCNVA);
++		sbus_writel(0, base->regs + base->dir + APCC);
++		sbus_writel(0, base->regs + base->dir + APCVA);
++
++		/* ACK any APC interrupts. */
++		csr = sbus_readl(base->regs + APCCSR);
++		sbus_writel(csr, base->regs + APCCSR);
+ 	} 
+-	udelay(600); 
++	udelay(1000);
+ 	csr = sbus_readl(base->regs + APCCSR);
+ 	shift = 0;
+ 	if ( base->dir == APC_PLAY )

Modified: dists/sid/linux-2.6/debian/patches/series/10
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/10	(original)
+++ dists/sid/linux-2.6/debian/patches/series/10	Thu Jan 25 13:48:22 2007
@@ -1,3 +1,5 @@
 + bugfix/scsi-add-missing-cdb-clearing-in-scsi_execute.patch
 + bugfix/don-t-leak-nt-bit-into-next-task.patch
 + bugfix/ib-srp-fix-fmr-mapping-for-32-bit-kernels-and-addresses-above-4g.patch
+- bugfix/fs-hfs-mokb.patch
++ bugfix/2.6.16.38



More information about the Kernel-svn-changes mailing list