[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