Patch "afs: Prevent callback expiry timer overflow" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
afs: Prevent callback expiry timer overflow
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
afs-prevent-callback-expiry-timer-overflow.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Mon Dec 18 14:47:43 CET 2017
From: Tina Ruchandani <[email protected]>
Date: Thu, 16 Mar 2017 16:27:46 +0000
Subject: afs: Prevent callback expiry timer overflow
From: Tina Ruchandani <[email protected]>
[ Upstream commit 56e714312e7dbd6bb83b2f78d3ec19a404c7649f ]
get_seconds() returns real wall-clock seconds. On 32-bit systems this value will overflow in year 2038 and beyond. This patch changes afs_vnode record to use ktime_get_real_seconds() instead, for the fields cb_expires and cb_expires_at.
--- fs/afs/fsclient.c | 2 +- fs/afs/inode.c | 7 ++++--- fs/afs/internal.h | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-)
fs/afs/fsclient.c +1 -1
@@ -139,7 +139,7 @@ static void xdr_decode_AFSCallBack(const vnode->cb_version =ntohl (*bp++); vnode->cb_expiry =ntohl (*bp++); vnode->cb_type =ntohl (*bp++); - vnode->cb_expires = vnode->cb_expiry +get_seconds (); + vnode->cb_expires = vnode->cb_expiry +ktime_get_real_seconds (); *_bp = bp; }
fs/afs/inode.c +4 -3
@@ -244,12 +244,13 @@ struct inode *afs_iget(struct super_bloc vnode->cb_version =0 ; vnode->cb_expiry =0 ; vnode->cb_type =0 ; - vnode->cb_expires =get_seconds (); + vnode->cb_expires =ktime_get_real_seconds (); }else { vnode->cb_version = cb->version; vnode->cb_expiry = cb->expiry; vnode->cb_type = cb->type; - vnode->cb_expires = vnode->cb_expiry +get_seconds (); + vnode->cb_expires = vnode->cb_expiry + +ktime_get_real_seconds (); } }
@@ -322,7 +323,7 @@ int afs_validate(struct afs_vnode *vnode !test_bit(AFS_VNODE_CB_BROKEN, &vnode->flags) && !test_bit(AFS_VNODE_MODIFIED, &vnode->flags) && !test_bit(AFS_VNODE_ZAP_DATA, &vnode->flags)) { -if (vnode->cb_expires <get_seconds () +10 ) { +if (vnode->cb_expires <ktime_get_real_seconds () +10 ) {_debug ("callback expired" );set_bit (AFS_VNODE_CB_BROKEN , &vnode->flags); }else {
fs/afs/internal.h +2 -2
@@ -375,8 +375,8 @@ struct afs_vnode {struct rb_node server_rb;/* link in server->fs_vnodes */ struct rb_node cb_promise;/* link in server->cb_promises */ struct work_struct cb_broken_work;/* work to be done on callback break */ -time_t cb_expires;/* time at which callback expires */ -time_t cb_expires_at;/* time used to order cb_promise */ +time64_t cb_expires;/* time at which callback expires */ +time64_t cb_expires_at;/* time used to order cb_promise */ unsigned cb_version;/* callback version */ unsigned cb_expiry;/* callback expiry time */ afs_callback_type_t cb_type;/* type of callback */
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/afs-prevent-callback-expiry-timer-overflow.patch queue-4.4/afs-migrate-vlocation-fields-to-64-bit.patch