|
@@ -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 */
|