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 --- |