diff options
| -rw-r--r-- | fs/nfs/callback.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c index 7f604c7941fb..293fa0528a6e 100644 --- a/fs/nfs/callback.c +++ b/fs/nfs/callback.c | |||
| @@ -43,21 +43,29 @@ static struct svc_program nfs4_callback_program; | |||
| 43 | unsigned int nfs_callback_set_tcpport; | 43 | unsigned int nfs_callback_set_tcpport; |
| 44 | unsigned short nfs_callback_tcpport; | 44 | unsigned short nfs_callback_tcpport; |
| 45 | unsigned short nfs_callback_tcpport6; | 45 | unsigned short nfs_callback_tcpport6; |
| 46 | static const int nfs_set_port_min = 0; | 46 | #define NFS_CALLBACK_MAXPORTNR (65535U) |
| 47 | static const int nfs_set_port_max = 65535; | ||
| 48 | 47 | ||
| 49 | static int param_set_port(const char *val, struct kernel_param *kp) | 48 | static int param_set_portnr(const char *val, struct kernel_param *kp) |
| 50 | { | 49 | { |
| 51 | char *endp; | 50 | unsigned long num; |
| 52 | int num = simple_strtol(val, &endp, 0); | 51 | int ret; |
| 53 | if (endp == val || *endp || num < nfs_set_port_min || num > nfs_set_port_max) | 52 | |
| 53 | if (!val) | ||
| 54 | return -EINVAL; | ||
| 55 | ret = strict_strtoul(val, 0, &num); | ||
| 56 | if (ret == -EINVAL || num > NFS_CALLBACK_MAXPORTNR) | ||
| 54 | return -EINVAL; | 57 | return -EINVAL; |
| 55 | *((int *)kp->arg) = num; | 58 | *((unsigned int *)kp->arg) = num; |
| 56 | return 0; | 59 | return 0; |
| 57 | } | 60 | } |
| 58 | 61 | ||
| 59 | module_param_call(callback_tcpport, param_set_port, param_get_int, | 62 | static int param_get_portnr(char *buffer, struct kernel_param *kp) |
| 60 | &nfs_callback_set_tcpport, 0644); | 63 | { |
| 64 | return param_get_uint(buffer, kp); | ||
| 65 | } | ||
| 66 | #define param_check_portnr(name, p) __param_check(name, p, unsigned int); | ||
| 67 | |||
| 68 | module_param_named(callback_tcpport, nfs_callback_set_tcpport, portnr, 0644); | ||
| 61 | 69 | ||
| 62 | /* | 70 | /* |
| 63 | * This is the NFSv4 callback kernel thread. | 71 | * This is the NFSv4 callback kernel thread. |
