diff options
| author | Patrick Mooney <pmooney@pfmooney.com> | 2017-04-20 19:43:29 +0000 |
|---|---|---|
| committer | Patrick Mooney <pmooney@pfmooney.com> | 2017-04-24 23:10:10 +0000 |
| commit | fbc5848b477b441a7e8f5e25096c81994887cd09 (patch) | |
| tree | a0fb6d1d5ae1dbcb9835c0a1c0bb2dc36c66d5f5 | |
| parent | 9bca11289f890427fa4f77af8704560636e4c246 (diff) | |
| download | illumos-joyent-fbc5848b477b441a7e8f5e25096c81994887cd09.tar.gz | |
OS-6068 cpuset functions should be more strict about input
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Approved by: Jerry Jelinek <jerry.jelinek@joyent.com>
| -rw-r--r-- | usr/src/uts/common/os/cpu.c | 25 | ||||
| -rw-r--r-- | usr/src/uts/common/sys/cpuvar.h | 18 |
2 files changed, 25 insertions, 18 deletions
diff --git a/usr/src/uts/common/os/cpu.c b/usr/src/uts/common/os/cpu.c index bcf050a6d6..9c7600ea24 100644 --- a/usr/src/uts/common/os/cpu.c +++ b/usr/src/uts/common/os/cpu.c @@ -2732,34 +2732,37 @@ cpuset_all(cpuset_t *s) } void -cpuset_all_but(cpuset_t *s, uint_t cpu) +cpuset_all_but(cpuset_t *s, const uint_t cpu) { cpuset_all(s); CPUSET_DEL(*s, cpu); } void -cpuset_only(cpuset_t *s, uint_t cpu) +cpuset_only(cpuset_t *s, const uint_t cpu) { CPUSET_ZERO(*s); CPUSET_ADD(*s, cpu); } long -cpu_in_set(cpuset_t *s, uint_t cpu) +cpu_in_set(cpuset_t *s, const uint_t cpu) { + VERIFY(cpu < NCPU); return (BT_TEST(s->cpub, cpu)); } void -cpuset_add(cpuset_t *s, uint_t cpu) +cpuset_add(cpuset_t *s, const uint_t cpu) { + VERIFY(cpu < NCPU); BT_SET(s->cpub, cpu); } void -cpuset_del(cpuset_t *s, uint_t cpu) +cpuset_del(cpuset_t *s, const uint_t cpu) { + VERIFY(cpu < NCPU); BT_CLEAR(s->cpub, cpu); } @@ -2853,31 +2856,35 @@ cpuset_bounds(cpuset_t *s, uint_t *smallestid, uint_t *largestid) } void -cpuset_atomic_del(cpuset_t *s, uint_t cpu) +cpuset_atomic_del(cpuset_t *s, const uint_t cpu) { + VERIFY(cpu < NCPU); BT_ATOMIC_CLEAR(s->cpub, (cpu)) } void -cpuset_atomic_add(cpuset_t *s, uint_t cpu) +cpuset_atomic_add(cpuset_t *s, const uint_t cpu) { + VERIFY(cpu < NCPU); BT_ATOMIC_SET(s->cpub, (cpu)) } long -cpuset_atomic_xadd(cpuset_t *s, uint_t cpu) +cpuset_atomic_xadd(cpuset_t *s, const uint_t cpu) { long res; + VERIFY(cpu < NCPU); BT_ATOMIC_SET_EXCL(s->cpub, cpu, res); return (res); } long -cpuset_atomic_xdel(cpuset_t *s, uint_t cpu) +cpuset_atomic_xdel(cpuset_t *s, const uint_t cpu) { long res; + VERIFY(cpu < NCPU); BT_ATOMIC_CLEAR_EXCL(s->cpub, cpu, res); return (res); } diff --git a/usr/src/uts/common/sys/cpuvar.h b/usr/src/uts/common/sys/cpuvar.h index bab0793c2f..eccb12f05f 100644 --- a/usr/src/uts/common/sys/cpuvar.h +++ b/usr/src/uts/common/sys/cpuvar.h @@ -424,19 +424,19 @@ extern void cpuset_free(cpuset_t *); * They are now acceptable to use in non-_MACHDEP code. */ extern void cpuset_all(cpuset_t *); -extern void cpuset_all_but(cpuset_t *, uint_t); +extern void cpuset_all_but(cpuset_t *, const uint_t); extern int cpuset_isnull(cpuset_t *); extern int cpuset_isequal(cpuset_t *, cpuset_t *); -extern void cpuset_only(cpuset_t *, uint_t); -extern long cpu_in_set(cpuset_t *, uint_t); -extern void cpuset_add(cpuset_t *, uint_t); -extern void cpuset_del(cpuset_t *, uint_t); +extern void cpuset_only(cpuset_t *, const uint_t); +extern long cpu_in_set(cpuset_t *, const uint_t); +extern void cpuset_add(cpuset_t *, const uint_t); +extern void cpuset_del(cpuset_t *, const uint_t); extern uint_t cpuset_find(cpuset_t *); extern void cpuset_bounds(cpuset_t *, uint_t *, uint_t *); -extern void cpuset_atomic_del(cpuset_t *, uint_t); -extern void cpuset_atomic_add(cpuset_t *, uint_t); -extern long cpuset_atomic_xadd(cpuset_t *, uint_t); -extern long cpuset_atomic_xdel(cpuset_t *, uint_t); +extern void cpuset_atomic_del(cpuset_t *, const uint_t); +extern void cpuset_atomic_add(cpuset_t *, const uint_t); +extern long cpuset_atomic_xadd(cpuset_t *, const uint_t); +extern long cpuset_atomic_xdel(cpuset_t *, const uint_t); extern void cpuset_or(cpuset_t *, cpuset_t *); extern void cpuset_xor(cpuset_t *, cpuset_t *); extern void cpuset_and(cpuset_t *, cpuset_t *); |
