diff options
Diffstat (limited to 'net/sctp')
| -rw-r--r-- | net/sctp/associola.c | 10 | ||||
| -rw-r--r-- | net/sctp/bind_addr.c | 12 | ||||
| -rw-r--r-- | net/sctp/chunk.c | 2 | ||||
| -rw-r--r-- | net/sctp/endpointola.c | 5 | ||||
| -rw-r--r-- | net/sctp/protocol.c | 4 | ||||
| -rw-r--r-- | net/sctp/sm_make_chunk.c | 14 | ||||
| -rw-r--r-- | net/sctp/sm_sideeffect.c | 12 | ||||
| -rw-r--r-- | net/sctp/socket.c | 252 | ||||
| -rw-r--r-- | net/sctp/ssnmap.c | 2 | ||||
| -rw-r--r-- | net/sctp/transport.c | 4 | ||||
| -rw-r--r-- | net/sctp/ulpevent.c | 18 | ||||
| -rw-r--r-- | net/sctp/ulpqueue.c | 8 |
12 files changed, 272 insertions, 71 deletions
diff --git a/net/sctp/associola.c b/net/sctp/associola.c index 5b24ae0650d3..12b0f582a66b 100644 --- a/net/sctp/associola.c +++ b/net/sctp/associola.c | |||
| @@ -71,7 +71,7 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a | |||
| 71 | const struct sctp_endpoint *ep, | 71 | const struct sctp_endpoint *ep, |
| 72 | const struct sock *sk, | 72 | const struct sock *sk, |
| 73 | sctp_scope_t scope, | 73 | sctp_scope_t scope, |
| 74 | unsigned int __nocast gfp) | 74 | gfp_t gfp) |
| 75 | { | 75 | { |
| 76 | struct sctp_sock *sp; | 76 | struct sctp_sock *sp; |
| 77 | int i; | 77 | int i; |
| @@ -273,7 +273,7 @@ fail_init: | |||
| 273 | struct sctp_association *sctp_association_new(const struct sctp_endpoint *ep, | 273 | struct sctp_association *sctp_association_new(const struct sctp_endpoint *ep, |
| 274 | const struct sock *sk, | 274 | const struct sock *sk, |
| 275 | sctp_scope_t scope, | 275 | sctp_scope_t scope, |
| 276 | unsigned int __nocast gfp) | 276 | gfp_t gfp) |
| 277 | { | 277 | { |
| 278 | struct sctp_association *asoc; | 278 | struct sctp_association *asoc; |
| 279 | 279 | ||
| @@ -479,7 +479,7 @@ void sctp_assoc_rm_peer(struct sctp_association *asoc, | |||
| 479 | /* Add a transport address to an association. */ | 479 | /* Add a transport address to an association. */ |
| 480 | struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc, | 480 | struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc, |
| 481 | const union sctp_addr *addr, | 481 | const union sctp_addr *addr, |
| 482 | const unsigned int __nocast gfp, | 482 | const gfp_t gfp, |
| 483 | const int peer_state) | 483 | const int peer_state) |
| 484 | { | 484 | { |
| 485 | struct sctp_transport *peer; | 485 | struct sctp_transport *peer; |
| @@ -1231,7 +1231,7 @@ void sctp_assoc_rwnd_decrease(struct sctp_association *asoc, unsigned len) | |||
| 1231 | * local endpoint and the remote peer. | 1231 | * local endpoint and the remote peer. |
| 1232 | */ | 1232 | */ |
| 1233 | int sctp_assoc_set_bind_addr_from_ep(struct sctp_association *asoc, | 1233 | int sctp_assoc_set_bind_addr_from_ep(struct sctp_association *asoc, |
| 1234 | unsigned int __nocast gfp) | 1234 | gfp_t gfp) |
| 1235 | { | 1235 | { |
| 1236 | sctp_scope_t scope; | 1236 | sctp_scope_t scope; |
| 1237 | int flags; | 1237 | int flags; |
| @@ -1254,7 +1254,7 @@ int sctp_assoc_set_bind_addr_from_ep(struct sctp_association *asoc, | |||
| 1254 | /* Build the association's bind address list from the cookie. */ | 1254 | /* Build the association's bind address list from the cookie. */ |
| 1255 | int sctp_assoc_set_bind_addr_from_cookie(struct sctp_association *asoc, | 1255 | int sctp_assoc_set_bind_addr_from_cookie(struct sctp_association *asoc, |
| 1256 | struct sctp_cookie *cookie, | 1256 | struct sctp_cookie *cookie, |
| 1257 | unsigned int __nocast gfp) | 1257 | gfp_t gfp) |
| 1258 | { | 1258 | { |
| 1259 | int var_size2 = ntohs(cookie->peer_init->chunk_hdr.length); | 1259 | int var_size2 = ntohs(cookie->peer_init->chunk_hdr.length); |
| 1260 | int var_size3 = cookie->raw_addr_list_len; | 1260 | int var_size3 = cookie->raw_addr_list_len; |
diff --git a/net/sctp/bind_addr.c b/net/sctp/bind_addr.c index f71549710f2e..2b962627f631 100644 --- a/net/sctp/bind_addr.c +++ b/net/sctp/bind_addr.c | |||
| @@ -53,7 +53,7 @@ | |||
| 53 | 53 | ||
| 54 | /* Forward declarations for internal helpers. */ | 54 | /* Forward declarations for internal helpers. */ |
| 55 | static int sctp_copy_one_addr(struct sctp_bind_addr *, union sctp_addr *, | 55 | static int sctp_copy_one_addr(struct sctp_bind_addr *, union sctp_addr *, |
| 56 | sctp_scope_t scope, unsigned int __nocast gfp, | 56 | sctp_scope_t scope, gfp_t gfp, |
| 57 | int flags); | 57 | int flags); |
| 58 | static void sctp_bind_addr_clean(struct sctp_bind_addr *); | 58 | static void sctp_bind_addr_clean(struct sctp_bind_addr *); |
| 59 | 59 | ||
| @@ -64,7 +64,7 @@ static void sctp_bind_addr_clean(struct sctp_bind_addr *); | |||
| 64 | */ | 64 | */ |
| 65 | int sctp_bind_addr_copy(struct sctp_bind_addr *dest, | 65 | int sctp_bind_addr_copy(struct sctp_bind_addr *dest, |
| 66 | const struct sctp_bind_addr *src, | 66 | const struct sctp_bind_addr *src, |
| 67 | sctp_scope_t scope, unsigned int __nocast gfp, | 67 | sctp_scope_t scope, gfp_t gfp, |
| 68 | int flags) | 68 | int flags) |
| 69 | { | 69 | { |
| 70 | struct sctp_sockaddr_entry *addr; | 70 | struct sctp_sockaddr_entry *addr; |
| @@ -146,7 +146,7 @@ void sctp_bind_addr_free(struct sctp_bind_addr *bp) | |||
| 146 | 146 | ||
| 147 | /* Add an address to the bind address list in the SCTP_bind_addr structure. */ | 147 | /* Add an address to the bind address list in the SCTP_bind_addr structure. */ |
| 148 | int sctp_add_bind_addr(struct sctp_bind_addr *bp, union sctp_addr *new, | 148 | int sctp_add_bind_addr(struct sctp_bind_addr *bp, union sctp_addr *new, |
| 149 | unsigned int __nocast gfp) | 149 | gfp_t gfp) |
| 150 | { | 150 | { |
| 151 | struct sctp_sockaddr_entry *addr; | 151 | struct sctp_sockaddr_entry *addr; |
| 152 | 152 | ||
| @@ -200,7 +200,7 @@ int sctp_del_bind_addr(struct sctp_bind_addr *bp, union sctp_addr *del_addr) | |||
| 200 | */ | 200 | */ |
| 201 | union sctp_params sctp_bind_addrs_to_raw(const struct sctp_bind_addr *bp, | 201 | union sctp_params sctp_bind_addrs_to_raw(const struct sctp_bind_addr *bp, |
| 202 | int *addrs_len, | 202 | int *addrs_len, |
| 203 | unsigned int __nocast gfp) | 203 | gfp_t gfp) |
| 204 | { | 204 | { |
| 205 | union sctp_params addrparms; | 205 | union sctp_params addrparms; |
| 206 | union sctp_params retval; | 206 | union sctp_params retval; |
| @@ -252,7 +252,7 @@ end_raw: | |||
| 252 | * address parameters). | 252 | * address parameters). |
| 253 | */ | 253 | */ |
| 254 | int sctp_raw_to_bind_addrs(struct sctp_bind_addr *bp, __u8 *raw_addr_list, | 254 | int sctp_raw_to_bind_addrs(struct sctp_bind_addr *bp, __u8 *raw_addr_list, |
| 255 | int addrs_len, __u16 port, unsigned int __nocast gfp) | 255 | int addrs_len, __u16 port, gfp_t gfp) |
| 256 | { | 256 | { |
| 257 | union sctp_addr_param *rawaddr; | 257 | union sctp_addr_param *rawaddr; |
| 258 | struct sctp_paramhdr *param; | 258 | struct sctp_paramhdr *param; |
| @@ -350,7 +350,7 @@ union sctp_addr *sctp_find_unmatch_addr(struct sctp_bind_addr *bp, | |||
| 350 | /* Copy out addresses from the global local address list. */ | 350 | /* Copy out addresses from the global local address list. */ |
| 351 | static int sctp_copy_one_addr(struct sctp_bind_addr *dest, | 351 | static int sctp_copy_one_addr(struct sctp_bind_addr *dest, |
| 352 | union sctp_addr *addr, | 352 | union sctp_addr *addr, |
| 353 | sctp_scope_t scope, unsigned int __nocast gfp, | 353 | sctp_scope_t scope, gfp_t gfp, |
| 354 | int flags) | 354 | int flags) |
| 355 | { | 355 | { |
| 356 | int error = 0; | 356 | int error = 0; |
diff --git a/net/sctp/chunk.c b/net/sctp/chunk.c index 61da2937e641..83ef411772f4 100644 --- a/net/sctp/chunk.c +++ b/net/sctp/chunk.c | |||
| @@ -62,7 +62,7 @@ static void sctp_datamsg_init(struct sctp_datamsg *msg) | |||
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | /* Allocate and initialize datamsg. */ | 64 | /* Allocate and initialize datamsg. */ |
| 65 | SCTP_STATIC struct sctp_datamsg *sctp_datamsg_new(unsigned int __nocast gfp) | 65 | SCTP_STATIC struct sctp_datamsg *sctp_datamsg_new(gfp_t gfp) |
| 66 | { | 66 | { |
| 67 | struct sctp_datamsg *msg; | 67 | struct sctp_datamsg *msg; |
| 68 | msg = kmalloc(sizeof(struct sctp_datamsg), gfp); | 68 | msg = kmalloc(sizeof(struct sctp_datamsg), gfp); |
diff --git a/net/sctp/endpointola.c b/net/sctp/endpointola.c index e22ccd655965..96984f7a2d69 100644 --- a/net/sctp/endpointola.c +++ b/net/sctp/endpointola.c | |||
| @@ -68,7 +68,7 @@ static void sctp_endpoint_bh_rcv(struct sctp_endpoint *ep); | |||
| 68 | */ | 68 | */ |
| 69 | static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep, | 69 | static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep, |
| 70 | struct sock *sk, | 70 | struct sock *sk, |
| 71 | unsigned int __nocast gfp) | 71 | gfp_t gfp) |
| 72 | { | 72 | { |
| 73 | struct sctp_sock *sp = sctp_sk(sk); | 73 | struct sctp_sock *sp = sctp_sk(sk); |
| 74 | memset(ep, 0, sizeof(struct sctp_endpoint)); | 74 | memset(ep, 0, sizeof(struct sctp_endpoint)); |
| @@ -138,8 +138,7 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep, | |||
| 138 | /* Create a sctp_endpoint with all that boring stuff initialized. | 138 | /* Create a sctp_endpoint with all that boring stuff initialized. |
| 139 | * Returns NULL if there isn't enough memory. | 139 | * Returns NULL if there isn't enough memory. |
| 140 | */ | 140 | */ |
| 141 | struct sctp_endpoint *sctp_endpoint_new(struct sock *sk, | 141 | struct sctp_endpoint *sctp_endpoint_new(struct sock *sk, gfp_t gfp) |
| 142 | unsigned int __nocast gfp) | ||
| 143 | { | 142 | { |
| 144 | struct sctp_endpoint *ep; | 143 | struct sctp_endpoint *ep; |
| 145 | 144 | ||
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index e7025be77691..26de4d3e1bd9 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c | |||
| @@ -147,7 +147,7 @@ static void sctp_v4_copy_addrlist(struct list_head *addrlist, | |||
| 147 | struct sctp_sockaddr_entry *addr; | 147 | struct sctp_sockaddr_entry *addr; |
| 148 | 148 | ||
| 149 | rcu_read_lock(); | 149 | rcu_read_lock(); |
| 150 | if ((in_dev = __in_dev_get(dev)) == NULL) { | 150 | if ((in_dev = __in_dev_get_rcu(dev)) == NULL) { |
| 151 | rcu_read_unlock(); | 151 | rcu_read_unlock(); |
| 152 | return; | 152 | return; |
| 153 | } | 153 | } |
| @@ -219,7 +219,7 @@ static void sctp_free_local_addr_list(void) | |||
| 219 | 219 | ||
| 220 | /* Copy the local addresses which are valid for 'scope' into 'bp'. */ | 220 | /* Copy the local addresses which are valid for 'scope' into 'bp'. */ |
| 221 | int sctp_copy_local_addr_list(struct sctp_bind_addr *bp, sctp_scope_t scope, | 221 | int sctp_copy_local_addr_list(struct sctp_bind_addr *bp, sctp_scope_t scope, |
| 222 | unsigned int __nocast gfp, int copy_flags) | 222 | gfp_t gfp, int copy_flags) |
| 223 | { | 223 | { |
| 224 | struct sctp_sockaddr_entry *addr; | 224 | struct sctp_sockaddr_entry *addr; |
| 225 | int error = 0; | 225 | int error = 0; |
diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c index 3868a8d70cc0..10e82ec2ebd3 100644 --- a/net/sctp/sm_make_chunk.c +++ b/net/sctp/sm_make_chunk.c | |||
| @@ -78,7 +78,7 @@ static sctp_cookie_param_t *sctp_pack_cookie(const struct sctp_endpoint *ep, | |||
| 78 | static int sctp_process_param(struct sctp_association *asoc, | 78 | static int sctp_process_param(struct sctp_association *asoc, |
| 79 | union sctp_params param, | 79 | union sctp_params param, |
| 80 | const union sctp_addr *peer_addr, | 80 | const union sctp_addr *peer_addr, |
| 81 | unsigned int __nocast gfp); | 81 | gfp_t gfp); |
| 82 | 82 | ||
| 83 | /* What was the inbound interface for this chunk? */ | 83 | /* What was the inbound interface for this chunk? */ |
| 84 | int sctp_chunk_iif(const struct sctp_chunk *chunk) | 84 | int sctp_chunk_iif(const struct sctp_chunk *chunk) |
| @@ -174,7 +174,7 @@ void sctp_init_cause(struct sctp_chunk *chunk, __u16 cause_code, | |||
| 174 | */ | 174 | */ |
| 175 | struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc, | 175 | struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc, |
| 176 | const struct sctp_bind_addr *bp, | 176 | const struct sctp_bind_addr *bp, |
| 177 | unsigned int __nocast gfp, int vparam_len) | 177 | gfp_t gfp, int vparam_len) |
| 178 | { | 178 | { |
| 179 | sctp_inithdr_t init; | 179 | sctp_inithdr_t init; |
| 180 | union sctp_params addrs; | 180 | union sctp_params addrs; |
| @@ -261,7 +261,7 @@ nodata: | |||
| 261 | 261 | ||
| 262 | struct sctp_chunk *sctp_make_init_ack(const struct sctp_association *asoc, | 262 | struct sctp_chunk *sctp_make_init_ack(const struct sctp_association *asoc, |
| 263 | const struct sctp_chunk *chunk, | 263 | const struct sctp_chunk *chunk, |
| 264 | unsigned int __nocast gfp, int unkparam_len) | 264 | gfp_t gfp, int unkparam_len) |
| 265 | { | 265 | { |
| 266 | sctp_inithdr_t initack; | 266 | sctp_inithdr_t initack; |
| 267 | struct sctp_chunk *retval; | 267 | struct sctp_chunk *retval; |
| @@ -1234,7 +1234,7 @@ void sctp_chunk_assign_tsn(struct sctp_chunk *chunk) | |||
| 1234 | /* Create a CLOSED association to use with an incoming packet. */ | 1234 | /* Create a CLOSED association to use with an incoming packet. */ |
| 1235 | struct sctp_association *sctp_make_temp_asoc(const struct sctp_endpoint *ep, | 1235 | struct sctp_association *sctp_make_temp_asoc(const struct sctp_endpoint *ep, |
| 1236 | struct sctp_chunk *chunk, | 1236 | struct sctp_chunk *chunk, |
| 1237 | unsigned int __nocast gfp) | 1237 | gfp_t gfp) |
| 1238 | { | 1238 | { |
| 1239 | struct sctp_association *asoc; | 1239 | struct sctp_association *asoc; |
| 1240 | struct sk_buff *skb; | 1240 | struct sk_buff *skb; |
| @@ -1349,7 +1349,7 @@ nodata: | |||
| 1349 | struct sctp_association *sctp_unpack_cookie( | 1349 | struct sctp_association *sctp_unpack_cookie( |
| 1350 | const struct sctp_endpoint *ep, | 1350 | const struct sctp_endpoint *ep, |
| 1351 | const struct sctp_association *asoc, | 1351 | const struct sctp_association *asoc, |
| 1352 | struct sctp_chunk *chunk, unsigned int __nocast gfp, | 1352 | struct sctp_chunk *chunk, gfp_t gfp, |
| 1353 | int *error, struct sctp_chunk **errp) | 1353 | int *error, struct sctp_chunk **errp) |
| 1354 | { | 1354 | { |
| 1355 | struct sctp_association *retval = NULL; | 1355 | struct sctp_association *retval = NULL; |
| @@ -1814,7 +1814,7 @@ int sctp_verify_init(const struct sctp_association *asoc, | |||
| 1814 | */ | 1814 | */ |
| 1815 | int sctp_process_init(struct sctp_association *asoc, sctp_cid_t cid, | 1815 | int sctp_process_init(struct sctp_association *asoc, sctp_cid_t cid, |
| 1816 | const union sctp_addr *peer_addr, | 1816 | const union sctp_addr *peer_addr, |
| 1817 | sctp_init_chunk_t *peer_init, unsigned int __nocast gfp) | 1817 | sctp_init_chunk_t *peer_init, gfp_t gfp) |
| 1818 | { | 1818 | { |
| 1819 | union sctp_params param; | 1819 | union sctp_params param; |
| 1820 | struct sctp_transport *transport; | 1820 | struct sctp_transport *transport; |
| @@ -1985,7 +1985,7 @@ nomem: | |||
| 1985 | static int sctp_process_param(struct sctp_association *asoc, | 1985 | static int sctp_process_param(struct sctp_association *asoc, |
| 1986 | union sctp_params param, | 1986 | union sctp_params param, |
| 1987 | const union sctp_addr *peer_addr, | 1987 | const union sctp_addr *peer_addr, |
| 1988 | unsigned int __nocast gfp) | 1988 | gfp_t gfp) |
| 1989 | { | 1989 | { |
| 1990 | union sctp_addr addr; | 1990 | union sctp_addr addr; |
| 1991 | int i; | 1991 | int i; |
diff --git a/net/sctp/sm_sideeffect.c b/net/sctp/sm_sideeffect.c index 39c970b5b198..f84173ea8ec1 100644 --- a/net/sctp/sm_sideeffect.c +++ b/net/sctp/sm_sideeffect.c | |||
| @@ -63,7 +63,7 @@ static int sctp_cmd_interpreter(sctp_event_t event_type, | |||
| 63 | void *event_arg, | 63 | void *event_arg, |
| 64 | sctp_disposition_t status, | 64 | sctp_disposition_t status, |
| 65 | sctp_cmd_seq_t *commands, | 65 | sctp_cmd_seq_t *commands, |
| 66 | unsigned int __nocast gfp); | 66 | gfp_t gfp); |
| 67 | static int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype, | 67 | static int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype, |
| 68 | sctp_state_t state, | 68 | sctp_state_t state, |
| 69 | struct sctp_endpoint *ep, | 69 | struct sctp_endpoint *ep, |
| @@ -71,7 +71,7 @@ static int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype, | |||
| 71 | void *event_arg, | 71 | void *event_arg, |
| 72 | sctp_disposition_t status, | 72 | sctp_disposition_t status, |
| 73 | sctp_cmd_seq_t *commands, | 73 | sctp_cmd_seq_t *commands, |
| 74 | unsigned int __nocast gfp); | 74 | gfp_t gfp); |
| 75 | 75 | ||
| 76 | /******************************************************************** | 76 | /******************************************************************** |
| 77 | * Helper functions | 77 | * Helper functions |
| @@ -498,7 +498,7 @@ static int sctp_cmd_process_init(sctp_cmd_seq_t *commands, | |||
| 498 | struct sctp_association *asoc, | 498 | struct sctp_association *asoc, |
| 499 | struct sctp_chunk *chunk, | 499 | struct sctp_chunk *chunk, |
| 500 | sctp_init_chunk_t *peer_init, | 500 | sctp_init_chunk_t *peer_init, |
| 501 | unsigned int __nocast gfp) | 501 | gfp_t gfp) |
| 502 | { | 502 | { |
| 503 | int error; | 503 | int error; |
| 504 | 504 | ||
| @@ -853,7 +853,7 @@ int sctp_do_sm(sctp_event_t event_type, sctp_subtype_t subtype, | |||
| 853 | struct sctp_endpoint *ep, | 853 | struct sctp_endpoint *ep, |
| 854 | struct sctp_association *asoc, | 854 | struct sctp_association *asoc, |
| 855 | void *event_arg, | 855 | void *event_arg, |
| 856 | unsigned int __nocast gfp) | 856 | gfp_t gfp) |
| 857 | { | 857 | { |
| 858 | sctp_cmd_seq_t commands; | 858 | sctp_cmd_seq_t commands; |
| 859 | const sctp_sm_table_entry_t *state_fn; | 859 | const sctp_sm_table_entry_t *state_fn; |
| @@ -898,7 +898,7 @@ static int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype, | |||
| 898 | void *event_arg, | 898 | void *event_arg, |
| 899 | sctp_disposition_t status, | 899 | sctp_disposition_t status, |
| 900 | sctp_cmd_seq_t *commands, | 900 | sctp_cmd_seq_t *commands, |
| 901 | unsigned int __nocast gfp) | 901 | gfp_t gfp) |
| 902 | { | 902 | { |
| 903 | int error; | 903 | int error; |
| 904 | 904 | ||
| @@ -986,7 +986,7 @@ static int sctp_cmd_interpreter(sctp_event_t event_type, | |||
| 986 | void *event_arg, | 986 | void *event_arg, |
| 987 | sctp_disposition_t status, | 987 | sctp_disposition_t status, |
| 988 | sctp_cmd_seq_t *commands, | 988 | sctp_cmd_seq_t *commands, |
| 989 | unsigned int __nocast gfp) | 989 | gfp_t gfp) |
| 990 | { | 990 | { |
| 991 | int error = 0; | 991 | int error = 0; |
| 992 | int force; | 992 | int force; |
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 91ec8c936913..02e068d3450d 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c | |||
| @@ -3159,8 +3159,9 @@ static int sctp_getsockopt_initmsg(struct sock *sk, int len, char __user *optval | |||
| 3159 | return 0; | 3159 | return 0; |
| 3160 | } | 3160 | } |
| 3161 | 3161 | ||
| 3162 | static int sctp_getsockopt_peer_addrs_num(struct sock *sk, int len, | 3162 | static int sctp_getsockopt_peer_addrs_num_old(struct sock *sk, int len, |
| 3163 | char __user *optval, int __user *optlen) | 3163 | char __user *optval, |
| 3164 | int __user *optlen) | ||
| 3164 | { | 3165 | { |
| 3165 | sctp_assoc_t id; | 3166 | sctp_assoc_t id; |
| 3166 | struct sctp_association *asoc; | 3167 | struct sctp_association *asoc; |
| @@ -3185,23 +3186,28 @@ static int sctp_getsockopt_peer_addrs_num(struct sock *sk, int len, | |||
| 3185 | return cnt; | 3186 | return cnt; |
| 3186 | } | 3187 | } |
| 3187 | 3188 | ||
| 3188 | static int sctp_getsockopt_peer_addrs(struct sock *sk, int len, | 3189 | /* |
| 3189 | char __user *optval, int __user *optlen) | 3190 | * Old API for getting list of peer addresses. Does not work for 32-bit |
| 3191 | * programs running on a 64-bit kernel | ||
| 3192 | */ | ||
| 3193 | static int sctp_getsockopt_peer_addrs_old(struct sock *sk, int len, | ||
| 3194 | char __user *optval, | ||
| 3195 | int __user *optlen) | ||
| 3190 | { | 3196 | { |
| 3191 | struct sctp_association *asoc; | 3197 | struct sctp_association *asoc; |
| 3192 | struct list_head *pos; | 3198 | struct list_head *pos; |
| 3193 | int cnt = 0; | 3199 | int cnt = 0; |
| 3194 | struct sctp_getaddrs getaddrs; | 3200 | struct sctp_getaddrs_old getaddrs; |
| 3195 | struct sctp_transport *from; | 3201 | struct sctp_transport *from; |
| 3196 | void __user *to; | 3202 | void __user *to; |
| 3197 | union sctp_addr temp; | 3203 | union sctp_addr temp; |
| 3198 | struct sctp_sock *sp = sctp_sk(sk); | 3204 | struct sctp_sock *sp = sctp_sk(sk); |
| 3199 | int addrlen; | 3205 | int addrlen; |
| 3200 | 3206 | ||
| 3201 | if (len != sizeof(struct sctp_getaddrs)) | 3207 | if (len != sizeof(struct sctp_getaddrs_old)) |
| 3202 | return -EINVAL; | 3208 | return -EINVAL; |
| 3203 | 3209 | ||
| 3204 | if (copy_from_user(&getaddrs, optval, sizeof(struct sctp_getaddrs))) | 3210 | if (copy_from_user(&getaddrs, optval, sizeof(struct sctp_getaddrs_old))) |
| 3205 | return -EFAULT; | 3211 | return -EFAULT; |
| 3206 | 3212 | ||
| 3207 | if (getaddrs.addr_num <= 0) return -EINVAL; | 3213 | if (getaddrs.addr_num <= 0) return -EINVAL; |
| @@ -3225,15 +3231,69 @@ static int sctp_getsockopt_peer_addrs(struct sock *sk, int len, | |||
| 3225 | if (cnt >= getaddrs.addr_num) break; | 3231 | if (cnt >= getaddrs.addr_num) break; |
| 3226 | } | 3232 | } |
| 3227 | getaddrs.addr_num = cnt; | 3233 | getaddrs.addr_num = cnt; |
| 3228 | if (copy_to_user(optval, &getaddrs, sizeof(struct sctp_getaddrs))) | 3234 | if (copy_to_user(optval, &getaddrs, sizeof(struct sctp_getaddrs_old))) |
| 3235 | return -EFAULT; | ||
| 3236 | |||
| 3237 | return 0; | ||
| 3238 | } | ||
| 3239 | |||
| 3240 | static int sctp_getsockopt_peer_addrs(struct sock *sk, int len, | ||
| 3241 | char __user *optval, int __user *optlen) | ||
| 3242 | { | ||
| 3243 | struct sctp_association *asoc; | ||
| 3244 | struct list_head *pos; | ||
| 3245 | int cnt = 0; | ||
| 3246 | struct sctp_getaddrs getaddrs; | ||
| 3247 | struct sctp_transport *from; | ||
| 3248 | void __user *to; | ||
| 3249 | union sctp_addr temp; | ||
| 3250 | struct sctp_sock *sp = sctp_sk(sk); | ||
| 3251 | int addrlen; | ||
| 3252 | size_t space_left; | ||
| 3253 | int bytes_copied; | ||
| 3254 | |||
| 3255 | if (len < sizeof(struct sctp_getaddrs)) | ||
| 3256 | return -EINVAL; | ||
| 3257 | |||
| 3258 | if (copy_from_user(&getaddrs, optval, sizeof(struct sctp_getaddrs))) | ||
| 3259 | return -EFAULT; | ||
| 3260 | |||
| 3261 | /* For UDP-style sockets, id specifies the association to query. */ | ||
| 3262 | asoc = sctp_id2assoc(sk, getaddrs.assoc_id); | ||
| 3263 | if (!asoc) | ||
| 3264 | return -EINVAL; | ||
| 3265 | |||
| 3266 | to = optval + offsetof(struct sctp_getaddrs,addrs); | ||
| 3267 | space_left = len - sizeof(struct sctp_getaddrs) - | ||
| 3268 | offsetof(struct sctp_getaddrs,addrs); | ||
| 3269 | |||
| 3270 | list_for_each(pos, &asoc->peer.transport_addr_list) { | ||
| 3271 | from = list_entry(pos, struct sctp_transport, transports); | ||
| 3272 | memcpy(&temp, &from->ipaddr, sizeof(temp)); | ||
| 3273 | sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp); | ||
| 3274 | addrlen = sctp_get_af_specific(sk->sk_family)->sockaddr_len; | ||
| 3275 | if(space_left < addrlen) | ||
| 3276 | return -ENOMEM; | ||
| 3277 | temp.v4.sin_port = htons(temp.v4.sin_port); | ||
| 3278 | if (copy_to_user(to, &temp, addrlen)) | ||
| 3279 | return -EFAULT; | ||
| 3280 | to += addrlen; | ||
| 3281 | cnt++; | ||
| 3282 | space_left -= addrlen; | ||
| 3283 | } | ||
| 3284 | |||
| 3285 | if (put_user(cnt, &((struct sctp_getaddrs __user *)optval)->addr_num)) | ||
| 3286 | return -EFAULT; | ||
| 3287 | bytes_copied = ((char __user *)to) - optval; | ||
| 3288 | if (put_user(bytes_copied, optlen)) | ||
| 3229 | return -EFAULT; | 3289 | return -EFAULT; |
| 3230 | 3290 | ||
| 3231 | return 0; | 3291 | return 0; |
| 3232 | } | 3292 | } |
| 3233 | 3293 | ||
| 3234 | static int sctp_getsockopt_local_addrs_num(struct sock *sk, int len, | 3294 | static int sctp_getsockopt_local_addrs_num_old(struct sock *sk, int len, |
| 3235 | char __user *optval, | 3295 | char __user *optval, |
| 3236 | int __user *optlen) | 3296 | int __user *optlen) |
| 3237 | { | 3297 | { |
| 3238 | sctp_assoc_t id; | 3298 | sctp_assoc_t id; |
| 3239 | struct sctp_bind_addr *bp; | 3299 | struct sctp_bind_addr *bp; |
| @@ -3306,8 +3366,8 @@ done: | |||
| 3306 | /* Helper function that copies local addresses to user and returns the number | 3366 | /* Helper function that copies local addresses to user and returns the number |
| 3307 | * of addresses copied. | 3367 | * of addresses copied. |
| 3308 | */ | 3368 | */ |
| 3309 | static int sctp_copy_laddrs_to_user(struct sock *sk, __u16 port, int max_addrs, | 3369 | static int sctp_copy_laddrs_to_user_old(struct sock *sk, __u16 port, int max_addrs, |
| 3310 | void __user *to) | 3370 | void __user *to) |
| 3311 | { | 3371 | { |
| 3312 | struct list_head *pos; | 3372 | struct list_head *pos; |
| 3313 | struct sctp_sockaddr_entry *addr; | 3373 | struct sctp_sockaddr_entry *addr; |
| @@ -3341,14 +3401,54 @@ static int sctp_copy_laddrs_to_user(struct sock *sk, __u16 port, int max_addrs, | |||
| 3341 | return cnt; | 3401 | return cnt; |
| 3342 | } | 3402 | } |
| 3343 | 3403 | ||
| 3344 | static int sctp_getsockopt_local_addrs(struct sock *sk, int len, | 3404 | static int sctp_copy_laddrs_to_user(struct sock *sk, __u16 port, |
| 3345 | char __user *optval, int __user *optlen) | 3405 | void * __user *to, size_t space_left) |
| 3406 | { | ||
| 3407 | struct list_head *pos; | ||
| 3408 | struct sctp_sockaddr_entry *addr; | ||
| 3409 | unsigned long flags; | ||
| 3410 | union sctp_addr temp; | ||
| 3411 | int cnt = 0; | ||
| 3412 | int addrlen; | ||
| 3413 | |||
| 3414 | sctp_spin_lock_irqsave(&sctp_local_addr_lock, flags); | ||
| 3415 | list_for_each(pos, &sctp_local_addr_list) { | ||
| 3416 | addr = list_entry(pos, struct sctp_sockaddr_entry, list); | ||
| 3417 | if ((PF_INET == sk->sk_family) && | ||
| 3418 | (AF_INET6 == addr->a.sa.sa_family)) | ||
| 3419 | continue; | ||
| 3420 | memcpy(&temp, &addr->a, sizeof(temp)); | ||
| 3421 | sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), | ||
| 3422 | &temp); | ||
| 3423 | addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; | ||
| 3424 | if(space_left<addrlen) | ||
| 3425 | return -ENOMEM; | ||
| 3426 | temp.v4.sin_port = htons(port); | ||
| 3427 | if (copy_to_user(*to, &temp, addrlen)) { | ||
| 3428 | sctp_spin_unlock_irqrestore(&sctp_local_addr_lock, | ||
| 3429 | flags); | ||
| 3430 | return -EFAULT; | ||
| 3431 | } | ||
| 3432 | *to += addrlen; | ||
| 3433 | cnt ++; | ||
| 3434 | space_left -= addrlen; | ||
| 3435 | } | ||
| 3436 | sctp_spin_unlock_irqrestore(&sctp_local_addr_lock, flags); | ||
| 3437 | |||
| 3438 | return cnt; | ||
| 3439 | } | ||
| 3440 | |||
| 3441 | /* Old API for getting list of local addresses. Does not work for 32-bit | ||
| 3442 | * programs running on a 64-bit kernel | ||
| 3443 | */ | ||
| 3444 | static int sctp_getsockopt_local_addrs_old(struct sock *sk, int len, | ||
| 3445 | char __user *optval, int __user *optlen) | ||
| 3346 | { | 3446 | { |
| 3347 | struct sctp_bind_addr *bp; | 3447 | struct sctp_bind_addr *bp; |
| 3348 | struct sctp_association *asoc; | 3448 | struct sctp_association *asoc; |
| 3349 | struct list_head *pos; | 3449 | struct list_head *pos; |
| 3350 | int cnt = 0; | 3450 | int cnt = 0; |
| 3351 | struct sctp_getaddrs getaddrs; | 3451 | struct sctp_getaddrs_old getaddrs; |
| 3352 | struct sctp_sockaddr_entry *addr; | 3452 | struct sctp_sockaddr_entry *addr; |
| 3353 | void __user *to; | 3453 | void __user *to; |
| 3354 | union sctp_addr temp; | 3454 | union sctp_addr temp; |
| @@ -3357,10 +3457,10 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len, | |||
| 3357 | rwlock_t *addr_lock; | 3457 | rwlock_t *addr_lock; |
| 3358 | int err = 0; | 3458 | int err = 0; |
| 3359 | 3459 | ||
| 3360 | if (len != sizeof(struct sctp_getaddrs)) | 3460 | if (len != sizeof(struct sctp_getaddrs_old)) |
| 3361 | return -EINVAL; | 3461 | return -EINVAL; |
| 3362 | 3462 | ||
| 3363 | if (copy_from_user(&getaddrs, optval, sizeof(struct sctp_getaddrs))) | 3463 | if (copy_from_user(&getaddrs, optval, sizeof(struct sctp_getaddrs_old))) |
| 3364 | return -EFAULT; | 3464 | return -EFAULT; |
| 3365 | 3465 | ||
| 3366 | if (getaddrs.addr_num <= 0) return -EINVAL; | 3466 | if (getaddrs.addr_num <= 0) return -EINVAL; |
| @@ -3392,8 +3492,9 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len, | |||
| 3392 | addr = list_entry(bp->address_list.next, | 3492 | addr = list_entry(bp->address_list.next, |
| 3393 | struct sctp_sockaddr_entry, list); | 3493 | struct sctp_sockaddr_entry, list); |
| 3394 | if (sctp_is_any(&addr->a)) { | 3494 | if (sctp_is_any(&addr->a)) { |
| 3395 | cnt = sctp_copy_laddrs_to_user(sk, bp->port, | 3495 | cnt = sctp_copy_laddrs_to_user_old(sk, bp->port, |
| 3396 | getaddrs.addr_num, to); | 3496 | getaddrs.addr_num, |
| 3497 | to); | ||
| 3397 | if (cnt < 0) { | 3498 | if (cnt < 0) { |
| 3398 | err = cnt; | 3499 | err = cnt; |
| 3399 | goto unlock; | 3500 | goto unlock; |
| @@ -3419,7 +3520,7 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len, | |||
| 3419 | 3520 | ||
| 3420 | copy_getaddrs: | 3521 | copy_getaddrs: |
| 3421 | getaddrs.addr_num = cnt; | 3522 | getaddrs.addr_num = cnt; |
| 3422 | if (copy_to_user(optval, &getaddrs, sizeof(struct sctp_getaddrs))) | 3523 | if (copy_to_user(optval, &getaddrs, sizeof(struct sctp_getaddrs_old))) |
| 3423 | err = -EFAULT; | 3524 | err = -EFAULT; |
| 3424 | 3525 | ||
| 3425 | unlock: | 3526 | unlock: |
| @@ -3427,6 +3528,99 @@ unlock: | |||
| 3427 | return err; | 3528 | return err; |
| 3428 | } | 3529 | } |
| 3429 | 3530 | ||
| 3531 | static int sctp_getsockopt_local_addrs(struct sock *sk, int len, | ||
| 3532 | char __user *optval, int __user *optlen) | ||
| 3533 | { | ||
| 3534 | struct sctp_bind_addr *bp; | ||
| 3535 | struct sctp_association *asoc; | ||
| 3536 | struct list_head *pos; | ||
| 3537 | int cnt = 0; | ||
| 3538 | struct sctp_getaddrs getaddrs; | ||
| 3539 | struct sctp_sockaddr_entry *addr; | ||
| 3540 | void __user *to; | ||
| 3541 | union sctp_addr temp; | ||
| 3542 | struct sctp_sock *sp = sctp_sk(sk); | ||
| 3543 | int addrlen; | ||
| 3544 | rwlock_t *addr_lock; | ||
| 3545 | int err = 0; | ||
| 3546 | size_t space_left; | ||
| 3547 | int bytes_copied; | ||
| 3548 | |||
| 3549 | if (len <= sizeof(struct sctp_getaddrs)) | ||
| 3550 | return -EINVAL; | ||
| 3551 | |||
| 3552 | if (copy_from_user(&getaddrs, optval, sizeof(struct sctp_getaddrs))) | ||
| 3553 | return -EFAULT; | ||
| 3554 | |||
| 3555 | /* | ||
| 3556 | * For UDP-style sockets, id specifies the association to query. | ||
| 3557 | * If the id field is set to the value '0' then the locally bound | ||
| 3558 | * addresses are returned without regard to any particular | ||
| 3559 | * association. | ||
| 3560 | */ | ||
| 3561 | if (0 == getaddrs.assoc_id) { | ||
| 3562 | bp = &sctp_sk(sk)->ep->base.bind_addr; | ||
| 3563 | addr_lock = &sctp_sk(sk)->ep->base.addr_lock; | ||
| 3564 | } else { | ||
| 3565 | asoc = sctp_id2assoc(sk, getaddrs.assoc_id); | ||
| 3566 | if (!asoc) | ||
| 3567 | return -EINVAL; | ||
| 3568 | bp = &asoc->base.bind_addr; | ||
| 3569 | addr_lock = &asoc->base.addr_lock; | ||
| 3570 | } | ||
| 3571 | |||
| 3572 | to = optval + offsetof(struct sctp_getaddrs,addrs); | ||
| 3573 | space_left = len - sizeof(struct sctp_getaddrs) - | ||
| 3574 | offsetof(struct sctp_getaddrs,addrs); | ||
| 3575 | |||
| 3576 | sctp_read_lock(addr_lock); | ||
| 3577 | |||
| 3578 | /* If the endpoint is bound to 0.0.0.0 or ::0, get the valid | ||
| 3579 | * addresses from the global local address list. | ||
| 3580 | */ | ||
| 3581 | if (sctp_list_single_entry(&bp->address_list)) { | ||
| 3582 | addr = list_entry(bp->address_list.next, | ||
| 3583 | struct sctp_sockaddr_entry, list); | ||
| 3584 | if (sctp_is_any(&addr->a)) { | ||
| 3585 | cnt = sctp_copy_laddrs_to_user(sk, bp->port, | ||
| 3586 | &to, space_left); | ||
| 3587 | if (cnt < 0) { | ||
| 3588 | err = cnt; | ||
| 3589 | goto unlock; | ||
| 3590 | } | ||
| 3591 | goto copy_getaddrs; | ||
| 3592 | } | ||
| 3593 | } | ||
| 3594 | |||
| 3595 | list_for_each(pos, &bp->address_list) { | ||
| 3596 | addr = list_entry(pos, struct sctp_sockaddr_entry, list); | ||
| 3597 | memcpy(&temp, &addr->a, sizeof(temp)); | ||
| 3598 | sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp); | ||
| 3599 | addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; | ||
| 3600 | if(space_left < addrlen) | ||
| 3601 | return -ENOMEM; /*fixme: right error?*/ | ||
| 3602 | temp.v4.sin_port = htons(temp.v4.sin_port); | ||
| 3603 | if (copy_to_user(to, &temp, addrlen)) { | ||
| 3604 | err = -EFAULT; | ||
| 3605 | goto unlock; | ||
| 3606 | } | ||
| 3607 | to += addrlen; | ||
| 3608 | cnt ++; | ||
| 3609 | space_left -= addrlen; | ||
| 3610 | } | ||
| 3611 | |||
| 3612 | copy_getaddrs: | ||
| 3613 | if (put_user(cnt, &((struct sctp_getaddrs __user *)optval)->addr_num)) | ||
| 3614 | return -EFAULT; | ||
| 3615 | bytes_copied = ((char __user *)to) - optval; | ||
| 3616 | if (put_user(bytes_copied, optlen)) | ||
| 3617 | return -EFAULT; | ||
| 3618 | |||
| 3619 | unlock: | ||
| 3620 | sctp_read_unlock(addr_lock); | ||
| 3621 | return err; | ||
| 3622 | } | ||
| 3623 | |||
| 3430 | /* 7.1.10 Set Primary Address (SCTP_PRIMARY_ADDR) | 3624 | /* 7.1.10 Set Primary Address (SCTP_PRIMARY_ADDR) |
| 3431 | * | 3625 | * |
| 3432 | * Requests that the local SCTP stack use the enclosed peer address as | 3626 | * Requests that the local SCTP stack use the enclosed peer address as |
| @@ -3807,12 +4001,20 @@ SCTP_STATIC int sctp_getsockopt(struct sock *sk, int level, int optname, | |||
| 3807 | case SCTP_INITMSG: | 4001 | case SCTP_INITMSG: |
| 3808 | retval = sctp_getsockopt_initmsg(sk, len, optval, optlen); | 4002 | retval = sctp_getsockopt_initmsg(sk, len, optval, optlen); |
| 3809 | break; | 4003 | break; |
| 3810 | case SCTP_GET_PEER_ADDRS_NUM: | 4004 | case SCTP_GET_PEER_ADDRS_NUM_OLD: |
| 3811 | retval = sctp_getsockopt_peer_addrs_num(sk, len, optval, | 4005 | retval = sctp_getsockopt_peer_addrs_num_old(sk, len, optval, |
| 4006 | optlen); | ||
| 4007 | break; | ||
| 4008 | case SCTP_GET_LOCAL_ADDRS_NUM_OLD: | ||
| 4009 | retval = sctp_getsockopt_local_addrs_num_old(sk, len, optval, | ||
| 4010 | optlen); | ||
| 4011 | break; | ||
| 4012 | case SCTP_GET_PEER_ADDRS_OLD: | ||
| 4013 | retval = sctp_getsockopt_peer_addrs_old(sk, len, optval, | ||
| 3812 | optlen); | 4014 | optlen); |
| 3813 | break; | 4015 | break; |
| 3814 | case SCTP_GET_LOCAL_ADDRS_NUM: | 4016 | case SCTP_GET_LOCAL_ADDRS_OLD: |
| 3815 | retval = sctp_getsockopt_local_addrs_num(sk, len, optval, | 4017 | retval = sctp_getsockopt_local_addrs_old(sk, len, optval, |
| 3816 | optlen); | 4018 | optlen); |
| 3817 | break; | 4019 | break; |
| 3818 | case SCTP_GET_PEER_ADDRS: | 4020 | case SCTP_GET_PEER_ADDRS: |
diff --git a/net/sctp/ssnmap.c b/net/sctp/ssnmap.c index 25037daf3fa0..cbe2513d2822 100644 --- a/net/sctp/ssnmap.c +++ b/net/sctp/ssnmap.c | |||
| @@ -58,7 +58,7 @@ static inline size_t sctp_ssnmap_size(__u16 in, __u16 out) | |||
| 58 | * Allocate room to store at least 'len' contiguous TSNs. | 58 | * Allocate room to store at least 'len' contiguous TSNs. |
| 59 | */ | 59 | */ |
| 60 | struct sctp_ssnmap *sctp_ssnmap_new(__u16 in, __u16 out, | 60 | struct sctp_ssnmap *sctp_ssnmap_new(__u16 in, __u16 out, |
| 61 | unsigned int __nocast gfp) | 61 | gfp_t gfp) |
| 62 | { | 62 | { |
| 63 | struct sctp_ssnmap *retval; | 63 | struct sctp_ssnmap *retval; |
| 64 | int size; | 64 | int size; |
diff --git a/net/sctp/transport.c b/net/sctp/transport.c index d2f04ebe5081..6bc27200e6ca 100644 --- a/net/sctp/transport.c +++ b/net/sctp/transport.c | |||
| @@ -57,7 +57,7 @@ | |||
| 57 | /* Initialize a new transport from provided memory. */ | 57 | /* Initialize a new transport from provided memory. */ |
| 58 | static struct sctp_transport *sctp_transport_init(struct sctp_transport *peer, | 58 | static struct sctp_transport *sctp_transport_init(struct sctp_transport *peer, |
| 59 | const union sctp_addr *addr, | 59 | const union sctp_addr *addr, |
| 60 | unsigned int __nocast gfp) | 60 | gfp_t gfp) |
| 61 | { | 61 | { |
| 62 | /* Copy in the address. */ | 62 | /* Copy in the address. */ |
| 63 | peer->ipaddr = *addr; | 63 | peer->ipaddr = *addr; |
| @@ -122,7 +122,7 @@ static struct sctp_transport *sctp_transport_init(struct sctp_transport *peer, | |||
| 122 | 122 | ||
| 123 | /* Allocate and initialize a new transport. */ | 123 | /* Allocate and initialize a new transport. */ |
| 124 | struct sctp_transport *sctp_transport_new(const union sctp_addr *addr, | 124 | struct sctp_transport *sctp_transport_new(const union sctp_addr *addr, |
| 125 | unsigned int __nocast gfp) | 125 | gfp_t gfp) |
| 126 | { | 126 | { |
| 127 | struct sctp_transport *transport; | 127 | struct sctp_transport *transport; |
| 128 | 128 | ||
diff --git a/net/sctp/ulpevent.c b/net/sctp/ulpevent.c index 0abd5101107c..057e7fac3af0 100644 --- a/net/sctp/ulpevent.c +++ b/net/sctp/ulpevent.c | |||
| @@ -74,7 +74,7 @@ SCTP_STATIC void sctp_ulpevent_init(struct sctp_ulpevent *event, int msg_flags) | |||
| 74 | 74 | ||
| 75 | /* Create a new sctp_ulpevent. */ | 75 | /* Create a new sctp_ulpevent. */ |
| 76 | SCTP_STATIC struct sctp_ulpevent *sctp_ulpevent_new(int size, int msg_flags, | 76 | SCTP_STATIC struct sctp_ulpevent *sctp_ulpevent_new(int size, int msg_flags, |
| 77 | unsigned int __nocast gfp) | 77 | gfp_t gfp) |
| 78 | { | 78 | { |
| 79 | struct sctp_ulpevent *event; | 79 | struct sctp_ulpevent *event; |
| 80 | struct sk_buff *skb; | 80 | struct sk_buff *skb; |
| @@ -136,7 +136,7 @@ static inline void sctp_ulpevent_release_owner(struct sctp_ulpevent *event) | |||
| 136 | struct sctp_ulpevent *sctp_ulpevent_make_assoc_change( | 136 | struct sctp_ulpevent *sctp_ulpevent_make_assoc_change( |
| 137 | const struct sctp_association *asoc, | 137 | const struct sctp_association *asoc, |
| 138 | __u16 flags, __u16 state, __u16 error, __u16 outbound, | 138 | __u16 flags, __u16 state, __u16 error, __u16 outbound, |
| 139 | __u16 inbound, unsigned int __nocast gfp) | 139 | __u16 inbound, gfp_t gfp) |
| 140 | { | 140 | { |
| 141 | struct sctp_ulpevent *event; | 141 | struct sctp_ulpevent *event; |
| 142 | struct sctp_assoc_change *sac; | 142 | struct sctp_assoc_change *sac; |
| @@ -237,7 +237,7 @@ fail: | |||
| 237 | struct sctp_ulpevent *sctp_ulpevent_make_peer_addr_change( | 237 | struct sctp_ulpevent *sctp_ulpevent_make_peer_addr_change( |
| 238 | const struct sctp_association *asoc, | 238 | const struct sctp_association *asoc, |
| 239 | const struct sockaddr_storage *aaddr, | 239 | const struct sockaddr_storage *aaddr, |
| 240 | int flags, int state, int error, unsigned int __nocast gfp) | 240 | int flags, int state, int error, gfp_t gfp) |
| 241 | { | 241 | { |
| 242 | struct sctp_ulpevent *event; | 242 | struct sctp_ulpevent *event; |
| 243 | struct sctp_paddr_change *spc; | 243 | struct sctp_paddr_change *spc; |
| @@ -350,7 +350,7 @@ fail: | |||
| 350 | */ | 350 | */ |
| 351 | struct sctp_ulpevent *sctp_ulpevent_make_remote_error( | 351 | struct sctp_ulpevent *sctp_ulpevent_make_remote_error( |
| 352 | const struct sctp_association *asoc, struct sctp_chunk *chunk, | 352 | const struct sctp_association *asoc, struct sctp_chunk *chunk, |
| 353 | __u16 flags, unsigned int __nocast gfp) | 353 | __u16 flags, gfp_t gfp) |
| 354 | { | 354 | { |
| 355 | struct sctp_ulpevent *event; | 355 | struct sctp_ulpevent *event; |
| 356 | struct sctp_remote_error *sre; | 356 | struct sctp_remote_error *sre; |
| @@ -448,7 +448,7 @@ fail: | |||
| 448 | */ | 448 | */ |
| 449 | struct sctp_ulpevent *sctp_ulpevent_make_send_failed( | 449 | struct sctp_ulpevent *sctp_ulpevent_make_send_failed( |
| 450 | const struct sctp_association *asoc, struct sctp_chunk *chunk, | 450 | const struct sctp_association *asoc, struct sctp_chunk *chunk, |
| 451 | __u16 flags, __u32 error, unsigned int __nocast gfp) | 451 | __u16 flags, __u32 error, gfp_t gfp) |
| 452 | { | 452 | { |
| 453 | struct sctp_ulpevent *event; | 453 | struct sctp_ulpevent *event; |
| 454 | struct sctp_send_failed *ssf; | 454 | struct sctp_send_failed *ssf; |
| @@ -557,7 +557,7 @@ fail: | |||
| 557 | */ | 557 | */ |
| 558 | struct sctp_ulpevent *sctp_ulpevent_make_shutdown_event( | 558 | struct sctp_ulpevent *sctp_ulpevent_make_shutdown_event( |
| 559 | const struct sctp_association *asoc, | 559 | const struct sctp_association *asoc, |
| 560 | __u16 flags, unsigned int __nocast gfp) | 560 | __u16 flags, gfp_t gfp) |
| 561 | { | 561 | { |
| 562 | struct sctp_ulpevent *event; | 562 | struct sctp_ulpevent *event; |
| 563 | struct sctp_shutdown_event *sse; | 563 | struct sctp_shutdown_event *sse; |
| @@ -620,7 +620,7 @@ fail: | |||
| 620 | * 5.3.1.6 SCTP_ADAPTION_INDICATION | 620 | * 5.3.1.6 SCTP_ADAPTION_INDICATION |
| 621 | */ | 621 | */ |
| 622 | struct sctp_ulpevent *sctp_ulpevent_make_adaption_indication( | 622 | struct sctp_ulpevent *sctp_ulpevent_make_adaption_indication( |
| 623 | const struct sctp_association *asoc, unsigned int __nocast gfp) | 623 | const struct sctp_association *asoc, gfp_t gfp) |
| 624 | { | 624 | { |
| 625 | struct sctp_ulpevent *event; | 625 | struct sctp_ulpevent *event; |
| 626 | struct sctp_adaption_event *sai; | 626 | struct sctp_adaption_event *sai; |
| @@ -657,7 +657,7 @@ fail: | |||
| 657 | */ | 657 | */ |
| 658 | struct sctp_ulpevent *sctp_ulpevent_make_rcvmsg(struct sctp_association *asoc, | 658 | struct sctp_ulpevent *sctp_ulpevent_make_rcvmsg(struct sctp_association *asoc, |
| 659 | struct sctp_chunk *chunk, | 659 | struct sctp_chunk *chunk, |
| 660 | unsigned int __nocast gfp) | 660 | gfp_t gfp) |
| 661 | { | 661 | { |
| 662 | struct sctp_ulpevent *event = NULL; | 662 | struct sctp_ulpevent *event = NULL; |
| 663 | struct sk_buff *skb; | 663 | struct sk_buff *skb; |
| @@ -719,7 +719,7 @@ fail: | |||
| 719 | */ | 719 | */ |
| 720 | struct sctp_ulpevent *sctp_ulpevent_make_pdapi( | 720 | struct sctp_ulpevent *sctp_ulpevent_make_pdapi( |
| 721 | const struct sctp_association *asoc, __u32 indication, | 721 | const struct sctp_association *asoc, __u32 indication, |
| 722 | unsigned int __nocast gfp) | 722 | gfp_t gfp) |
| 723 | { | 723 | { |
| 724 | struct sctp_ulpevent *event; | 724 | struct sctp_ulpevent *event; |
| 725 | struct sctp_pdapi_event *pd; | 725 | struct sctp_pdapi_event *pd; |
diff --git a/net/sctp/ulpqueue.c b/net/sctp/ulpqueue.c index ec2c857eae7f..2080b2d28c98 100644 --- a/net/sctp/ulpqueue.c +++ b/net/sctp/ulpqueue.c | |||
| @@ -100,7 +100,7 @@ void sctp_ulpq_free(struct sctp_ulpq *ulpq) | |||
| 100 | 100 | ||
| 101 | /* Process an incoming DATA chunk. */ | 101 | /* Process an incoming DATA chunk. */ |
| 102 | int sctp_ulpq_tail_data(struct sctp_ulpq *ulpq, struct sctp_chunk *chunk, | 102 | int sctp_ulpq_tail_data(struct sctp_ulpq *ulpq, struct sctp_chunk *chunk, |
| 103 | unsigned int __nocast gfp) | 103 | gfp_t gfp) |
| 104 | { | 104 | { |
| 105 | struct sk_buff_head temp; | 105 | struct sk_buff_head temp; |
| 106 | sctp_data_chunk_t *hdr; | 106 | sctp_data_chunk_t *hdr; |
| @@ -792,7 +792,7 @@ static __u16 sctp_ulpq_renege_frags(struct sctp_ulpq *ulpq, __u16 needed) | |||
| 792 | /* Partial deliver the first message as there is pressure on rwnd. */ | 792 | /* Partial deliver the first message as there is pressure on rwnd. */ |
| 793 | void sctp_ulpq_partial_delivery(struct sctp_ulpq *ulpq, | 793 | void sctp_ulpq_partial_delivery(struct sctp_ulpq *ulpq, |
| 794 | struct sctp_chunk *chunk, | 794 | struct sctp_chunk *chunk, |
| 795 | unsigned int __nocast gfp) | 795 | gfp_t gfp) |
| 796 | { | 796 | { |
| 797 | struct sctp_ulpevent *event; | 797 | struct sctp_ulpevent *event; |
| 798 | struct sctp_association *asoc; | 798 | struct sctp_association *asoc; |
| @@ -816,7 +816,7 @@ void sctp_ulpq_partial_delivery(struct sctp_ulpq *ulpq, | |||
| 816 | 816 | ||
| 817 | /* Renege some packets to make room for an incoming chunk. */ | 817 | /* Renege some packets to make room for an incoming chunk. */ |
| 818 | void sctp_ulpq_renege(struct sctp_ulpq *ulpq, struct sctp_chunk *chunk, | 818 | void sctp_ulpq_renege(struct sctp_ulpq *ulpq, struct sctp_chunk *chunk, |
| 819 | unsigned int __nocast gfp) | 819 | gfp_t gfp) |
| 820 | { | 820 | { |
| 821 | struct sctp_association *asoc; | 821 | struct sctp_association *asoc; |
| 822 | __u16 needed, freed; | 822 | __u16 needed, freed; |
| @@ -855,7 +855,7 @@ void sctp_ulpq_renege(struct sctp_ulpq *ulpq, struct sctp_chunk *chunk, | |||
| 855 | /* Notify the application if an association is aborted and in | 855 | /* Notify the application if an association is aborted and in |
| 856 | * partial delivery mode. Send up any pending received messages. | 856 | * partial delivery mode. Send up any pending received messages. |
| 857 | */ | 857 | */ |
| 858 | void sctp_ulpq_abort_pd(struct sctp_ulpq *ulpq, unsigned int __nocast gfp) | 858 | void sctp_ulpq_abort_pd(struct sctp_ulpq *ulpq, gfp_t gfp) |
| 859 | { | 859 | { |
| 860 | struct sctp_ulpevent *ev = NULL; | 860 | struct sctp_ulpevent *ev = NULL; |
| 861 | struct sock *sk; | 861 | struct sock *sk; |
