nfsd: fix year-2038 nfs4 state problem
authorJ. Bruce Fields <bfields@redhat.com>
Tue, 20 Jan 2015 16:51:26 +0000 (11:51 -0500)
committerJ. Bruce Fields <bfields@redhat.com>
Fri, 23 Jan 2015 15:29:11 +0000 (10:29 -0500)
Someone with a weird time_t happened to notice this, it shouldn't really
manifest till 2038.  It may not be our ownly year-2038 problem.

Reported-by: Aaron Pace <Aaron.Pace@alcatel-lucent.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs4state.c

index f924f06..1f4b85b 100644 (file)
@@ -1508,7 +1508,12 @@ unhash_session(struct nfsd4_session *ses)
 static int
 STALE_CLIENTID(clientid_t *clid, struct nfsd_net *nn)
 {
-       if (clid->cl_boot == nn->boot_time)
+       /*
+        * We're assuming the clid was not given out from a boot
+        * precisely 2^32 (about 136 years) before this one.  That seems
+        * a safe assumption:
+        */
+       if (clid->cl_boot == (u32)nn->boot_time)
                return 0;
        dprintk("NFSD stale clientid (%08x/%08x) boot_time %08lx\n",
                clid->cl_boot, clid->cl_id, nn->boot_time);