From ee7d47f4d64cb48dd45ba7e03f5e875fe7f8154d Mon Sep 17 00:00:00 2001 From: Eugene Syromyatnikov Date: Tue, 6 Sep 2016 05:08:10 +0300 Subject: [PATCH] tests: perform more strict structure allocation in sched_xetattr test Use tail_alloc with precise size of the structure. * tests/sched_xetattr.c (main): Eliminate usage of anonymous union type. Rename sched to sched_attr. Change type of sched_attr to struct pointer. Use tail_alloc for sched_attr allocation, update printf statements accrodingly. --- tests/sched_xetattr.c | 58 +++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/tests/sched_xetattr.c b/tests/sched_xetattr.c index 8a1afe96..be3c6324 100644 --- a/tests/sched_xetattr.c +++ b/tests/sched_xetattr.c @@ -37,50 +37,48 @@ int main(void) { - static union { - struct { - uint32_t size; - uint32_t sched_policy; - uint64_t sched_flags; - uint32_t sched_nice; - uint32_t sched_priority; - uint64_t sched_runtime; - uint64_t sched_deadline; - uint64_t sched_period; - } attr; - char buf[256]; - } sched; + struct { + uint32_t size; + uint32_t sched_policy; + uint64_t sched_flags; + uint32_t sched_nice; + uint32_t sched_priority; + uint64_t sched_runtime; + uint64_t sched_deadline; + uint64_t sched_period; + } *sched_attr = tail_alloc(sizeof(*sched_attr)); - if (syscall(__NR_sched_getattr, 0, &sched, sizeof(sched), 0)) + if (syscall(__NR_sched_getattr, 0, sched_attr, sizeof(*sched_attr), 0)) perror_msg_and_skip("sched_getattr"); printf("sched_getattr\\(0, \\{size=%u, sched_policy=SCHED_[A-Z]+" ", sched_flags=%s, sched_nice=%u, sched_priority=%u" ", sched_runtime=%" PRIu64 ", sched_deadline=%" PRIu64 - ", sched_period=%" PRIu64 "\\}, 256, 0\\) += 0\n", - sched.attr.size, - sched.attr.sched_flags ? "SCHED_FLAG_RESET_ON_FORK" : "0", - sched.attr.sched_nice, - sched.attr.sched_priority, - sched.attr.sched_runtime, - sched.attr.sched_deadline, - sched.attr.sched_period); + ", sched_period=%" PRIu64 "\\}, %u, 0\\) += 0\n", + sched_attr->size, + sched_attr->sched_flags ? "SCHED_FLAG_RESET_ON_FORK" : "0", + sched_attr->sched_nice, + sched_attr->sched_priority, + sched_attr->sched_runtime, + sched_attr->sched_deadline, + sched_attr->sched_period, + (unsigned) sizeof(*sched_attr)); - sched.attr.sched_flags |= 1; - if (syscall(__NR_sched_setattr, 0, &sched, 0)) + sched_attr->sched_flags |= 1; + if (syscall(__NR_sched_setattr, 0, sched_attr, 0)) perror_msg_and_skip("sched_setattr"); printf("sched_setattr\\(0, \\{size=%u, sched_policy=SCHED_[A-Z]+" ", sched_flags=%s, sched_nice=%u, sched_priority=%u" ", sched_runtime=%" PRIu64 ", sched_deadline=%" PRIu64 ", sched_period=%" PRIu64 "\\}, 0\\) += 0\n", - sched.attr.size, + sched_attr->size, "SCHED_FLAG_RESET_ON_FORK", - sched.attr.sched_nice, - sched.attr.sched_priority, - sched.attr.sched_runtime, - sched.attr.sched_deadline, - sched.attr.sched_period); + sched_attr->sched_nice, + sched_attr->sched_priority, + sched_attr->sched_runtime, + sched_attr->sched_deadline, + sched_attr->sched_period); return 0; } -- 2.40.0