diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2017-08-01 12:00:06 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2017-08-24 22:13:50 -0400 |
commit | afea5657c20b11ec9f895ac5cc33b560fb1e0276 (patch) | |
tree | 33068b83b4eabc452bd4a69b5fa6f31a16ce9354 /fs/nfs/callback.c | |
parent | c1df609d9dcec5dcb89ee3091edc3671da1c9996 (diff) |
sunrpc: Const-ify struct sv_serv_ops
Close an attack vector by moving the arrays of per-server methods to
read-only memory.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfs/callback.c')
-rw-r--r-- | fs/nfs/callback.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c index 34323877ec13..2cddf7f437e6 100644 --- a/fs/nfs/callback.c +++ b/fs/nfs/callback.c | |||
@@ -226,26 +226,26 @@ err_bind: | |||
226 | return ret; | 226 | return ret; |
227 | } | 227 | } |
228 | 228 | ||
229 | static struct svc_serv_ops nfs40_cb_sv_ops = { | 229 | static const struct svc_serv_ops nfs40_cb_sv_ops = { |
230 | .svo_function = nfs4_callback_svc, | 230 | .svo_function = nfs4_callback_svc, |
231 | .svo_enqueue_xprt = svc_xprt_do_enqueue, | 231 | .svo_enqueue_xprt = svc_xprt_do_enqueue, |
232 | .svo_setup = svc_set_num_threads_sync, | 232 | .svo_setup = svc_set_num_threads_sync, |
233 | .svo_module = THIS_MODULE, | 233 | .svo_module = THIS_MODULE, |
234 | }; | 234 | }; |
235 | #if defined(CONFIG_NFS_V4_1) | 235 | #if defined(CONFIG_NFS_V4_1) |
236 | static struct svc_serv_ops nfs41_cb_sv_ops = { | 236 | static const struct svc_serv_ops nfs41_cb_sv_ops = { |
237 | .svo_function = nfs41_callback_svc, | 237 | .svo_function = nfs41_callback_svc, |
238 | .svo_enqueue_xprt = svc_xprt_do_enqueue, | 238 | .svo_enqueue_xprt = svc_xprt_do_enqueue, |
239 | .svo_setup = svc_set_num_threads_sync, | 239 | .svo_setup = svc_set_num_threads_sync, |
240 | .svo_module = THIS_MODULE, | 240 | .svo_module = THIS_MODULE, |
241 | }; | 241 | }; |
242 | 242 | ||
243 | static struct svc_serv_ops *nfs4_cb_sv_ops[] = { | 243 | static const struct svc_serv_ops *nfs4_cb_sv_ops[] = { |
244 | [0] = &nfs40_cb_sv_ops, | 244 | [0] = &nfs40_cb_sv_ops, |
245 | [1] = &nfs41_cb_sv_ops, | 245 | [1] = &nfs41_cb_sv_ops, |
246 | }; | 246 | }; |
247 | #else | 247 | #else |
248 | static struct svc_serv_ops *nfs4_cb_sv_ops[] = { | 248 | static const struct svc_serv_ops *nfs4_cb_sv_ops[] = { |
249 | [0] = &nfs40_cb_sv_ops, | 249 | [0] = &nfs40_cb_sv_ops, |
250 | [1] = NULL, | 250 | [1] = NULL, |
251 | }; | 251 | }; |
@@ -254,8 +254,8 @@ static struct svc_serv_ops *nfs4_cb_sv_ops[] = { | |||
254 | static struct svc_serv *nfs_callback_create_svc(int minorversion) | 254 | static struct svc_serv *nfs_callback_create_svc(int minorversion) |
255 | { | 255 | { |
256 | struct nfs_callback_data *cb_info = &nfs_callback_info[minorversion]; | 256 | struct nfs_callback_data *cb_info = &nfs_callback_info[minorversion]; |
257 | const struct svc_serv_ops *sv_ops; | ||
257 | struct svc_serv *serv; | 258 | struct svc_serv *serv; |
258 | struct svc_serv_ops *sv_ops; | ||
259 | 259 | ||
260 | /* | 260 | /* |
261 | * Check whether we're already up and running. | 261 | * Check whether we're already up and running. |