Olivier Fourdan
363c4443c4
sync: Apply changes last in SyncChangeAlarmAttributes()
...
SyncChangeAlarmAttributes() would apply the various changes while
checking for errors.
If one of the changes triggers an error, the changes for the trigger,
counter or delta value would remain, possibly leading to inconsistent
changes.
Postpone the actual changes until we're sure nothing else can go wrong.
Related to CVE-2025-26601, ZDI-CAN-25870
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com >
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1828 >
(cherry picked from commit c285798984 )
2026-01-25 10:40:01 -08:00
Olivier Fourdan
754d2ad3ea
sync: Do not fail SyncAddTriggerToSyncObject()
...
We do not want to return a failure at the very last step in
SyncInitTrigger() after having all changes applied.
SyncAddTriggerToSyncObject() must not fail on memory allocation, if the
allocation of the SyncTriggerList fails, trigger a FatalError() instead.
Related to CVE-2025-26601, ZDI-CAN-25870
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com >
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1828 >
(cherry picked from commit 8cbc90c881 )
2026-01-25 10:40:01 -08:00
Olivier Fourdan
0930107038
sync: Check values before applying changes
...
In SyncInitTrigger(), we would set the CheckTrigger function before
validating the counter value.
As a result, if the counter value overflowed, we would leave the
function SyncInitTrigger() with the CheckTrigger applied but without
updating the trigger object.
To avoid that issue, move the portion of code checking for the trigger
check value before updating the CheckTrigger function.
Related to CVE-2025-26601, ZDI-CAN-25870
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com >
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1828 >
(cherry picked from commit f52cea2f93 )
2026-01-25 10:40:01 -08:00
Olivier Fourdan
640d98f493
sync: Do not let sync objects uninitialized
...
When changing an alarm, the change mask values are evaluated one after
the other, changing the trigger values as requested and eventually,
SyncInitTrigger() is called.
SyncInitTrigger() will evaluate the XSyncCACounter first and may free
the existing sync object.
Other changes are then evaluated and may trigger an error and an early
return, not adding the new sync object.
This can be used to cause a use after free when the alarm eventually
triggers.
To avoid the issue, delete the existing sync object as late as possible
only once we are sure that no further error will cause an early exit.
CVE-2025-26601, ZDI-CAN-25870
This vulnerability was discovered by:
Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com >
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1828 >
(cherry picked from commit 16a1242d0f )
2026-01-25 10:40:01 -08:00
Enrico Weigelt, metux IT consult
72803d8ad3
Xext: dpms: need to include geext.h
...
It's calling GERegisterExtension(), which is defined in geext.h
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1810 >
(cherry picked from commit a955b83848 )
2026-01-25 10:40:00 -08:00
Enrico Weigelt, metux IT consult
92107b5803
Xext: geext.h: fix missing include of Xfuncproto.h
...
Needed for _X_EXPORT.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1811 >
(cherry picked from commit 658f1b34ee )
2026-01-25 10:40:00 -08:00
Enrico Weigelt, metux IT consult
5c8656e4cb
Xext: geext: move struct _GEExtension into geext.c
...
Not used anywhere outside geext implementation itself,
so shouldn't be public at all.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1811 >
(cherry picked from commit a7600ac884 )
2026-01-25 10:40:00 -08:00
Enrico Weigelt, metux IT consult
c0161d21c2
Xext: geext: unexport GEExtensions[]
...
This field isn't used by anybody outside, nor should it be accessed
directly. So better make it local.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1811 >
(cherry picked from commit 896937298b )
2026-01-25 10:40:00 -08:00
Enrico Weigelt, metux IT consult
88d6286897
Xext: geext: drop unused GEV() macro
...
Not used anywhere, so no need to keep it around any longer.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1811 >
(cherry picked from commit 480a7e4b11 )
2026-01-25 10:40:00 -08:00
Enrico Weigelt, metux IT consult
0c91df7c3f
Xext: geext: drop unused GEEXT() macro
...
Not used by anybody, so no need to keep it around any longer.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1811 >
(cherry picked from commit ae7bbd36df )
2026-01-25 10:40:00 -08:00
Enrico Weigelt, metux IT consult
9a071c97f4
Xext: geext: drop unused GEEXTIDX() macro
...
Not used anywhere, so no need to keep it around any longer.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1811 >
(cherry picked from commit b865f44f5e )
2026-01-25 10:40:00 -08:00
Enrico Weigelt, metux IT consult
98efb4746a
Xext: geext: drop unused GEMaskIsSet() macro
...
Not used anywhere, so no need to keep it around any longer.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1811 >
(cherry picked from commit 1006a37f7d )
2026-01-25 10:40:00 -08:00
Enrico Weigelt, metux IT consult
3d6bfe8b1f
Xext: geext: drop unused GECLIENT() macro
...
Not used anywhere, so no need to keep it around any longer.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1811 >
(cherry picked from commit c1d49e19b9 )
2026-01-25 10:40:00 -08:00
Enrico Weigelt, metux IT consult
8735cbcd9e
Xext: geext: drop unused GEIsType() macro
...
Not used anywhere, so no need to keep it around any longer.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1811 >
(cherry picked from commit 01ad88b8c8 )
2026-01-25 10:40:00 -08:00
Enrico Weigelt, metux IT consult
a3a8e04ab8
Xext: geext: drop unused GEEventFill() macro
...
It's not used anywhere, so no need to keep it around any longer.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1811 >
(cherry picked from commit bdb5d4867a )
2026-01-25 10:40:00 -08:00
Enrico Weigelt, metux IT consult
8db56a12f6
Xext: saver: consolidate (non-)xinerama versions
...
We can make it a bit simpler by doing the request header
checking only once.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1591 >
(cherry picked from commit 37dd2897d4 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
a16d79b399
Xext: saver: fix missing swap in QueryVersion reply
...
The `majorVersion` and `minorVersion` fields are CARD16, thus need to be swapped.
OTOH, the lengths field is zero anyways, so no need to swap it.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1591 >
(cherry picked from commit fdb8c8ea41 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
3735136601
Xext: xv: drop now obsolete swap procs
...
Several SProc's have become no-ops, just calling the actual Proc's,
so we can get rid of them entirely.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit dc9a998b96 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
5a80e4bc3a
Xext: xtest: drop now obsolete swap procs
...
Several SProc's have become no-ops, just calling the actual Proc's,
so we can get rid of them entirely.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 753e6c44ba )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
ff22e7dfa9
Xext: xcmisc: drop now obsolete swap procs
...
Several SProc's have become no-ops, just calling the actual Proc's,
so we can get rid of them entirely.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 0c87f9b1da )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
78a91a837e
Xext: vidmode: drop now obsolete swap procs
...
Several SProc's have become no-ops, just calling the actual Proc's,
so we can get rid of them entirely.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 9a3daf908c )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
617ff59346
Xext: sync: drop now obsolete swap procs
...
Several SProc's have become no-ops, just calling the actual Proc's,
so we can get rid of them entirely.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 3bb15b3e04 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
c5dd2cf48f
Xext: shm: drop now obsolete swap procs
...
Several SProc's have become no-ops, just calling the actual Proc's,
so we can get rid of them entirely.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit c8c42490b7 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
7ed561859e
Xext: shape: drop now obsolete swap procs
...
Several SProc's have become no-ops, just calling the actual Proc's,
so we can get rid of them entirely.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit a7bdfdb3b5 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
15c3b0dfa3
Xext: saver: drop now obsolete swap procs
...
Several SProc's have become no-ops, just calling the actual Proc's,
so we can get rid of them entirely.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 07131dccc5 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
87eaa1020f
Xext: panoramiX: drop now obsolete swap procs
...
Several SProc's have become no-ops, just calling the actual Proc's,
so we can get rid of them entirely.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 515992b046 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
b759344a43
Xext: dpms: drop now obsolete swap procs
...
Several SProc's have become no-ops, just calling the actual Proc's,
so we can get rid of them entirely.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 98dbd817f6 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
ee7147a600
Xext: xv: drop swapping request length fields
...
The request struct's length fields aren't used anymore - we have the
client->req_len field instead, which also is bigreq-compatible.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 54d4dd619c )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
a586aad3d3
Xext: xtest: drop swapping request length fields
...
The request struct's length fields aren't used anymore - we have the
client->req_len field instead, which also is bigreq-compatible.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 69982abf7b )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
98e27c6e36
Xext: selinux: drop swapping request length fields
...
The request struct's length fields aren't used anymore - we have the
client->req_len field instead, which also is bigreq-compatible.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 8a5d2a1335 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
39e6106de6
Xext: xres: drop swapping request length fields
...
The request struct's length fields aren't used anymore - we have the
client->req_len field instead, which also is bigreq-compatible.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 8b57516414 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
8b8766d2b0
Xext: xf86bigfont: drop swapping request length fields
...
The request struct's length fields aren't used anymore - we have the
client->req_len field instead, which also is bigreq-compatible.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 776efd3cfc )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
4bb159e081
Xext: xcmisc: drop swapping request length fields
...
The request struct's length fields aren't used anymore - we have the
client->req_len field instead, which also is bigreq-compatible.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 405a227c73 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
9cf90fd24f
Xext: vidmode: drop swapping request length fields
...
The request struct's length fields aren't used anymore - we have the
client->req_len field instead, which also is bigreq-compatible.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 65cb5e5575 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
9a94514314
Xext: sync: drop swapping request length fields
...
The request struct's length fields aren't used anymore - we have the
client->req_len field instead, which also is bigreq-compatible.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit bf6d132df6 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
466cf2c112
Xext: shm: drop swapping request length fields
...
The request struct's length fields aren't used anymore - we have the
client->req_len field instead, which also is bigreq-compatible.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 75544f1f58 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
b9044cd5c1
Xext: shape: drop swapping request length fields
...
The request struct's length fields aren't used anymore - we have the
client->req_len field instead, which also is bigreq-compatible.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit a105c1f7a9 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
41d02211d4
Xext: security: drop swapping request length fields
...
The request struct's length fields aren't used anymore - we have the
client->req_len field instead, which also is bigreq-compatible.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit cd413baa4b )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
7b400043d1
Xext: saver: drop swapping request length fields
...
The request struct's length fields aren't used anymore - we have the
client->req_len field instead, which also is bigreq-compatible.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit b52f5f9693 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
6649b5d063
Xext: panoramiX: drop swapping request length fields
...
The request struct's length fields aren't used anymore - we have the
client->req_len field instead, which also is bigreq-compatible.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 23a8d9be71 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
6e5d306e1f
Xext: dpms: drop swapping request length fields
...
The request struct's length fields aren't used anymore - we have the
client->req_len field instead, which also is bigreq-compatible.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit fb40f65ee0 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
fef7194223
Xext: bigreq: drop swapping request length fields
...
The request struct's length fields aren't used anymore - we have the
client->req_len field instead, which also is bigreq-compatible.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 4f56025812 )
2026-01-25 10:39:59 -08:00
Enrico Weigelt, metux IT consult
263456bfba
Xext: xtest: fix length checking with bigreq
...
The authorative source of the request frame size is client->req_len,
especially with big requests larger than 2^18 bytes.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 44c063d93d )
2026-01-25 10:39:58 -08:00
Enrico Weigelt, metux IT consult
5901e29ce9
Xext: vidmode: fix length checking with bigreq
...
The authorative source of the request frame size is client->req_len,
especially with big requests larger than 2^18 bytes.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit c3e1f6fccf )
2026-01-25 10:39:58 -08:00
Enrico Weigelt, metux IT consult
904bf223ad
Xext: shape: fix length checking with bigreq
...
The authorative source of the request frame size is client->req_len,
especially with big requests larger than 2^18 bytes.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit dab1299745 )
2026-01-25 10:39:58 -08:00
Enrico Weigelt, metux IT consult
7fe09f2c58
Xext: security: fix length checking with bigreq
...
The authorative source of the request frame size is client->req_len,
especially with big requests larger than 2^18 bytes.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit 67a3319d73 )
2026-01-25 10:39:58 -08:00
Enrico Weigelt, metux IT consult
d9f8aad4b6
Xext: saver: fix length checking with bigreq
...
The authorative source of the request frame size is client->req_len,
especially with big requests larger than 2^18 bytes.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1639 >
(cherry picked from commit bacc4b1477 )
2026-01-25 10:39:58 -08:00
Enrico Weigelt, metux IT consult
b8473e5e34
Xext: geext: drop unused variable extEntry
...
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1596 >
(cherry picked from commit 6df7ba38ae )
2026-01-25 10:39:58 -08:00
Enrico Weigelt, metux IT consult
34f3752ab8
dix: unexport Ones()
...
It's not used by any module/driver, so no need to keep it exported.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1695 >
(cherry picked from commit 1642adec3b )
2026-01-25 10:39:57 -08:00
Enrico Weigelt, metux IT consult
3ffebb3dbd
Xext: xvmc: drop unused XvMCScreenInitProc
...
This pointer field isn't used anywhere, neither in Xorg nor in drivers.
No need to keep it around any longer.
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net >
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1692 >
(cherry picked from commit f65520c4a7 )
2026-01-25 10:39:57 -08:00