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 <[EMAIL PROTECTED]>  Sun, 12 Aug 2007 12:05:24 +0200
+ -- maximilian attems <[EMAIL PROTECTED]>  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

_______________________________________________
Kernel-svn-changes mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/kernel-svn-changes

Reply via email to