[kernel] r9310 - in dists/sid/linux-2.6/debian: . patches/bugfix patches/series
Maximilian Attems
maks at alioth.debian.org
Fri Aug 17 13:10:14 UTC 2007
Author: maks
Date: Fri Aug 17 13:10:14 2007
New Revision: 9310
Log:
add stable 2.6.22.3
Added:
dists/sid/linux-2.6/debian/patches/bugfix/2.6.22.3
Modified:
dists/sid/linux-2.6/debian/changelog
dists/sid/linux-2.6/debian/patches/series/4
Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog (original)
+++ dists/sid/linux-2.6/debian/changelog Fri Aug 17 13:10:14 2007
@@ -99,8 +99,22 @@
- sysfs: release mutex when kmalloc() failed in sysfs_open_file().
- nf_conntrack: don't track locally generated special ICMP error
* Bump abi due to firewire, ivtv and xrfm changes.
+ * Add stable release 2.6.22.3:
+ - fix oops in __audit_signal_info()
+ - direct-io: fix error-path crashes
+ - powerpc: Fix size check for hugetlbfs
+ - stifb: detect cards in double buffer mode more reliably
+ - pata_atiixp: add SB700 PCI ID
+ - PPC: Revert "[POWERPC] Add 'mdio' to bus scan id list for platforms
+ with QE UEC"
+ - random: fix bound check ordering (CVE-2007-3105)
+ - softmac: Fix deadlock of wx_set_essid with assoc work
+ - PPC: Revert "[POWERPC] Don't complain if size-cells == 0 in prom_parse()"
+ - ata_piix: update map 10b for ich8m
+ - CPUFREQ: ondemand: fix tickless accounting and software coordination bug
+ - CPUFREQ: ondemand: add a check to avoid negative load calculation
- -- maximilian attems <maks at debian.org> Sun, 12 Aug 2007 12:05:24 +0200
+ -- maximilian attems <maks at debian.org> Fri, 17 Aug 2007 15:02:13 +0200
linux-2.6 (2.6.22-3) unstable; urgency=low
Added: dists/sid/linux-2.6/debian/patches/bugfix/2.6.22.3
==============================================================================
--- (empty file)
+++ dists/sid/linux-2.6/debian/patches/bugfix/2.6.22.3 Fri Aug 17 13:10:14 2007
@@ -0,0 +1,297 @@
+diff --git a/arch/powerpc/kernel/prom_parse.c b/arch/powerpc/kernel/prom_parse.c
+index 3786dcc..b5c96af 100644
+--- a/arch/powerpc/kernel/prom_parse.c
++++ b/arch/powerpc/kernel/prom_parse.c
+@@ -24,7 +24,7 @@
+ /* Max address size we deal with */
+ #define OF_MAX_ADDR_CELLS 4
+ #define OF_CHECK_COUNTS(na, ns) ((na) > 0 && (na) <= OF_MAX_ADDR_CELLS && \
+- (ns) >= 0)
++ (ns) > 0)
+
+ static struct of_bus *of_match_bus(struct device_node *np);
+ static int __of_address_to_resource(struct device_node *dev,
+diff --git a/arch/powerpc/mm/slice.c b/arch/powerpc/mm/slice.c
+index f833dba..d5fd390 100644
+--- a/arch/powerpc/mm/slice.c
++++ b/arch/powerpc/mm/slice.c
+@@ -405,6 +405,8 @@ unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
+
+ if (len > mm->task_size)
+ return -ENOMEM;
++ if (len & ((1ul << pshift) - 1))
++ return -EINVAL;
+ if (fixed && (addr & ((1ul << pshift) - 1)))
+ return -EINVAL;
+ if (fixed && addr > (mm->task_size - len))
+diff --git a/arch/powerpc/platforms/83xx/mpc832x_mds.c b/arch/powerpc/platforms/83xx/mpc832x_mds.c
+index 94843ed..fff09f5 100644
+--- a/arch/powerpc/platforms/83xx/mpc832x_mds.c
++++ b/arch/powerpc/platforms/83xx/mpc832x_mds.c
+@@ -111,7 +111,6 @@ static struct of_device_id mpc832x_ids[] = {
+ { .type = "soc", },
+ { .compatible = "soc", },
+ { .type = "qe", },
+- { .type = "mdio", },
+ {},
+ };
+
+diff --git a/arch/powerpc/platforms/83xx/mpc832x_rdb.c b/arch/powerpc/platforms/83xx/mpc832x_rdb.c
+index 3db68b7..44a7661 100644
+--- a/arch/powerpc/platforms/83xx/mpc832x_rdb.c
++++ b/arch/powerpc/platforms/83xx/mpc832x_rdb.c
+@@ -75,7 +75,6 @@ static struct of_device_id mpc832x_ids[] = {
+ { .type = "soc", },
+ { .compatible = "soc", },
+ { .type = "qe", },
+- { .type = "mdio", },
+ {},
+ };
+
+diff --git a/arch/powerpc/platforms/83xx/mpc836x_mds.c b/arch/powerpc/platforms/83xx/mpc836x_mds.c
+index bceeff8..526ed09 100644
+--- a/arch/powerpc/platforms/83xx/mpc836x_mds.c
++++ b/arch/powerpc/platforms/83xx/mpc836x_mds.c
+@@ -118,7 +118,6 @@ static struct of_device_id mpc836x_ids[] = {
+ { .type = "soc", },
+ { .compatible = "soc", },
+ { .type = "qe", },
+- { .type = "mdio", },
+ {},
+ };
+
+diff --git a/arch/powerpc/platforms/85xx/mpc85xx_mds.c b/arch/powerpc/platforms/85xx/mpc85xx_mds.c
+index e3dddbf..54db416 100644
+--- a/arch/powerpc/platforms/85xx/mpc85xx_mds.c
++++ b/arch/powerpc/platforms/85xx/mpc85xx_mds.c
+@@ -147,7 +147,6 @@ static struct of_device_id mpc85xx_ids[] = {
+ { .type = "soc", },
+ { .compatible = "soc", },
+ { .type = "qe", },
+- { .type = "mdio", },
+ {},
+ };
+
+diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
+index 4847755..5a148bd 100644
+--- a/drivers/ata/ata_piix.c
++++ b/drivers/ata/ata_piix.c
+@@ -428,7 +428,7 @@ static const struct piix_map_db ich8_map_db = {
+ /* PM PS SM SS MAP */
+ { P0, P2, P1, P3 }, /* 00b (hardwired when in AHCI) */
+ { RV, RV, RV, RV },
+- { IDE, IDE, NA, NA }, /* 10b (IDE mode) */
++ { P0, P2, IDE, IDE }, /* 10b (IDE mode) */
+ { RV, RV, RV, RV },
+ },
+ };
+diff --git a/drivers/ata/pata_atiixp.c b/drivers/ata/pata_atiixp.c
+index 8449146..eceea6c 100644
+--- a/drivers/ata/pata_atiixp.c
++++ b/drivers/ata/pata_atiixp.c
+@@ -285,6 +285,7 @@ static const struct pci_device_id atiixp[] = {
+ { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP300_IDE), },
+ { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP400_IDE), },
+ { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP600_IDE), },
++ { PCI_VDEVICE(ATI, PCI_DEVICE_ID_ATI_IXP700_IDE), },
+
+ { },
+ };
+diff --git a/drivers/char/random.c b/drivers/char/random.c
+index 7f52712..397c714 100644
+--- a/drivers/char/random.c
++++ b/drivers/char/random.c
+@@ -693,9 +693,14 @@ static void xfer_secondary_pool(struct entropy_store *r, size_t nbytes)
+
+ if (r->pull && r->entropy_count < nbytes * 8 &&
+ r->entropy_count < r->poolinfo->POOLBITS) {
+- int bytes = max_t(int, random_read_wakeup_thresh / 8,
+- min_t(int, nbytes, sizeof(tmp)));
++ /* If we're limited, always leave two wakeup worth's BITS */
+ int rsvd = r->limit ? 0 : random_read_wakeup_thresh/4;
++ int bytes = nbytes;
++
++ /* pull at least as many as BYTES as wakeup BITS */
++ bytes = max_t(int, bytes, random_read_wakeup_thresh / 8);
++ /* but never more than the buffer size */
++ bytes = min_t(int, bytes, sizeof(tmp));
+
+ DEBUG_ENT("going to reseed %s with %d bits "
+ "(%d of %d requested)\n",
+diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
+index 8532bb7..e794527 100644
+--- a/drivers/cpufreq/cpufreq_ondemand.c
++++ b/drivers/cpufreq/cpufreq_ondemand.c
+@@ -96,15 +96,25 @@ static struct dbs_tuners {
+
+ static inline cputime64_t get_cpu_idle_time(unsigned int cpu)
+ {
+- cputime64_t retval;
++ cputime64_t idle_time;
++ cputime64_t cur_jiffies;
++ cputime64_t busy_time;
+
+- retval = cputime64_add(kstat_cpu(cpu).cpustat.idle,
+- kstat_cpu(cpu).cpustat.iowait);
++ cur_jiffies = jiffies64_to_cputime64(get_jiffies_64());
++ busy_time = cputime64_add(kstat_cpu(cpu).cpustat.user,
++ kstat_cpu(cpu).cpustat.system);
+
+- if (dbs_tuners_ins.ignore_nice)
+- retval = cputime64_add(retval, kstat_cpu(cpu).cpustat.nice);
++ busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.irq);
++ busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.softirq);
++ busy_time = cputime64_add(busy_time, kstat_cpu(cpu).cpustat.steal);
+
+- return retval;
++ if (!dbs_tuners_ins.ignore_nice) {
++ busy_time = cputime64_add(busy_time,
++ kstat_cpu(cpu).cpustat.nice);
++ }
++
++ idle_time = cputime64_sub(cur_jiffies, busy_time);
++ return idle_time;
+ }
+
+ /*
+@@ -325,7 +335,7 @@ static struct attribute_group dbs_attr_group = {
+ static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info)
+ {
+ unsigned int idle_ticks, total_ticks;
+- unsigned int load;
++ unsigned int load = 0;
+ cputime64_t cur_jiffies;
+
+ struct cpufreq_policy *policy;
+@@ -339,7 +349,8 @@ static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info)
+ cur_jiffies = jiffies64_to_cputime64(get_jiffies_64());
+ total_ticks = (unsigned int) cputime64_sub(cur_jiffies,
+ this_dbs_info->prev_cpu_wall);
+- this_dbs_info->prev_cpu_wall = cur_jiffies;
++ this_dbs_info->prev_cpu_wall = get_jiffies_64();
++
+ if (!total_ticks)
+ return;
+ /*
+@@ -370,7 +381,8 @@ static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info)
+ if (tmp_idle_ticks < idle_ticks)
+ idle_ticks = tmp_idle_ticks;
+ }
+- load = (100 * (total_ticks - idle_ticks)) / total_ticks;
++ if (likely(total_ticks > idle_ticks))
++ load = (100 * (total_ticks - idle_ticks)) / total_ticks;
+
+ /* Check for frequency increase */
+ if (load > dbs_tuners_ins.up_threshold) {
+diff --git a/drivers/video/stifb.c b/drivers/video/stifb.c
+index c97709e..e7c8db2 100644
+--- a/drivers/video/stifb.c
++++ b/drivers/video/stifb.c
+@@ -1100,13 +1100,18 @@ stifb_init_fb(struct sti_struct *sti, int bpp_pref)
+ /* only supported cards are allowed */
+ switch (fb->id) {
+ case CRT_ID_VISUALIZE_EG:
+- /* look for a double buffering device like e.g. the
+- "INTERNAL_EG_DX1024" in the RDI precisionbook laptop
+- which won't work. The same device in non-double
+- buffering mode returns "INTERNAL_EG_X1024". */
+- if (strstr(sti->outptr.dev_name, "EG_DX")) {
+- printk(KERN_WARNING
+- "stifb: ignoring '%s'. Disable double buffering in IPL menu.\n",
++ /* Visualize cards can run either in "double buffer" or
++ "standard" mode. Depending on the mode, the card reports
++ a different device name, e.g. "INTERNAL_EG_DX1024" in double
++ buffer mode and "INTERNAL_EG_X1024" in standard mode.
++ Since this driver only supports standard mode, we check
++ if the device name contains the string "DX" and tell the
++ user how to reconfigure the card. */
++ if (strstr(sti->outptr.dev_name, "DX")) {
++ printk(KERN_WARNING "WARNING: stifb framebuffer driver does not "
++ "support '%s' in double-buffer mode.\n"
++ KERN_WARNING "WARNING: Please disable the double-buffer mode "
++ "in IPL menu (the PARISC-BIOS).\n",
+ sti->outptr.dev_name);
+ goto out_err0;
+ }
+diff --git a/fs/direct-io.c b/fs/direct-io.c
+index 52bb263..6874785 100644
+--- a/fs/direct-io.c
++++ b/fs/direct-io.c
+@@ -974,6 +974,7 @@ direct_io_worker(int rw, struct kiocb *iocb, struct inode *inode,
+ dio->get_block = get_block;
+ dio->end_io = end_io;
+ dio->map_bh.b_private = NULL;
++ dio->map_bh.b_state = 0;
+ dio->final_block_in_bio = -1;
+ dio->next_block_for_io = -1;
+
+diff --git a/kernel/auditsc.c b/kernel/auditsc.c
+index e36481e..ea37edd 100644
+--- a/kernel/auditsc.c
++++ b/kernel/auditsc.c
+@@ -1998,19 +1998,19 @@ int __audit_signal_info(int sig, struct task_struct *t)
+ extern uid_t audit_sig_uid;
+ extern u32 audit_sig_sid;
+
+- if (audit_pid && t->tgid == audit_pid &&
+- (sig == SIGTERM || sig == SIGHUP || sig == SIGUSR1)) {
+- audit_sig_pid = tsk->pid;
+- if (ctx)
+- audit_sig_uid = ctx->loginuid;
+- else
+- audit_sig_uid = tsk->uid;
+- selinux_get_task_sid(tsk, &audit_sig_sid);
++ if (audit_pid && t->tgid == audit_pid) {
++ if (sig == SIGTERM || sig == SIGHUP || sig == SIGUSR1) {
++ audit_sig_pid = tsk->pid;
++ if (ctx)
++ audit_sig_uid = ctx->loginuid;
++ else
++ audit_sig_uid = tsk->uid;
++ selinux_get_task_sid(tsk, &audit_sig_sid);
++ }
++ if (!audit_signals || audit_dummy_context())
++ return 0;
+ }
+
+- if (!audit_signals) /* audit_context checked in wrapper */
+- return 0;
+-
+ /* optimize the common case by putting first signal recipient directly
+ * in audit_context */
+ if (!ctx->target_pid) {
+diff --git a/net/ieee80211/softmac/ieee80211softmac_wx.c b/net/ieee80211/softmac/ieee80211softmac_wx.c
+index f13937b..d054e92 100644
+--- a/net/ieee80211/softmac/ieee80211softmac_wx.c
++++ b/net/ieee80211/softmac/ieee80211softmac_wx.c
+@@ -74,8 +74,8 @@ ieee80211softmac_wx_set_essid(struct net_device *net_dev,
+ struct ieee80211softmac_auth_queue_item *authptr;
+ int length = 0;
+
++check_assoc_again:
+ mutex_lock(&sm->associnfo.mutex);
+-
+ /* Check if we're already associating to this or another network
+ * If it's another network, cancel and start over with our new network
+ * If it's our network, ignore the change, we're already doing it!
+@@ -98,13 +98,18 @@ ieee80211softmac_wx_set_essid(struct net_device *net_dev,
+ cancel_delayed_work(&authptr->work);
+ sm->associnfo.bssvalid = 0;
+ sm->associnfo.bssfixed = 0;
+- flush_scheduled_work();
+ sm->associnfo.associating = 0;
+ sm->associnfo.associated = 0;
++ /* We must unlock to avoid deadlocks with the assoc workqueue
++ * on the associnfo.mutex */
++ mutex_unlock(&sm->associnfo.mutex);
++ flush_scheduled_work();
++ /* Avoid race! Check assoc status again. Maybe someone started an
++ * association while we flushed. */
++ goto check_assoc_again;
+ }
+ }
+
+-
+ sm->associnfo.static_essid = 0;
+ sm->associnfo.assoc_wait = 0;
+
Modified: dists/sid/linux-2.6/debian/patches/series/4
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/4 (original)
+++ dists/sid/linux-2.6/debian/patches/series/4 Fri Aug 17 13:10:14 2007
@@ -29,3 +29,4 @@
+ bugfix/powerpc/i8042-pegasos.patch
+ bugfix/sparc/sun4u-pci-config-space.patch
+ bugfix/2.6.22.2
++ bugfix/2.6.22.3
More information about the Kernel-svn-changes
mailing list