Skip to contentSkip to conversation

sched: Fix sched_getaffinity

PATCH In review Anton Blanchard 2 participants 3 messages Apr 6, 2010

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 sched: Fix sched_getaffinity

taskset on 2.6.34-rc3 fails on one of my ppc64 test boxes with the following error:

sched_getaffinity(0, 16, 0x10029650030) = -1 EINVAL (Invalid argument)

This box has 128 threads and 16 bytes is enough to cover it. Commit cd3d8031eb4311e516329aee03c79a08333141f1 (sched: sched_getaffinity(): Allow less than NR_CPUS length) is comparing this 16 bytes agains nr_cpu_ids.

Fix it by comparing nr_cpu_ids to the number of bits in the cpumask we pass in.

---

kernel/sched.c +1 -1
index 49d2fa7..0c1ec87 100644
@@ -4902,7 +4902,7 @@ SYSCALL_DEFINE3(sched_getaffinity, pid_t, pid, unsigned int, len,
 	int ret;
 	cpumask_var_t mask;
 
-	if (len < nr_cpu_ids)
+	if ((len * BITS_PER_BYTE) < nr_cpu_ids)
 		return -EINVAL;
 	if (len & (sizeof(unsigned long)-1))
 		return -EINVAL;
Reviewed-by on v1 1/1
#1 lore raw
Quoted 6 lines

taskset on 2.6.34-rc3 fails on one of my ppc64 test boxes with the following error:

sched_getaffinity(0, 16, 0x10029650030) = -1 EINVAL (Invalid argument)

Quoted 7 lines

This box has 128 threads and 16 bytes is enough to cover it. Commit cd3d8031eb4311e516329aee03c79a08333141f1 (sched: sched_getaffinity(): Allow less than NR_CPUS length) is comparing this 16 bytes agains nr_cpu_ids.

Fix it by comparing nr_cpu_ids to the number of bits in the cpumask we pass in.

Oops, yes yes, thanks to correct my moron ;-) I'll stop all todays job and will get sleeping soon.

Quoted 20 lines

---

kernel/sched.c +1 -2
index 49d2fa7..0c1ec87 100644
@@ -4902,7 +4902,7 @@ SYSCALL_DEFINE3(sched_getaffinity, pid_t, pid, unsigned int, len,
 	int ret;
 	cpumask_var_t mask;
 
-	if (len < nr_cpu_ids)
+	if ((len * BITS_PER_BYTE) < nr_cpu_ids)
 		return -EINVAL;
 	if (len & (sizeof(unsigned long)-1))
 		return -EINVAL;
--

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

#2 lore raw

[tip:sched/urgent] sched: Fix sched_getaffinity()

In reply to Anton Blanchard
Commit-ID:  84fba5ec91f11c0efb27d0ed6098f7447491f0df
Gitweb:     http://git.kernel.org/tip/84fba5ec91f11c0efb27d0ed6098f7447491f0df
Author:     Anton Blanchard <[email protected]>
AuthorDate: Tue, 6 Apr 2010 17:02:19 +1000
Committer:  Ingo Molnar <[email protected]>
CommitDate: Tue, 6 Apr 2010 10:01:35 +0200

sched: Fix sched_getaffinity()

taskset on 2.6.34-rc3 fails on one of my ppc64 test boxes with the following error:

sched_getaffinity(0, 16, 0x10029650030) = -1 EINVAL (Invalid argument)

This box has 128 threads and 16 bytes is enough to cover it.

Commit cd3d8031eb4311e516329aee03c79a08333141f1 (sched:
sched_getaffinity(): Allow less than NR_CPUS length) is comparing this 16 bytes agains nr_cpu_ids.

Fix it by comparing nr_cpu_ids to the number of bits in the cpumask we pass in.

Cc Sharyathi Nagesh <[email protected]>
Cc Ulrich Drepper <[email protected]>
Cc Peter Zijlstra <[email protected]>
Cc Linus Torvalds <[email protected]>
Cc Jack Steiner <[email protected]>
Cc Russ Anderson <[email protected]>
Cc Mike Travis <[email protected]>

LKML-Reference: <20100406070218.GM5594@kryten>

---
 kernel/sched.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
kernel/sched.c +1 -1
index 528a105..eaf5c73 100644
@@ -4902,7 +4902,7 @@ SYSCALL_DEFINE3(sched_getaffinity, pid_t, pid, unsigned int, len,
 	int ret;
 	cpumask_var_t mask;
 
-	if (len < nr_cpu_ids)
+	if ((len * BITS_PER_BYTE) < nr_cpu_ids)
 		return -EINVAL;
 	if (len & (sizeof(unsigned long)-1))
 		return -EINVAL;