[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