bind_addr.c (cbecf716ca618fd44feda6bd9a64a8179d031fc5) bind_addr.c (0c5dc070ff3d6246d22ddd931f23a6266249e3db)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/* SCTP kernel implementation
3 * (C) Copyright IBM Corp. 2001, 2003
4 * Copyright (c) Cisco 1999,2000
5 * Copyright (c) Motorola 1999,2000,2001
6 * Copyright (c) La Monte H.P. Yarroll 2001
7 *
8 * This file is part of the SCTP kernel implementation.

--- 256 unchanged lines hidden (view full) ---

265 struct sctp_af *af;
266
267 /* Convert the raw address to standard address format */
268 while (addrs_len) {
269 param = (struct sctp_paramhdr *)raw_addr_list;
270 rawaddr = (union sctp_addr_param *)raw_addr_list;
271
272 af = sctp_get_af_specific(param_type2af(param->type));
1// SPDX-License-Identifier: GPL-2.0-or-later
2/* SCTP kernel implementation
3 * (C) Copyright IBM Corp. 2001, 2003
4 * Copyright (c) Cisco 1999,2000
5 * Copyright (c) Motorola 1999,2000,2001
6 * Copyright (c) La Monte H.P. Yarroll 2001
7 *
8 * This file is part of the SCTP kernel implementation.

--- 256 unchanged lines hidden (view full) ---

265 struct sctp_af *af;
266
267 /* Convert the raw address to standard address format */
268 while (addrs_len) {
269 param = (struct sctp_paramhdr *)raw_addr_list;
270 rawaddr = (union sctp_addr_param *)raw_addr_list;
271
272 af = sctp_get_af_specific(param_type2af(param->type));
273 if (unlikely(!af)) {
273 if (unlikely(!af) ||
274 !af->from_addr_param(&addr, rawaddr, htons(port), 0)) {
274 retval = -EINVAL;
275 retval = -EINVAL;
275 sctp_bind_addr_clean(bp);
276 break;
276 goto out_err;
277 }
278
277 }
278
279 af->from_addr_param(&addr, rawaddr, htons(port), 0);
280 if (sctp_bind_addr_state(bp, &addr) != -1)
281 goto next;
282 retval = sctp_add_bind_addr(bp, &addr, sizeof(addr),
283 SCTP_ADDR_SRC, gfp);
279 if (sctp_bind_addr_state(bp, &addr) != -1)
280 goto next;
281 retval = sctp_add_bind_addr(bp, &addr, sizeof(addr),
282 SCTP_ADDR_SRC, gfp);
284 if (retval) {
283 if (retval)
285 /* Can't finish building the list, clean up. */
284 /* Can't finish building the list, clean up. */
286 sctp_bind_addr_clean(bp);
287 break;
288 }
285 goto out_err;
289
290next:
291 len = ntohs(param->length);
292 addrs_len -= len;
293 raw_addr_list += len;
294 }
295
296 return retval;
286
287next:
288 len = ntohs(param->length);
289 addrs_len -= len;
290 raw_addr_list += len;
291 }
292
293 return retval;
294
295out_err:
296 if (retval)
297 sctp_bind_addr_clean(bp);
298
299 return retval;
297}
298
299/********************************************************************
300 * 2nd Level Abstractions
301 ********************************************************************/
302
303/* Does this contain a specified address? Allow wildcarding. */
304int sctp_bind_addr_match(struct sctp_bind_addr *bp,

--- 262 unchanged lines hidden ---
300}
301
302/********************************************************************
303 * 2nd Level Abstractions
304 ********************************************************************/
305
306/* Does this contain a specified address? Allow wildcarding. */
307int sctp_bind_addr_match(struct sctp_bind_addr *bp,

--- 262 unchanged lines hidden ---