diff --git a/fs/autofs4/root.c b/fs/autofs4/root.c index bdeb8838a9013db0185a631bd9adfc11c26571ea..101879ed764ca0f3cb073f71c33396fb277db9e9 100644 --- a/fs/autofs4/root.c +++ b/fs/autofs4/root.c @@ -774,12 +774,16 @@ static int autofs4_dir_mkdir(struct inode *dir, static inline int autofs4_compat_get_set_timeout(struct autofs_sb_info *sbi, compat_ulong_t __user *p) { - int rv; unsigned long ntimeout; + int rv; + + rv = get_user(ntimeout, p); + if (rv) + goto error; - if ((rv = get_user(ntimeout, p)) || - (rv = put_user(sbi->exp_timeout/HZ, p))) - return rv; + rv = put_user(sbi->exp_timeout/HZ, p); + if (rv) + goto error; if (ntimeout > UINT_MAX/HZ) sbi->exp_timeout = 0; @@ -787,18 +791,24 @@ static inline int autofs4_compat_get_set_timeout(struct autofs_sb_info *sbi, sbi->exp_timeout = ntimeout * HZ; return 0; +error: + return rv; } #endif static inline int autofs4_get_set_timeout(struct autofs_sb_info *sbi, unsigned long __user *p) { - int rv; unsigned long ntimeout; + int rv; + + rv = get_user(ntimeout, p); + if (rv) + goto error; - if ((rv = get_user(ntimeout, p)) || - (rv = put_user(sbi->exp_timeout/HZ, p))) - return rv; + rv = put_user(sbi->exp_timeout/HZ, p); + if (rv) + goto error; if (ntimeout > ULONG_MAX/HZ) sbi->exp_timeout = 0; @@ -806,6 +816,8 @@ static inline int autofs4_get_set_timeout(struct autofs_sb_info *sbi, sbi->exp_timeout = ntimeout * HZ; return 0; +error: + return rv; } /* Return protocol version */