45
45
#include <net/sctp/sctp.h>
46
46
#include <linux/sysctl.h>
47
47
48
- static ctl_handler sctp_sysctl_jiffies_ms ;
49
- static long rto_timer_min = 1 ;
50
- static long rto_timer_max = 86400000 ; /* One day */
48
+ static int zero = 0 ;
49
+ static int one = 1 ;
50
+ static int timer_max = 86400000 ; /* ms in one day */
51
+ static int int_max = INT_MAX ;
51
52
static long sack_timer_min = 1 ;
52
53
static long sack_timer_max = 500 ;
53
54
@@ -56,153 +57,172 @@ static ctl_table sctp_table[] = {
56
57
.ctl_name = NET_SCTP_RTO_INITIAL ,
57
58
.procname = "rto_initial" ,
58
59
.data = & sctp_rto_initial ,
59
- .maxlen = sizeof (long ),
60
+ .maxlen = sizeof (unsigned int ),
60
61
.mode = 0644 ,
61
- .proc_handler = & proc_doulongvec_ms_jiffies_minmax ,
62
- .strategy = & sctp_sysctl_jiffies_ms ,
63
- .extra1 = & rto_timer_min ,
64
- .extra2 = & rto_timer_max
62
+ .proc_handler = & proc_dointvec_minmax ,
63
+ .strategy = & sysctl_intvec ,
64
+ .extra1 = & one ,
65
+ .extra2 = & timer_max
65
66
},
66
67
{
67
68
.ctl_name = NET_SCTP_RTO_MIN ,
68
69
.procname = "rto_min" ,
69
70
.data = & sctp_rto_min ,
70
- .maxlen = sizeof (long ),
71
+ .maxlen = sizeof (unsigned int ),
71
72
.mode = 0644 ,
72
- .proc_handler = & proc_doulongvec_ms_jiffies_minmax ,
73
- .strategy = & sctp_sysctl_jiffies_ms ,
74
- .extra1 = & rto_timer_min ,
75
- .extra2 = & rto_timer_max
73
+ .proc_handler = & proc_dointvec_minmax ,
74
+ .strategy = & sysctl_intvec ,
75
+ .extra1 = & one ,
76
+ .extra2 = & timer_max
76
77
},
77
78
{
78
79
.ctl_name = NET_SCTP_RTO_MAX ,
79
80
.procname = "rto_max" ,
80
81
.data = & sctp_rto_max ,
81
- .maxlen = sizeof (long ),
82
+ .maxlen = sizeof (unsigned int ),
82
83
.mode = 0644 ,
83
- .proc_handler = & proc_doulongvec_ms_jiffies_minmax ,
84
- .strategy = & sctp_sysctl_jiffies_ms ,
85
- .extra1 = & rto_timer_min ,
86
- .extra2 = & rto_timer_max
84
+ .proc_handler = & proc_dointvec_minmax ,
85
+ .strategy = & sysctl_intvec ,
86
+ .extra1 = & one ,
87
+ .extra2 = & timer_max
87
88
},
88
89
{
89
90
.ctl_name = NET_SCTP_VALID_COOKIE_LIFE ,
90
91
.procname = "valid_cookie_life" ,
91
92
.data = & sctp_valid_cookie_life ,
92
- .maxlen = sizeof (long ),
93
+ .maxlen = sizeof (unsigned int ),
93
94
.mode = 0644 ,
94
- .proc_handler = & proc_doulongvec_ms_jiffies_minmax ,
95
- .strategy = & sctp_sysctl_jiffies_ms ,
96
- .extra1 = & rto_timer_min ,
97
- .extra2 = & rto_timer_max
95
+ .proc_handler = & proc_dointvec_minmax ,
96
+ .strategy = & sysctl_intvec ,
97
+ .extra1 = & one ,
98
+ .extra2 = & timer_max
98
99
},
99
100
{
100
101
.ctl_name = NET_SCTP_MAX_BURST ,
101
102
.procname = "max_burst" ,
102
103
.data = & sctp_max_burst ,
103
104
.maxlen = sizeof (int ),
104
105
.mode = 0644 ,
105
- .proc_handler = & proc_dointvec
106
+ .proc_handler = & proc_dointvec_minmax ,
107
+ .strategy = & sysctl_intvec ,
108
+ .extra1 = & zero ,
109
+ .extra2 = & int_max
106
110
},
107
111
{
108
112
.ctl_name = NET_SCTP_ASSOCIATION_MAX_RETRANS ,
109
113
.procname = "association_max_retrans" ,
110
114
.data = & sctp_max_retrans_association ,
111
115
.maxlen = sizeof (int ),
112
116
.mode = 0644 ,
113
- .proc_handler = & proc_dointvec
117
+ .proc_handler = & proc_dointvec_minmax ,
118
+ .strategy = & sysctl_intvec ,
119
+ .extra1 = & one ,
120
+ .extra2 = & int_max
114
121
},
115
122
{
116
123
.ctl_name = NET_SCTP_SNDBUF_POLICY ,
117
124
.procname = "sndbuf_policy" ,
118
125
.data = & sctp_sndbuf_policy ,
119
126
.maxlen = sizeof (int ),
120
127
.mode = 0644 ,
121
- .proc_handler = & proc_dointvec
128
+ .proc_handler = & proc_dointvec ,
129
+ .strategy = & sysctl_intvec
122
130
},
123
131
{
124
132
.ctl_name = NET_SCTP_RCVBUF_POLICY ,
125
133
.procname = "rcvbuf_policy" ,
126
134
.data = & sctp_rcvbuf_policy ,
127
135
.maxlen = sizeof (int ),
128
136
.mode = 0644 ,
129
- .proc_handler = & proc_dointvec
137
+ .proc_handler = & proc_dointvec ,
138
+ .strategy = & sysctl_intvec
130
139
},
131
140
{
132
141
.ctl_name = NET_SCTP_PATH_MAX_RETRANS ,
133
142
.procname = "path_max_retrans" ,
134
143
.data = & sctp_max_retrans_path ,
135
144
.maxlen = sizeof (int ),
136
145
.mode = 0644 ,
137
- .proc_handler = & proc_dointvec
146
+ .proc_handler = & proc_dointvec_minmax ,
147
+ .strategy = & sysctl_intvec ,
148
+ .extra1 = & one ,
149
+ .extra2 = & int_max
138
150
},
139
151
{
140
152
.ctl_name = NET_SCTP_MAX_INIT_RETRANSMITS ,
141
153
.procname = "max_init_retransmits" ,
142
154
.data = & sctp_max_retrans_init ,
143
155
.maxlen = sizeof (int ),
144
156
.mode = 0644 ,
145
- .proc_handler = & proc_dointvec
157
+ .proc_handler = & proc_dointvec_minmax ,
158
+ .strategy = & sysctl_intvec ,
159
+ .extra1 = & one ,
160
+ .extra2 = & int_max
146
161
},
147
162
{
148
163
.ctl_name = NET_SCTP_HB_INTERVAL ,
149
164
.procname = "hb_interval" ,
150
165
.data = & sctp_hb_interval ,
151
- .maxlen = sizeof (long ),
166
+ .maxlen = sizeof (unsigned int ),
152
167
.mode = 0644 ,
153
- .proc_handler = & proc_doulongvec_ms_jiffies_minmax ,
154
- .strategy = & sctp_sysctl_jiffies_ms ,
155
- .extra1 = & rto_timer_min ,
156
- .extra2 = & rto_timer_max
168
+ .proc_handler = & proc_dointvec_minmax ,
169
+ .strategy = & sysctl_intvec ,
170
+ .extra1 = & one ,
171
+ .extra2 = & timer_max
157
172
},
158
173
{
159
174
.ctl_name = NET_SCTP_PRESERVE_ENABLE ,
160
175
.procname = "cookie_preserve_enable" ,
161
176
.data = & sctp_cookie_preserve_enable ,
162
177
.maxlen = sizeof (int ),
163
178
.mode = 0644 ,
164
- .proc_handler = & proc_dointvec
179
+ .proc_handler = & proc_dointvec ,
180
+ .strategy = & sysctl_intvec
165
181
},
166
182
{
167
183
.ctl_name = NET_SCTP_RTO_ALPHA ,
168
184
.procname = "rto_alpha_exp_divisor" ,
169
185
.data = & sctp_rto_alpha ,
170
186
.maxlen = sizeof (int ),
171
- .mode = 0644 ,
172
- .proc_handler = & proc_dointvec
187
+ .mode = 0444 ,
188
+ .proc_handler = & proc_dointvec ,
189
+ .strategy = & sysctl_intvec
173
190
},
174
191
{
175
192
.ctl_name = NET_SCTP_RTO_BETA ,
176
193
.procname = "rto_beta_exp_divisor" ,
177
194
.data = & sctp_rto_beta ,
178
195
.maxlen = sizeof (int ),
179
- .mode = 0644 ,
180
- .proc_handler = & proc_dointvec
196
+ .mode = 0444 ,
197
+ .proc_handler = & proc_dointvec ,
198
+ .strategy = & sysctl_intvec
181
199
},
182
200
{
183
201
.ctl_name = NET_SCTP_ADDIP_ENABLE ,
184
202
.procname = "addip_enable" ,
185
203
.data = & sctp_addip_enable ,
186
204
.maxlen = sizeof (int ),
187
205
.mode = 0644 ,
188
- .proc_handler = & proc_dointvec
206
+ .proc_handler = & proc_dointvec ,
207
+ .strategy = & sysctl_intvec
189
208
},
190
209
{
191
210
.ctl_name = NET_SCTP_PRSCTP_ENABLE ,
192
211
.procname = "prsctp_enable" ,
193
212
.data = & sctp_prsctp_enable ,
194
213
.maxlen = sizeof (int ),
195
214
.mode = 0644 ,
196
- .proc_handler = & proc_dointvec
215
+ .proc_handler = & proc_dointvec ,
216
+ .strategy = & sysctl_intvec
197
217
},
198
218
{
199
219
.ctl_name = NET_SCTP_SACK_TIMEOUT ,
200
220
.procname = "sack_timeout" ,
201
221
.data = & sctp_sack_timeout ,
202
222
.maxlen = sizeof (long ),
203
223
.mode = 0644 ,
204
- .proc_handler = & proc_doulongvec_ms_jiffies_minmax ,
205
- .strategy = & sctp_sysctl_jiffies_ms ,
224
+ .proc_handler = & proc_dointvec_minmax ,
225
+ .strategy = & sysctl_intvec ,
206
226
.extra1 = & sack_timer_min ,
207
227
.extra2 = & sack_timer_max ,
208
228
},
@@ -242,37 +262,3 @@ void sctp_sysctl_unregister(void)
242
262
{
243
263
unregister_sysctl_table (sctp_sysctl_header );
244
264
}
245
-
246
- /* Strategy function to convert jiffies to milliseconds. */
247
- static int sctp_sysctl_jiffies_ms (ctl_table * table , int __user * name , int nlen ,
248
- void __user * oldval , size_t __user * oldlenp ,
249
- void __user * newval , size_t newlen , void * * context ) {
250
-
251
- if (oldval ) {
252
- size_t olen ;
253
-
254
- if (oldlenp ) {
255
- if (get_user (olen , oldlenp ))
256
- return - EFAULT ;
257
-
258
- if (olen != sizeof (int ))
259
- return - EINVAL ;
260
- }
261
- if (put_user ((* (int * )(table -> data ) * 1000 ) / HZ ,
262
- (int __user * )oldval ) ||
263
- (oldlenp && put_user (sizeof (int ), oldlenp )))
264
- return - EFAULT ;
265
- }
266
- if (newval && newlen ) {
267
- int new ;
268
-
269
- if (newlen != sizeof (int ))
270
- return - EINVAL ;
271
-
272
- if (get_user (new , (int __user * )newval ))
273
- return - EFAULT ;
274
-
275
- * (int * )(table -> data ) = (new * HZ ) / 1000 ;
276
- }
277
- return 1 ;
278
- }
0 commit comments