diff options
| -rw-r--r-- | net/atm/ioctl.c | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/net/atm/ioctl.c b/net/atm/ioctl.c index d89056ec44d4..a150198b05a3 100644 --- a/net/atm/ioctl.c +++ b/net/atm/ioctl.c | |||
| @@ -105,17 +105,35 @@ int vcc_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | |||
| 105 | if (!error) | 105 | if (!error) |
| 106 | sock->state = SS_CONNECTED; | 106 | sock->state = SS_CONNECTED; |
| 107 | goto done; | 107 | goto done; |
| 108 | default: | 108 | case ATM_SETBACKEND: |
| 109 | case ATM_NEWBACKENDIF: | ||
| 110 | { | ||
| 111 | atm_backend_t backend; | ||
| 112 | error = get_user(backend, (atm_backend_t __user *) argp); | ||
| 113 | if (error) | ||
| 114 | goto done; | ||
| 115 | switch (backend) { | ||
| 116 | case ATM_BACKEND_PPP: | ||
| 117 | request_module("pppoatm"); | ||
| 118 | break; | ||
| 119 | case ATM_BACKEND_BR2684: | ||
| 120 | request_module("br2684"); | ||
| 121 | break; | ||
| 122 | } | ||
| 123 | } | ||
| 124 | break; | ||
| 125 | case ATMMPC_CTRL: | ||
| 126 | case ATMMPC_DATA: | ||
| 127 | request_module("mpoa"); | ||
| 128 | break; | ||
| 129 | case ATMARPD_CTRL: | ||
| 130 | request_module("clip"); | ||
| 131 | break; | ||
| 132 | case ATMLEC_CTRL: | ||
| 133 | request_module("lec"); | ||
| 109 | break; | 134 | break; |
| 110 | } | 135 | } |
| 111 | 136 | ||
| 112 | if (cmd == ATMMPC_CTRL || cmd == ATMMPC_DATA) | ||
| 113 | request_module("mpoa"); | ||
| 114 | if (cmd == ATMARPD_CTRL) | ||
| 115 | request_module("clip"); | ||
| 116 | if (cmd == ATMLEC_CTRL) | ||
| 117 | request_module("lec"); | ||
| 118 | |||
| 119 | error = -ENOIOCTLCMD; | 137 | error = -ENOIOCTLCMD; |
| 120 | 138 | ||
| 121 | down(&ioctl_mutex); | 139 | down(&ioctl_mutex); |
