Public bug reported:
I've been noticing that doubles get clobbered in stress-ng. I managed to
whittle it down to the following reproducer that can trip the issue on a
risc-v system running the Linux risc-v-qemu 5.4.0-24-generic kernel.
This also occurs on other older kernels too. I've tested this with
gcc-9, gcc-10 and clang-9 too.
#include <sys/time.h>
#include <stdio.h>
#include <stdbool.h>
#include <unistd.h>
#include <errno.h>
double timeval_to_double(const struct timeval *tv)
{
return (double)tv->tv_sec + ((double)tv->tv_usec / 1000000.0);
}
int main(void)
{
struct timeval tv2, tv1;
double t1;
bool fail = false;
gettimeofday(&tv1, NULL);
t1 = timeval_to_double(&tv1);
for (;;) {
double t2;
int tmp;
gettimeofday(&tv2, NULL);
t2 = timeval_to_double(&tv2);
tmp = errno;
if (t2 - t1 < 0.0) {
printf("%f %f %f\n", t1, t2, t2 - t1);
printf("START : %f %ld %ld (%lx %lx) errno=%d\n",
t1,
tv1.tv_sec, tv1.tv_usec,
tv1.tv_sec, tv1.tv_usec,
tmp);
printf("NOW BAD: %f %ld %ld (%lx %lx) errno=%d\n",
t2,
tv2.tv_sec, tv2.tv_usec,
tv2.tv_sec, tv2.tv_usec,
tmp);
fail = true;
} else {
if (fail) {
printf("NOW OK: %f %ld %ld (%lx %lx)
errno=%d\n",
t2,
tv2.tv_sec, tv2.tv_usec,
tv2.tv_sec, tv2.tv_usec,
tmp);
}
fail = false;
}
}
}
Run the code (compiled with -O0, -O1 or even O2) and after some (long)
random-ish time I see:
./a.out
1575050049.059796 0.000000 -1575050049.059796
START : 1575050049.059796 1575050049 59796 (5de15b41 e994) errno=0
NOW BAD: 0.000000 1575050053 437619 (5de15b45 6ad73) errno=0
NOW OK: 1575050053.460829 1575050053 460829 (5de15b45 7081d) errno=0
So the t2 value is zero which is a bit weird. The integer values for the
tv struct are sane though, so it appears not to be a bad struct value
returned from the kernel.
** Affects: linux (Ubuntu)
Importance: High
Status: New
** Affects: qemu (Ubuntu)
Importance: High
Status: New
** Also affects: qemu (Ubuntu)
Importance: Undecided
Status: New
** Changed in: linux (Ubuntu)
Importance: Undecided => High
** Changed in: qemu (Ubuntu)
Importance: Undecided => High
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1872945
Title:
risc-v doubles getting clobbered somehow
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1872945/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs