• NeilBrown's avatar
    SUNRPC: return proper error from get_expiry() · cf64b9bc
    NeilBrown authored
    The get_expiry() function currently returns a timestamp, and uses the
    special return value of 0 to indicate an error.
    
    Unfortunately this causes a problem when 0 is the correct return value.
    
    On a system with no RTC it is possible that the boot time will be seen
    to be "3".  When exportfs probes to see if a particular filesystem
    supports NFS export it tries to cache information with an expiry time of
    "3".  The intention is for this to be "long in the past".  Even with no
    RTC it will not be far in the future (at most a second or two) so this
    is harmless.
    But if the boot time happens to have been calculated to be "3", then
    get_expiry will fail incorrectly as it converts the number to "seconds
    since bootime" - 0.
    
    To avoid this problem we change get_expiry() to report the error quite
    separately from the expiry time.  The error is now the return value.
    The expiry time is reported through a by-reference parameter.
    Reported-by: default avatarJerry Zhang <jerry@skydio.com>
    Tested-by: default avatarJerry Zhang <jerry@skydio.com>
    Signed-off-by: default avatarNeilBrown <neilb@suse.de>
    Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    cf64b9bc
nfs4idmap.c 16.6 KB