4545#include <net/sctp/sctp.h>
4646#include <linux/sysctl.h>
4747
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 ;
5152static long sack_timer_min = 1 ;
5253static long sack_timer_max = 500 ;
5354
@@ -56,153 +57,172 @@ static ctl_table sctp_table[] = {
5657 .ctl_name = NET_SCTP_RTO_INITIAL ,
5758 .procname = "rto_initial" ,
5859 .data = & sctp_rto_initial ,
59- .maxlen = sizeof (long ),
60+ .maxlen = sizeof (unsigned int ),
6061 .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
6566 },
6667 {
6768 .ctl_name = NET_SCTP_RTO_MIN ,
6869 .procname = "rto_min" ,
6970 .data = & sctp_rto_min ,
70- .maxlen = sizeof (long ),
71+ .maxlen = sizeof (unsigned int ),
7172 .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
7677 },
7778 {
7879 .ctl_name = NET_SCTP_RTO_MAX ,
7980 .procname = "rto_max" ,
8081 .data = & sctp_rto_max ,
81- .maxlen = sizeof (long ),
82+ .maxlen = sizeof (unsigned int ),
8283 .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
8788 },
8889 {
8990 .ctl_name = NET_SCTP_VALID_COOKIE_LIFE ,
9091 .procname = "valid_cookie_life" ,
9192 .data = & sctp_valid_cookie_life ,
92- .maxlen = sizeof (long ),
93+ .maxlen = sizeof (unsigned int ),
9394 .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
9899 },
99100 {
100101 .ctl_name = NET_SCTP_MAX_BURST ,
101102 .procname = "max_burst" ,
102103 .data = & sctp_max_burst ,
103104 .maxlen = sizeof (int ),
104105 .mode = 0644 ,
105- .proc_handler = & proc_dointvec
106+ .proc_handler = & proc_dointvec_minmax ,
107+ .strategy = & sysctl_intvec ,
108+ .extra1 = & zero ,
109+ .extra2 = & int_max
106110 },
107111 {
108112 .ctl_name = NET_SCTP_ASSOCIATION_MAX_RETRANS ,
109113 .procname = "association_max_retrans" ,
110114 .data = & sctp_max_retrans_association ,
111115 .maxlen = sizeof (int ),
112116 .mode = 0644 ,
113- .proc_handler = & proc_dointvec
117+ .proc_handler = & proc_dointvec_minmax ,
118+ .strategy = & sysctl_intvec ,
119+ .extra1 = & one ,
120+ .extra2 = & int_max
114121 },
115122 {
116123 .ctl_name = NET_SCTP_SNDBUF_POLICY ,
117124 .procname = "sndbuf_policy" ,
118125 .data = & sctp_sndbuf_policy ,
119126 .maxlen = sizeof (int ),
120127 .mode = 0644 ,
121- .proc_handler = & proc_dointvec
128+ .proc_handler = & proc_dointvec ,
129+ .strategy = & sysctl_intvec
122130 },
123131 {
124132 .ctl_name = NET_SCTP_RCVBUF_POLICY ,
125133 .procname = "rcvbuf_policy" ,
126134 .data = & sctp_rcvbuf_policy ,
127135 .maxlen = sizeof (int ),
128136 .mode = 0644 ,
129- .proc_handler = & proc_dointvec
137+ .proc_handler = & proc_dointvec ,
138+ .strategy = & sysctl_intvec
130139 },
131140 {
132141 .ctl_name = NET_SCTP_PATH_MAX_RETRANS ,
133142 .procname = "path_max_retrans" ,
134143 .data = & sctp_max_retrans_path ,
135144 .maxlen = sizeof (int ),
136145 .mode = 0644 ,
137- .proc_handler = & proc_dointvec
146+ .proc_handler = & proc_dointvec_minmax ,
147+ .strategy = & sysctl_intvec ,
148+ .extra1 = & one ,
149+ .extra2 = & int_max
138150 },
139151 {
140152 .ctl_name = NET_SCTP_MAX_INIT_RETRANSMITS ,
141153 .procname = "max_init_retransmits" ,
142154 .data = & sctp_max_retrans_init ,
143155 .maxlen = sizeof (int ),
144156 .mode = 0644 ,
145- .proc_handler = & proc_dointvec
157+ .proc_handler = & proc_dointvec_minmax ,
158+ .strategy = & sysctl_intvec ,
159+ .extra1 = & one ,
160+ .extra2 = & int_max
146161 },
147162 {
148163 .ctl_name = NET_SCTP_HB_INTERVAL ,
149164 .procname = "hb_interval" ,
150165 .data = & sctp_hb_interval ,
151- .maxlen = sizeof (long ),
166+ .maxlen = sizeof (unsigned int ),
152167 .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
157172 },
158173 {
159174 .ctl_name = NET_SCTP_PRESERVE_ENABLE ,
160175 .procname = "cookie_preserve_enable" ,
161176 .data = & sctp_cookie_preserve_enable ,
162177 .maxlen = sizeof (int ),
163178 .mode = 0644 ,
164- .proc_handler = & proc_dointvec
179+ .proc_handler = & proc_dointvec ,
180+ .strategy = & sysctl_intvec
165181 },
166182 {
167183 .ctl_name = NET_SCTP_RTO_ALPHA ,
168184 .procname = "rto_alpha_exp_divisor" ,
169185 .data = & sctp_rto_alpha ,
170186 .maxlen = sizeof (int ),
171- .mode = 0644 ,
172- .proc_handler = & proc_dointvec
187+ .mode = 0444 ,
188+ .proc_handler = & proc_dointvec ,
189+ .strategy = & sysctl_intvec
173190 },
174191 {
175192 .ctl_name = NET_SCTP_RTO_BETA ,
176193 .procname = "rto_beta_exp_divisor" ,
177194 .data = & sctp_rto_beta ,
178195 .maxlen = sizeof (int ),
179- .mode = 0644 ,
180- .proc_handler = & proc_dointvec
196+ .mode = 0444 ,
197+ .proc_handler = & proc_dointvec ,
198+ .strategy = & sysctl_intvec
181199 },
182200 {
183201 .ctl_name = NET_SCTP_ADDIP_ENABLE ,
184202 .procname = "addip_enable" ,
185203 .data = & sctp_addip_enable ,
186204 .maxlen = sizeof (int ),
187205 .mode = 0644 ,
188- .proc_handler = & proc_dointvec
206+ .proc_handler = & proc_dointvec ,
207+ .strategy = & sysctl_intvec
189208 },
190209 {
191210 .ctl_name = NET_SCTP_PRSCTP_ENABLE ,
192211 .procname = "prsctp_enable" ,
193212 .data = & sctp_prsctp_enable ,
194213 .maxlen = sizeof (int ),
195214 .mode = 0644 ,
196- .proc_handler = & proc_dointvec
215+ .proc_handler = & proc_dointvec ,
216+ .strategy = & sysctl_intvec
197217 },
198218 {
199219 .ctl_name = NET_SCTP_SACK_TIMEOUT ,
200220 .procname = "sack_timeout" ,
201221 .data = & sctp_sack_timeout ,
202222 .maxlen = sizeof (long ),
203223 .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 ,
206226 .extra1 = & sack_timer_min ,
207227 .extra2 = & sack_timer_max ,
208228 },
@@ -242,37 +262,3 @@ void sctp_sysctl_unregister(void)
242262{
243263 unregister_sysctl_table (sctp_sysctl_header );
244264}
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