Page 1 of 1

[PATCH] test-squeue: trigger y2038 bug

Posted: Fri Apr 05, 2013 6:42 am
by Guest
--001a11c1f442b4bfa504d998381d
Content-Type: text/plain; charset=ISO-8859-1

For the record, the following patch identically triggers the faults on my
x86_64 Arch installation (where time_t normally is a quad word).

Subject: [PATCH] test-squeue: trigger y2038 bug

Signed-off-by: Anton Lofgren
---
lib/test-squeue.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/test-squeue.c b/lib/test-squeue.c
index 556952d..faf0b5d 100644
--- a/lib/test-squeue.c
+++ b/lib/test-squeue.c
@@ -11,6 +11,7 @@
#include
#include "squeue.c"
#include "t-utils.h"
+#include

static void squeue_foreach(squeue_t *q, int (*walker)(squeue_event *, void
*), void *arg)
{
@@ -116,7 +117,7 @@ int main(int argc, char **argv)
sq_test_random(sq);
t(squeue_size(sq) == 0, "Size should be 0 after first
sq_test_random");

- t((a.evt = squeue_add(sq, time(NULL) + 9, &a)) != NULL);
+ t((a.evt = squeue_add(sq, (int32_t)(time(NULL) * 2), &a)) != NULL);
t(squeue_size(sq) == 1);
t((b.evt = squeue_add(sq, time(NULL) + 3, &b)) != NULL);
t(squeue_size(sq) == 2);
--
1.8.2




test-squeue:
### squeue tests
FAIL max id == b.id @test-squeue.c:135
FAIL x == &c @test-squeue.c:142
about to fail pretty fucking hard...
ea: 0x7fffe6dd1e50; &b: 0x7fffe6dd1e60; &c: 0x7fffe6dd1e70; ed:
0x7fffe6dd1e80; x: 0x7fffe6d83de0
FAIL x == &b @test-squeue.c:153
FAIL x->id == b.id @test-squeue.c:154
FAIL x == &b @test-squeue.c:161
FAIL x->id == b.id @test-squeue.c:162
FAIL x == &c @test-squeue.c:167
FAIL x->id == c.id @test-squeue.c:168
Test results: 390637 passed, 10 failed
make[1]: *** [test] Error 1


/Anton

On Thu, Apr 4, 2013 at 11:55 PM, Andreas Ericsson wrote:

> On 04/04/2013 06:32 PM, Ton Voon wrote:
> > Hi!
> >
> > We've come across a problem in an upgrade of Nagios 3 to Nagios 4 which
> we can't work out where the fix is. It occurs when an event is scheduled in
> the future beyond 2038.
> >
>
> Why on earth would you want to schedule something to end beyond 2038?
> It sounds like you're using a patch on a workaround for something that
> was the wrong solution in the first place.
>
> > Recreation steps:
> > * Set a downtime on a service to end next day
> > * Stop Nagios
> > * Edit the retention.dat so that the end_date=4514791088 (some other
> values seem to work)
> > * Start Nagios
> >
> > When Nagios starts, it will not run any scheduled events in the events
> queue.
> >
>
> Ouch. That's pretty bad.
>
> > This fails on CentOS 5 64bit, though appears to work on Debian Squeeze
> 32bit, so it maybe a 64 bit only issue.
> >
> > We think this is an issue when the event is scheduled via squeue_add().
> We've managed to get the test-squeue to fail by changing the time value to
> be greater than 2038 with the following:
> >
> > Index: test-squeue.c
> > ===================================================================
> > --- test-squeue.c (revision 2716)
> > +++ test-squeue.c (working copy)
> > @@ -116,7 +116,7 @@
> > sq_test_random(sq);
> > t(squeue_size(sq) == 0, "Size should be 0 after first
> sq_test_random");
> >
> > - t((a.evt = squeue_add(sq, time(NULL) + 9, &a)) != NULL);
> > + t((a.evt = squeue_add(sq, time(NULL)*2, &a)) != NULL);
> > t(squeue_size(sq) == 1);
> > t((b.evt = squeue_add(sq, time(NULL) + 3, &b)) != NULL);
> > t(squeue_size(sq) == 2);
> >
> > This gives the test result of:
> >
> > ### squeue tests
> > FAIL max > FAIL x == &b @test-squeue.c:133
> > FAIL x->id == b.id @test-squeue.c:134
> > FAIL x == &c @test-squeue.c:141
> > about to fail pretty fucking hard...
> > ea: 0xbfe065e0; &b: 0xbfe065d8; &c: 0xbfe065d0; ed: 0xbfe065c8; x:
> 0xbfde9b80
> > FAIL x == &b @test-squeue.c:152
> > FAIL x->id == b.id @test-squeue.c:153
> > FAIL x == &b @test-squeue.c:160
> > FAIL x->id == b.id @test-squeue.c:161
> > FAIL x == &c @test-squeue.c:166
> > FAIL x->id == c.id @test-squeue.c:167
> > Test results: 390637 pass

...[email truncated]...


This post was automatically imported from historical nagios-devel mailing list archives
Original poster: alofgren@op5.com