[kernel] r5020 - in dists/sid/linux-2.6/debian: . patches-debian
patches-debian/series
maximilian attems
maks-guest at costa.debian.org
Thu Dec 15 18:41:48 UTC 2005
Author: maks-guest
Date: Thu Dec 15 18:41:47 2005
New Revision: 5020
Added:
dists/sid/linux-2.6/debian/patches-debian/2.6.14.4.patch
dists/sid/linux-2.6/debian/patches-debian/series/2.6.14-6
Modified:
dists/sid/linux-2.6/debian/changelog
Log:
add 2.6.14.4
2.6.14.5 is in preparation.
Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog (original)
+++ dists/sid/linux-2.6/debian/changelog Thu Dec 15 18:41:47 2005
@@ -3,8 +3,33 @@
[ maximilian attems ]
* Drop modular-ide.patch, nacked by ide upstream. Prevents udev to load
ide-generic and those successfull boots with initramfs-tools.
+ * Add stable tree 2.6.14.4 with the following fixes:
+ - drivers/scsi/dpt_i2o.c: fix a user-after-free
+ - drivers/message/i2o/pci.c: fix a use-after-free
+ - drivers/infiniband/core/mad.c: fix a use-after-free
+ - DVB: BUDGET CI card depends on STV0297 demodulator
+ - setkeys needs root
+ - Fix listxattr() for generic security attributes
+ - AGPGART: Fix serverworks TLB flush.
+ - Fix crash when ptrace poking hugepage areas
+ - I8K: fix /proc reporting of blank service tags
+ - i82365: release all resources if no devices are found
+ - bonding: fix feature consolidation
+ - libata: locking rewrite (== fix)
+ - cciss: bug fix for BIG_PASS_THRU
+ - ALSA: nm256: reset workaround for Latitude CSx
+ - cciss: bug fix for hpacucli
+ - V4L/DVB: Fix analog NTSC for Thomson DTT 761X hybrid tuner
+ - BRIDGE: recompute features when adding a new device
+ - 32bit integer overflow in invalidate_inode_pages2()
+ - USB: Adapt microtek driver to new scsi features
+ - ide-floppy: software eject not working with LS-120 drive
+ - Add try_to_freeze to kauditd
+ - V4L/DVB (3135) Fix tuner init for Pinnacle PCTV Stereo
+ - NETLINK: Fix processing of fib_lookup netlink messages
+ - ACPI: fix HP nx8220 boot hang regression
- -- maximilian attems <max at sputnik.stro.at> Mon, 12 Dec 2005 13:00:23 +0100
+ -- maximilian attems <maks at sternwelten.at> Thu, 15 Dec 2005 19:35:47 +0100
linux-2.6 (2.6.14-5) unstable; urgency=low
Added: dists/sid/linux-2.6/debian/patches-debian/2.6.14.4.patch
==============================================================================
--- (empty file)
+++ dists/sid/linux-2.6/debian/patches-debian/2.6.14.4.patch Thu Dec 15 18:41:47 2005
@@ -0,0 +1,705 @@
+diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
+index c6db591..681eb19 100644
+--- a/drivers/acpi/scan.c
++++ b/drivers/acpi/scan.c
+@@ -1111,7 +1111,7 @@ acpi_add_single_object(struct acpi_devic
+ *
+ * TBD: Assumes LDM provides driver hot-plug capability.
+ */
+- result = acpi_bus_find_driver(device);
++ acpi_bus_find_driver(device);
+
+ end:
+ if (!result)
+diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
+index 486b6e1..7bb1f1a 100644
+--- a/drivers/block/cciss.c
++++ b/drivers/block/cciss.c
+@@ -1016,10 +1016,11 @@ static int cciss_ioctl(struct inode *ino
+ status = -ENOMEM;
+ goto cleanup1;
+ }
+- if (ioc->Request.Type.Direction == XFER_WRITE &&
+- copy_from_user(buff[sg_used], data_ptr, sz)) {
++ if (ioc->Request.Type.Direction == XFER_WRITE) {
++ if (copy_from_user(buff[sg_used], data_ptr, sz)) {
+ status = -ENOMEM;
+- goto cleanup1;
++ goto cleanup1;
++ }
+ } else {
+ memset(buff[sg_used], 0, sz);
+ }
+diff --git a/drivers/char/agp/sworks-agp.c b/drivers/char/agp/sworks-agp.c
+index a9fb12c..5396897 100644
+--- a/drivers/char/agp/sworks-agp.c
++++ b/drivers/char/agp/sworks-agp.c
+@@ -242,13 +242,27 @@ static int serverworks_fetch_size(void)
+ */
+ static void serverworks_tlbflush(struct agp_memory *temp)
+ {
++ unsigned long timeout;
++
+ writeb(1, serverworks_private.registers+SVWRKS_POSTFLUSH);
+- while (readb(serverworks_private.registers+SVWRKS_POSTFLUSH) == 1)
++ timeout = jiffies + 3*HZ;
++ while (readb(serverworks_private.registers+SVWRKS_POSTFLUSH) == 1) {
+ cpu_relax();
++ if (time_after(jiffies, timeout)) {
++ printk(KERN_ERR PFX "TLB post flush took more than 3 seconds\n");
++ break;
++ }
++ }
+
+ writel(1, serverworks_private.registers+SVWRKS_DIRFLUSH);
+- while(readl(serverworks_private.registers+SVWRKS_DIRFLUSH) == 1)
++ timeout = jiffies + 3*HZ;
++ while (readl(serverworks_private.registers+SVWRKS_DIRFLUSH) == 1) {
+ cpu_relax();
++ if (time_after(jiffies, timeout)) {
++ printk(KERN_ERR PFX "TLB Dir flush took more than 3 seconds\n");
++ break;
++ }
++ }
+ }
+
+ static int serverworks_configure(void)
+diff --git a/drivers/char/i8k.c b/drivers/char/i8k.c
+index 6c4b3f9..f3c3aaf 100644
+--- a/drivers/char/i8k.c
++++ b/drivers/char/i8k.c
+@@ -99,7 +99,9 @@ struct smm_regs {
+
+ static inline char *i8k_get_dmi_data(int field)
+ {
+- return dmi_get_system_info(field) ? : "N/A";
++ char *dmi_data = dmi_get_system_info(field);
++
++ return dmi_data && *dmi_data ? dmi_data : "?";
+ }
+
+ /*
+@@ -396,7 +398,7 @@ static int i8k_proc_show(struct seq_file
+ return seq_printf(seq, "%s %s %s %d %d %d %d %d %d %d\n",
+ I8K_PROC_FMT,
+ bios_version,
+- dmi_get_system_info(DMI_PRODUCT_SERIAL) ? : "N/A",
++ i8k_get_dmi_data(DMI_PRODUCT_SERIAL),
+ cpu_temp,
+ left_fan, right_fan, left_speed, right_speed,
+ ac_power, fn_key);
+diff --git a/drivers/char/vt_ioctl.c b/drivers/char/vt_ioctl.c
+index 1d44f69..24011e7 100644
+--- a/drivers/char/vt_ioctl.c
++++ b/drivers/char/vt_ioctl.c
+@@ -80,6 +80,9 @@ do_kdsk_ioctl(int cmd, struct kbentry __
+ if (copy_from_user(&tmp, user_kbe, sizeof(struct kbentry)))
+ return -EFAULT;
+
++ if (!capable(CAP_SYS_TTY_CONFIG))
++ perm = 0;
++
+ switch (cmd) {
+ case KDGKBENT:
+ key_map = key_maps[s];
+@@ -192,6 +195,9 @@ do_kdgkb_ioctl(int cmd, struct kbsentry
+ int i, j, k;
+ int ret;
+
++ if (!capable(CAP_SYS_TTY_CONFIG))
++ perm = 0;
++
+ kbs = kmalloc(sizeof(*kbs), GFP_KERNEL);
+ if (!kbs) {
+ ret = -ENOMEM;
+diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
+index 29c22fc..f53658b 100644
+--- a/drivers/ide/ide-floppy.c
++++ b/drivers/ide/ide-floppy.c
+@@ -2038,11 +2038,9 @@ static int idefloppy_ioctl(struct inode
+ struct ide_floppy_obj *floppy = ide_floppy_g(bdev->bd_disk);
+ ide_drive_t *drive = floppy->drive;
+ void __user *argp = (void __user *)arg;
+- int err = generic_ide_ioctl(drive, file, bdev, cmd, arg);
++ int err;
+ int prevent = (arg) ? 1 : 0;
+ idefloppy_pc_t pc;
+- if (err != -EINVAL)
+- return err;
+
+ switch (cmd) {
+ case CDROMEJECT:
+@@ -2094,7 +2092,7 @@ static int idefloppy_ioctl(struct inode
+ case IDEFLOPPY_IOCTL_FORMAT_GET_PROGRESS:
+ return idefloppy_get_format_progress(drive, argp);
+ }
+- return -EINVAL;
++ return generic_ide_ioctl(drive, file, bdev, cmd, arg);
+ }
+
+ static int idefloppy_media_changed(struct gendisk *disk)
+diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
+index a14ca87..96855fc 100644
+--- a/drivers/infiniband/core/mad.c
++++ b/drivers/infiniband/core/mad.c
+@@ -356,9 +356,9 @@ error4:
+ spin_unlock_irqrestore(&port_priv->reg_lock, flags);
+ kfree(reg_req);
+ error3:
+- kfree(mad_agent_priv);
+-error2:
+ ib_dereg_mr(mad_agent_priv->agent.mr);
++error2:
++ kfree(mad_agent_priv);
+ error1:
+ return ret;
+ }
+diff --git a/drivers/media/dvb/ttpci/Kconfig b/drivers/media/dvb/ttpci/Kconfig
+index d8bf658..fa5034a 100644
+--- a/drivers/media/dvb/ttpci/Kconfig
++++ b/drivers/media/dvb/ttpci/Kconfig
+@@ -81,6 +81,7 @@ config DVB_BUDGET_CI
+ tristate "Budget cards with onboard CI connector"
+ depends on DVB_CORE && PCI
+ select VIDEO_SAA7146
++ select DVB_STV0297
+ select DVB_STV0299
+ select DVB_TDA1004X
+ help
+diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c
+index 4da91d5..7aa8566 100644
+--- a/drivers/media/video/cx88/cx88-cards.c
++++ b/drivers/media/video/cx88/cx88-cards.c
+@@ -567,6 +567,7 @@ struct cx88_board cx88_boards[] = {
+ .radio_type = UNSET,
+ .tuner_addr = ADDR_UNSET,
+ .radio_addr = ADDR_UNSET,
++ .tda9887_conf = TDA9887_PRESENT,
+ .input = {{
+ .type = CX88_VMUX_TELEVISION,
+ .vmux = 0,
+@@ -711,6 +712,7 @@ struct cx88_board cx88_boards[] = {
+ .radio_type = UNSET,
+ .tuner_addr = ADDR_UNSET,
+ .radio_addr = ADDR_UNSET,
++ .tda9887_conf = TDA9887_PRESENT,
+ .input = {{
+ .type = CX88_VMUX_TELEVISION,
+ .vmux = 0,
+diff --git a/drivers/media/video/saa7134/saa7134-cards.c b/drivers/media/video/saa7134/saa7134-cards.c
+index acc7a43..3a85d41 100644
+--- a/drivers/media/video/saa7134/saa7134-cards.c
++++ b/drivers/media/video/saa7134/saa7134-cards.c
+@@ -972,7 +972,7 @@ struct saa7134_board saa7134_boards[] =
+ .radio_type = UNSET,
+ .tuner_addr = ADDR_UNSET,
+ .radio_addr = ADDR_UNSET,
+- .tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER,
++ .tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER | TDA9887_PORT2_ACTIVE,
+ .inputs = {{
+ .name = name_tv,
+ .vmux = 3,
+diff --git a/drivers/message/i2o/pci.c b/drivers/message/i2o/pci.c
+index 66c03e8..81ef306 100644
+--- a/drivers/message/i2o/pci.c
++++ b/drivers/message/i2o/pci.c
+@@ -421,8 +421,8 @@ static int __devinit i2o_pci_probe(struc
+ i2o_pci_free(c);
+
+ free_controller:
+- i2o_iop_free(c);
+ put_device(c->device.parent);
++ i2o_iop_free(c);
+
+ disable:
+ pci_disable_device(pdev);
+diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
+index f264ff1..519b4a9 100644
+--- a/drivers/net/bonding/bond_main.c
++++ b/drivers/net/bonding/bond_main.c
+@@ -1604,35 +1604,27 @@ static int bond_sethwaddr(struct net_dev
+ (NETIF_F_SG|NETIF_F_IP_CSUM|NETIF_F_NO_CSUM|NETIF_F_HW_CSUM)
+
+ /*
+- * Compute the features available to the bonding device by
+- * intersection of all of the slave devices' BOND_INTERSECT_FEATURES.
+- * Call this after attaching or detaching a slave to update the
+- * bond's features.
++ * Compute the common dev->feature set available to all slaves. Some
++ * feature bits are managed elsewhere, so preserve feature bits set on
++ * master device that are not part of the examined set.
+ */
+ static int bond_compute_features(struct bonding *bond)
+ {
+- int i;
++ unsigned long features = BOND_INTERSECT_FEATURES;
+ struct slave *slave;
+ struct net_device *bond_dev = bond->dev;
+- int features = bond->bond_features;
++ int i;
+
+- bond_for_each_slave(bond, slave, i) {
+- struct net_device * slave_dev = slave->dev;
+- if (i == 0) {
+- features |= BOND_INTERSECT_FEATURES;
+- }
+- features &=
+- ~(~slave_dev->features & BOND_INTERSECT_FEATURES);
+- }
++ bond_for_each_slave(bond, slave, i)
++ features &= (slave->dev->features & BOND_INTERSECT_FEATURES);
+
+- /* turn off NETIF_F_SG if we need a csum and h/w can't do it */
+ if ((features & NETIF_F_SG) &&
+- !(features & (NETIF_F_IP_CSUM |
+- NETIF_F_NO_CSUM |
+- NETIF_F_HW_CSUM))) {
++ !(features & (NETIF_F_IP_CSUM |
++ NETIF_F_NO_CSUM |
++ NETIF_F_HW_CSUM)))
+ features &= ~NETIF_F_SG;
+- }
+
++ features |= (bond_dev->features & ~BOND_INTERSECT_FEATURES);
+ bond_dev->features = features;
+
+ return 0;
+@@ -4508,8 +4500,6 @@ static int __init bond_init(struct net_d
+ NETIF_F_HW_VLAN_RX |
+ NETIF_F_HW_VLAN_FILTER);
+
+- bond->bond_features = bond_dev->features;
+-
+ #ifdef CONFIG_PROC_FS
+ bond_create_proc_entry(bond);
+ #endif
+diff --git a/drivers/net/bonding/bonding.h b/drivers/net/bonding/bonding.h
+index bbf9da8..1433e91 100644
+--- a/drivers/net/bonding/bonding.h
++++ b/drivers/net/bonding/bonding.h
+@@ -40,8 +40,8 @@
+ #include "bond_3ad.h"
+ #include "bond_alb.h"
+
+-#define DRV_VERSION "2.6.4"
+-#define DRV_RELDATE "September 26, 2005"
++#define DRV_VERSION "2.6.5"
++#define DRV_RELDATE "November 4, 2005"
+ #define DRV_NAME "bonding"
+ #define DRV_DESCRIPTION "Ethernet Channel Bonding Driver"
+
+@@ -211,9 +211,6 @@ struct bonding {
+ struct bond_params params;
+ struct list_head vlan_list;
+ struct vlan_group *vlgrp;
+- /* the features the bonding device supports, independently
+- * of any slaves */
+- int bond_features;
+ };
+
+ /**
+diff --git a/drivers/pcmcia/i82365.c b/drivers/pcmcia/i82365.c
+index a713015..7d9898f 100644
+--- a/drivers/pcmcia/i82365.c
++++ b/drivers/pcmcia/i82365.c
+@@ -1382,6 +1382,7 @@ static int __init init_i82365(void)
+ if (sockets == 0) {
+ printk("not found.\n");
+ platform_device_unregister(&i82365_device);
++ release_region(i365_base, 2);
+ driver_unregister(&i82365_driver);
+ return -ENODEV;
+ }
+diff --git a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c
+index 7235f94..8a603ea 100644
+--- a/drivers/scsi/dpt_i2o.c
++++ b/drivers/scsi/dpt_i2o.c
+@@ -816,7 +816,7 @@ static int adpt_hba_reset(adpt_hba* pHba
+ static void adpt_i2o_sys_shutdown(void)
+ {
+ adpt_hba *pHba, *pNext;
+- struct adpt_i2o_post_wait_data *p1, *p2;
++ struct adpt_i2o_post_wait_data *p1, *old;
+
+ printk(KERN_INFO"Shutting down Adaptec I2O controllers.\n");
+ printk(KERN_INFO" This could take a few minutes if there are many devices attached\n");
+@@ -830,13 +830,14 @@ static void adpt_i2o_sys_shutdown(void)
+ }
+
+ /* Remove any timedout entries from the wait queue. */
+- p2 = NULL;
+ // spin_lock_irqsave(&adpt_post_wait_lock, flags);
+ /* Nothing should be outstanding at this point so just
+ * free them
+ */
+- for(p1 = adpt_post_wait_queue; p1; p2 = p1, p1 = p2->next) {
+- kfree(p1);
++ for(p1 = adpt_post_wait_queue; p1;) {
++ old = p1;
++ p1 = p1->next;
++ kfree(old);
+ }
+ // spin_unlock_irqrestore(&adpt_post_wait_lock, flags);
+ adpt_post_wait_queue = NULL;
+diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
+index e5b0199..f9e9973 100644
+--- a/drivers/scsi/libata-core.c
++++ b/drivers/scsi/libata-core.c
+@@ -3916,8 +3916,6 @@ static void ata_host_init(struct ata_por
+ host->unique_id = ata_unique_id++;
+ host->max_cmd_len = 12;
+
+- scsi_assign_lock(host, &host_set->lock);
+-
+ ap->flags = ATA_FLAG_PORT_DISABLED;
+ ap->id = host->unique_id;
+ ap->host = host;
+diff --git a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c
+index 104fd9a..112317e 100644
+--- a/drivers/scsi/libata-scsi.c
++++ b/drivers/scsi/libata-scsi.c
+@@ -39,6 +39,7 @@
+ #include <scsi/scsi.h>
+ #include "scsi.h"
+ #include <scsi/scsi_host.h>
++#include <scsi/scsi_device.h>
+ #include <linux/libata.h>
+ #include <asm/uaccess.h>
+
+@@ -1565,8 +1566,12 @@ int ata_scsi_queuecmd(struct scsi_cmnd *
+ struct ata_port *ap;
+ struct ata_device *dev;
+ struct scsi_device *scsidev = cmd->device;
++ struct Scsi_Host *shost = scsidev->host;
+
+- ap = (struct ata_port *) &scsidev->host->hostdata[0];
++ ap = (struct ata_port *) &shost->hostdata[0];
++
++ spin_unlock(shost->host_lock);
++ spin_lock(&ap->host_set->lock);
+
+ ata_scsi_dump_cdb(ap, cmd);
+
+@@ -1589,6 +1594,8 @@ int ata_scsi_queuecmd(struct scsi_cmnd *
+ ata_scsi_translate(ap, dev, cmd, done, atapi_xlat);
+
+ out_unlock:
++ spin_unlock(&ap->host_set->lock);
++ spin_lock(shost->host_lock);
+ return 0;
+ }
+
+diff --git a/drivers/usb/image/microtek.c b/drivers/usb/image/microtek.c
+index c84e148..e697dd7 100644
+--- a/drivers/usb/image/microtek.c
++++ b/drivers/usb/image/microtek.c
+@@ -327,6 +327,18 @@ static inline void mts_urb_abort(struct
+ usb_kill_urb( desc->urb );
+ }
+
++static int mts_slave_alloc (struct scsi_device *s)
++{
++ s->inquiry_len = 0x24;
++ return 0;
++}
++
++static int mts_slave_configure (struct scsi_device *s)
++{
++ blk_queue_dma_alignment(s->request_queue, (512 - 1));
++ return 0;
++}
++
+ static int mts_scsi_abort (Scsi_Cmnd *srb)
+ {
+ struct mts_desc* desc = (struct mts_desc*)(srb->device->host->hostdata[0]);
+@@ -411,7 +423,7 @@ static void mts_transfer_done( struct ur
+ MTS_INT_INIT();
+
+ context->srb->result &= MTS_SCSI_ERR_MASK;
+- context->srb->result |= (unsigned)context->status<<1;
++ context->srb->result |= (unsigned)(*context->scsi_status)<<1;
+
+ mts_transfer_cleanup(transfer);
+
+@@ -427,7 +439,7 @@ static void mts_get_status( struct urb *
+ mts_int_submit_urb(transfer,
+ usb_rcvbulkpipe(context->instance->usb_dev,
+ context->instance->ep_response),
+- &context->status,
++ context->scsi_status,
+ 1,
+ mts_transfer_done );
+ }
+@@ -481,7 +493,7 @@ static void mts_command_done( struct urb
+ context->data_pipe,
+ context->data,
+ context->data_length,
+- context->srb->use_sg ? mts_do_sg : mts_data_done);
++ context->srb->use_sg > 1 ? mts_do_sg : mts_data_done);
+ } else {
+ mts_get_status(transfer);
+ }
+@@ -627,7 +639,6 @@ int mts_scsi_queuecommand( Scsi_Cmnd *sr
+ callback(srb);
+
+ }
+-
+ out:
+ return err;
+ }
+@@ -645,6 +656,9 @@ static Scsi_Host_Template mts_scsi_host_
+ .cmd_per_lun = 1,
+ .use_clustering = 1,
+ .emulated = 1,
++ .slave_alloc = mts_slave_alloc,
++ .slave_configure = mts_slave_configure,
++ .max_sectors= 256, /* 128 K */
+ };
+
+ struct vendor_product
+@@ -782,6 +796,10 @@ static int mts_usb_probe(struct usb_inte
+ if (!new_desc->urb)
+ goto out_kfree;
+
++ new_desc->context.scsi_status = kmalloc(1, GFP_KERNEL);
++ if (!new_desc->context.scsi_status)
++ goto out_kfree2;
++
+ new_desc->usb_dev = dev;
+ new_desc->usb_intf = intf;
+ init_MUTEX(&new_desc->lock);
+@@ -818,6 +836,8 @@ static int mts_usb_probe(struct usb_inte
+ usb_set_intfdata(intf, new_desc);
+ return 0;
+
++ out_kfree2:
++ kfree(new_desc->context.scsi_status);
+ out_free_urb:
+ usb_free_urb(new_desc->urb);
+ out_kfree:
+@@ -837,6 +857,7 @@ static void mts_usb_disconnect (struct u
+
+ scsi_host_put(desc->host);
+ usb_free_urb(desc->urb);
++ kfree(desc->context.scsi_status);
+ kfree(desc);
+ }
+
+@@ -857,5 +878,3 @@ module_exit(microtek_drv_exit);
+ MODULE_AUTHOR( DRIVER_AUTHOR );
+ MODULE_DESCRIPTION( DRIVER_DESC );
+ MODULE_LICENSE("GPL");
+-
+-
+diff --git a/drivers/usb/image/microtek.h b/drivers/usb/image/microtek.h
+index 3271deb..926d4bd 100644
+--- a/drivers/usb/image/microtek.h
++++ b/drivers/usb/image/microtek.h
+@@ -22,7 +22,7 @@ struct mts_transfer_context
+ int data_pipe;
+ int fragment;
+
+- u8 status; /* status returned from ep_response after command completion */
++ u8 *scsi_status; /* status returned from ep_response after command completion */
+ };
+
+
+diff --git a/fs/xattr.c b/fs/xattr.c
+index 3f9c64b..a7bfacf 100644
+--- a/fs/xattr.c
++++ b/fs/xattr.c
+@@ -243,7 +243,7 @@ listxattr(struct dentry *d, char __user
+ error = d->d_inode->i_op->listxattr(d, klist, size);
+ } else {
+ error = security_inode_listsecurity(d->d_inode, klist, size);
+- if (size && error >= size)
++ if (size && error > size)
+ error = -ERANGE;
+ }
+ if (error > 0) {
+diff --git a/include/linux/cciss_ioctl.h b/include/linux/cciss_ioctl.h
+index 424d5e6..6e27f42 100644
+--- a/include/linux/cciss_ioctl.h
++++ b/include/linux/cciss_ioctl.h
+@@ -10,8 +10,8 @@
+ typedef struct _cciss_pci_info_struct
+ {
+ unsigned char bus;
+- unsigned short domain;
+ unsigned char dev_fn;
++ unsigned short domain;
+ __u32 board_id;
+ } cciss_pci_info_struct;
+
+diff --git a/kernel/audit.c b/kernel/audit.c
+index aefa73a..ddf97e6 100644
+--- a/kernel/audit.c
++++ b/kernel/audit.c
+@@ -291,8 +291,10 @@ int kauditd_thread(void *dummy)
+ set_current_state(TASK_INTERRUPTIBLE);
+ add_wait_queue(&kauditd_wait, &wait);
+
+- if (!skb_queue_len(&audit_skb_queue))
++ if (!skb_queue_len(&audit_skb_queue)) {
++ try_to_freeze();
+ schedule();
++ }
+
+ __set_current_state(TASK_RUNNING);
+ remove_wait_queue(&kauditd_wait, &wait);
+diff --git a/kernel/ptrace.c b/kernel/ptrace.c
+index fcfc456..260165f 100644
+--- a/kernel/ptrace.c
++++ b/kernel/ptrace.c
+@@ -238,7 +238,8 @@ int access_process_vm(struct task_struct
+ if (write) {
+ copy_to_user_page(vma, page, addr,
+ maddr + offset, buf, bytes);
+- set_page_dirty_lock(page);
++ if (!PageCompound(page))
++ set_page_dirty_lock(page);
+ } else {
+ copy_from_user_page(vma, page, addr,
+ buf, maddr + offset, bytes);
+diff --git a/mm/truncate.c b/mm/truncate.c
+index 60c8764..0dff870 100644
+--- a/mm/truncate.c
++++ b/mm/truncate.c
+@@ -291,8 +291,8 @@ int invalidate_inode_pages2_range(struct
+ * Zap the rest of the file in one hit.
+ */
+ unmap_mapping_range(mapping,
+- page_index << PAGE_CACHE_SHIFT,
+- (end - page_index + 1)
++ (loff_t)page_index<<PAGE_CACHE_SHIFT,
++ (loff_t)(end - page_index + 1)
+ << PAGE_CACHE_SHIFT,
+ 0);
+ did_range_unmap = 1;
+@@ -301,7 +301,7 @@ int invalidate_inode_pages2_range(struct
+ * Just zap this page
+ */
+ unmap_mapping_range(mapping,
+- page_index << PAGE_CACHE_SHIFT,
++ (loff_t)page_index<<PAGE_CACHE_SHIFT,
+ PAGE_CACHE_SIZE, 0);
+ }
+ }
+diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
+index defcf6a..975abe2 100644
+--- a/net/bridge/br_if.c
++++ b/net/bridge/br_if.c
+@@ -366,6 +366,7 @@ int br_add_if(struct net_bridge *br, str
+
+ spin_lock_bh(&br->lock);
+ br_stp_recalculate_bridge_id(br);
++ br_features_recompute(br);
+ if ((br->dev->flags & IFF_UP)
+ && (dev->flags & IFF_UP) && netif_carrier_ok(dev))
+ br_stp_enable_port(p);
+diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
+index e61bc71..bc6f0a3 100644
+--- a/net/ipv4/fib_frontend.c
++++ b/net/ipv4/fib_frontend.c
+@@ -545,12 +545,16 @@ static void nl_fib_input(struct sock *sk
+ struct sk_buff *skb = NULL;
+ struct nlmsghdr *nlh = NULL;
+ struct fib_result_nl *frn;
+- int err;
+ u32 pid;
+ struct fib_table *tb;
+
+- skb = skb_recv_datagram(sk, 0, 0, &err);
++ skb = skb_dequeue(&sk->sk_receive_queue);
+ nlh = (struct nlmsghdr *)skb->data;
++ if (skb->len < NLMSG_SPACE(0) || skb->len < nlh->nlmsg_len ||
++ nlh->nlmsg_len < NLMSG_LENGTH(sizeof(*frn))) {
++ kfree_skb(skb);
++ return;
++ }
+
+ frn = (struct fib_result_nl *) NLMSG_DATA(nlh);
+ tb = fib_get_table(frn->tb_id_in);
+diff --git a/sound/pci/nm256/nm256.c b/sound/pci/nm256/nm256.c
+index 5c55a3b..229bced 100644
+--- a/sound/pci/nm256/nm256.c
++++ b/sound/pci/nm256/nm256.c
+@@ -62,6 +62,7 @@ static int buffer_top[SNDRV_CARDS] = {[0
+ static int use_cache[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; /* disabled */
+ static int vaio_hack[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; /* disabled */
+ static int reset_workaround[SNDRV_CARDS];
++static int reset_workaround_2[SNDRV_CARDS];
+
+ module_param_array(index, int, NULL, 0444);
+ MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
+@@ -83,6 +84,8 @@ module_param_array(vaio_hack, bool, NULL
+ MODULE_PARM_DESC(vaio_hack, "Enable workaround for Sony VAIO notebooks.");
+ module_param_array(reset_workaround, bool, NULL, 0444);
+ MODULE_PARM_DESC(reset_workaround, "Enable AC97 RESET workaround for some laptops.");
++module_param_array(reset_workaround_2, bool, NULL, 0444);
++MODULE_PARM_DESC(reset_workaround_2, "Enable extended AC97 RESET workaround for some other laptops.");
+
+ /*
+ * hw definitions
+@@ -226,6 +229,7 @@ struct snd_nm256 {
+ unsigned int coeffs_current: 1; /* coeff. table is loaded? */
+ unsigned int use_cache: 1; /* use one big coef. table */
+ unsigned int reset_workaround: 1; /* Workaround for some laptops to avoid freeze */
++ unsigned int reset_workaround_2: 1; /* Extended workaround for some other laptops to avoid freeze */
+
+ int mixer_base; /* register offset of ac97 mixer */
+ int mixer_status_offset; /* offset of mixer status reg. */
+@@ -1199,8 +1203,11 @@ snd_nm256_ac97_reset(ac97_t *ac97)
+ /* Dell latitude LS will lock up by this */
+ snd_nm256_writeb(chip, 0x6cc, 0x87);
+ }
+- snd_nm256_writeb(chip, 0x6cc, 0x80);
+- snd_nm256_writeb(chip, 0x6cc, 0x0);
++ if (! chip->reset_workaround_2) {
++ /* Dell latitude CSx will lock up by this */
++ snd_nm256_writeb(chip, 0x6cc, 0x80);
++ snd_nm256_writeb(chip, 0x6cc, 0x0);
++ }
+ }
+
+ /* create an ac97 mixer interface */
+@@ -1542,7 +1549,7 @@ struct nm256_quirk {
+ int type;
+ };
+
+-enum { NM_BLACKLISTED, NM_RESET_WORKAROUND };
++enum { NM_BLACKLISTED, NM_RESET_WORKAROUND, NM_RESET_WORKAROUND_2 };
+
+ static struct nm256_quirk nm256_quirks[] __devinitdata = {
+ /* HP omnibook 4150 has cs4232 codec internally */
+@@ -1551,6 +1558,8 @@ static struct nm256_quirk nm256_quirks[]
+ { .vendor = 0x104d, .device = 0x8041, .type = NM_RESET_WORKAROUND },
+ /* Dell Latitude LS */
+ { .vendor = 0x1028, .device = 0x0080, .type = NM_RESET_WORKAROUND },
++ /* Dell Latitude CSx */
++ { .vendor = 0x1028, .device = 0x0091, .type = NM_RESET_WORKAROUND_2 },
+ { } /* terminator */
+ };
+
+@@ -1582,6 +1591,9 @@ static int __devinit snd_nm256_probe(str
+ case NM_BLACKLISTED:
+ printk(KERN_INFO "nm256: The device is blacklisted. Loading stopped\n");
+ return -ENODEV;
++ case NM_RESET_WORKAROUND_2:
++ reset_workaround_2[dev] = 1;
++ /* Fall-through */
+ case NM_RESET_WORKAROUND:
+ reset_workaround[dev] = 1;
+ break;
+@@ -1638,6 +1650,11 @@ static int __devinit snd_nm256_probe(str
+ chip->reset_workaround = 1;
+ }
+
++ if (reset_workaround_2[dev]) {
++ snd_printdd(KERN_INFO "nm256: reset_workaround_2 activated\n");
++ chip->reset_workaround_2 = 1;
++ }
++
+ if ((err = snd_nm256_pcm(chip, 0)) < 0 ||
+ (err = snd_nm256_mixer(chip)) < 0) {
+ snd_card_free(card);
Added: dists/sid/linux-2.6/debian/patches-debian/series/2.6.14-6
==============================================================================
--- (empty file)
+++ dists/sid/linux-2.6/debian/patches-debian/series/2.6.14-6 Thu Dec 15 18:41:47 2005
@@ -0,0 +1 @@
++ 2.6.14.4.patch
More information about the Kernel-svn-changes
mailing list