Re: [PATCH] Fix CPU bitmask truncation

William Lee Irwin III (wli@holomorphy.com)
Fri, 20 Dec 2002 02:30:28 -0800


On Mon, Dec 16, 2002 at 12:13:29PM -0700, Bjorn Helgaas wrote:
> This patch fixes some obviously incorrect bitmask truncations in 2.4.20.

Linus, this is the 2.5.x version of the same patch originally by Bjorn
for 2.4.x. This fixes an entire class of critical 64-bit bugs.

Against 2.5.52-bk as of 2:25AM 20 Dec 2002. Please apply.

Thanks,
Bill

Fix task->cpus_allowed bitmask truncations. Originally due to
Bjorn Helgaas for 2.4.x.

include/linux/init_task.h | 2 +-
kernel/module.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)

===== include/linux/init_task.h 1.19 vs edited =====
--- 1.19/include/linux/init_task.h Sun Sep 29 07:02:55 2002
+++ edited/include/linux/init_task.h Fri Dec 20 02:22:04 2002
@@ -63,7 +63,7 @@
.prio = MAX_PRIO-20, \
.static_prio = MAX_PRIO-20, \
.policy = SCHED_NORMAL, \
- .cpus_allowed = -1, \
+ .cpus_allowed = ~0UL, \
.mm = NULL, \
.active_mm = &init_mm, \
.run_list = LIST_HEAD_INIT(tsk.run_list), \
===== kernel/module.c 1.31 vs edited =====
--- 1.31/kernel/module.c Sun Dec 1 22:44:11 2002
+++ edited/kernel/module.c Fri Dec 20 02:19:53 2002
@@ -210,7 +210,7 @@
struct sched_param param = { .sched_priority = MAX_RT_PRIO-1 };
setscheduler(current->pid, SCHED_FIFO, &param);
#endif
- set_cpus_allowed(current, 1 << (unsigned long)cpu);
+ set_cpus_allowed(current, 1UL << (unsigned long)cpu);

/* Ack: we are alive */
atomic_inc(&stopref_thread_ack);
@@ -271,7 +271,7 @@

/* FIXME: racy with set_cpus_allowed. */
old_allowed = current->cpus_allowed;
- set_cpus_allowed(current, 1 << (unsigned long)cpu);
+ set_cpus_allowed(current, 1UL << (unsigned long)cpu);

atomic_set(&stopref_thread_ack, 0);
stopref_num_threads = 0;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/