Re: net/sctp/socket.c:2681:6-11: ERROR: invalid reference to the index variable of the iterator on line 2661 (fwd)
From: Xin Long
Date: Thu Aug 30 2018 - 03:28:05 EST
On Wed, Aug 29, 2018 at 11:32 PM Julia Lawall <julia.lawall@xxxxxxx> wrote:
>
> Hello,
>
> Are the ifs starting on lines 2655 and 2680 mutually exclusive? If so,
> perhaps add an else. If not, and if the trans on line 2681 can come from
> the trans initialized by the loop on line 2661, then there is a problem.
You're right, I will send a fix to add a local trans for
transport_addr_list traversing.
Thanks.
>
> julia
>
> ---------- Forwarded message ----------
> Date: Wed, 29 Aug 2018 22:02:39 +0800
> From: kbuild test robot <lkp@xxxxxxxxx>
> To: kbuild@xxxxxx
> Cc: Julia Lawall <julia.lawall@xxxxxxx>
> Subject: net/sctp/socket.c:2681:6-11: ERROR: invalid reference to the index
> variable of the iterator on line 2661
>
> CC: kbuild-all@xxxxxx
> CC: linux-kernel@xxxxxxxxxxxxxxx
> TO: Xin Long <lucien.xin@xxxxxxxxx>
>
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: 3f16503b7d2274ac8cbab11163047ac0b4c66cfe
> commit: 0b0dce7a36fb9f1a9dd8245ea82d3a268c6943fe sctp: add spp_ipv6_flowlabel and spp_dscp for sctp_paddrparams
> date: 8 weeks ago
> :::::: branch date: 15 hours ago
> :::::: commit date: 8 weeks ago
>
> >> net/sctp/socket.c:2681:6-11: ERROR: invalid reference to the index variable of the iterator on line 2661
>
> # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0b0dce7a36fb9f1a9dd8245ea82d3a268c6943fe
> git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
> git remote update linus
> git checkout 0b0dce7a36fb9f1a9dd8245ea82d3a268c6943fe
> vim +2681 net/sctp/socket.c
>
> ^1da177e4 Linus Torvalds 2005-04-16 2378
> ^1da177e4 Linus Torvalds 2005-04-16 2379 /* 7.1.13 Peer Address Parameters (SCTP_PEER_ADDR_PARAMS)
> ^1da177e4 Linus Torvalds 2005-04-16 2380 *
> ^1da177e4 Linus Torvalds 2005-04-16 2381 * Applications can enable or disable heartbeats for any peer address of
> ^1da177e4 Linus Torvalds 2005-04-16 2382 * an association, modify an address's heartbeat interval, force a
> ^1da177e4 Linus Torvalds 2005-04-16 2383 * heartbeat to be sent immediately, and adjust the address's maximum
> ^1da177e4 Linus Torvalds 2005-04-16 2384 * number of retransmissions sent before an address is considered
> ^1da177e4 Linus Torvalds 2005-04-16 2385 * unreachable. The following structure is used to access and modify an
> ^1da177e4 Linus Torvalds 2005-04-16 2386 * address's parameters:
> ^1da177e4 Linus Torvalds 2005-04-16 2387 *
> ^1da177e4 Linus Torvalds 2005-04-16 2388 * struct sctp_paddrparams {
> ^1da177e4 Linus Torvalds 2005-04-16 2389 * sctp_assoc_t spp_assoc_id;
> ^1da177e4 Linus Torvalds 2005-04-16 2390 * struct sockaddr_storage spp_address;
> ^1da177e4 Linus Torvalds 2005-04-16 2391 * uint32_t spp_hbinterval;
> ^1da177e4 Linus Torvalds 2005-04-16 2392 * uint16_t spp_pathmaxrxt;
> 52ccb8e90 Frank Filz 2005-12-22 2393 * uint32_t spp_pathmtu;
> 52ccb8e90 Frank Filz 2005-12-22 2394 * uint32_t spp_sackdelay;
> 52ccb8e90 Frank Filz 2005-12-22 2395 * uint32_t spp_flags;
> 0b0dce7a3 Xin Long 2018-07-02 2396 * uint32_t spp_ipv6_flowlabel;
> 0b0dce7a3 Xin Long 2018-07-02 2397 * uint8_t spp_dscp;
> ^1da177e4 Linus Torvalds 2005-04-16 2398 * };
> ^1da177e4 Linus Torvalds 2005-04-16 2399 *
> 52ccb8e90 Frank Filz 2005-12-22 2400 * spp_assoc_id - (one-to-many style socket) This is filled in the
> 52ccb8e90 Frank Filz 2005-12-22 2401 * application, and identifies the association for
> 52ccb8e90 Frank Filz 2005-12-22 2402 * this query.
> ^1da177e4 Linus Torvalds 2005-04-16 2403 * spp_address - This specifies which address is of interest.
> ^1da177e4 Linus Torvalds 2005-04-16 2404 * spp_hbinterval - This contains the value of the heartbeat interval,
> 52ccb8e90 Frank Filz 2005-12-22 2405 * in milliseconds. If a value of zero
> 52ccb8e90 Frank Filz 2005-12-22 2406 * is present in this field then no changes are to
> 52ccb8e90 Frank Filz 2005-12-22 2407 * be made to this parameter.
> ^1da177e4 Linus Torvalds 2005-04-16 2408 * spp_pathmaxrxt - This contains the maximum number of
> ^1da177e4 Linus Torvalds 2005-04-16 2409 * retransmissions before this address shall be
> 52ccb8e90 Frank Filz 2005-12-22 2410 * considered unreachable. If a value of zero
> 52ccb8e90 Frank Filz 2005-12-22 2411 * is present in this field then no changes are to
> 52ccb8e90 Frank Filz 2005-12-22 2412 * be made to this parameter.
> 52ccb8e90 Frank Filz 2005-12-22 2413 * spp_pathmtu - When Path MTU discovery is disabled the value
> 52ccb8e90 Frank Filz 2005-12-22 2414 * specified here will be the "fixed" path mtu.
> 52ccb8e90 Frank Filz 2005-12-22 2415 * Note that if the spp_address field is empty
> 52ccb8e90 Frank Filz 2005-12-22 2416 * then all associations on this address will
> 52ccb8e90 Frank Filz 2005-12-22 2417 * have this fixed path mtu set upon them.
> 52ccb8e90 Frank Filz 2005-12-22 2418 *
> 52ccb8e90 Frank Filz 2005-12-22 2419 * spp_sackdelay - When delayed sack is enabled, this value specifies
> 52ccb8e90 Frank Filz 2005-12-22 2420 * the number of milliseconds that sacks will be delayed
> 52ccb8e90 Frank Filz 2005-12-22 2421 * for. This value will apply to all addresses of an
> 52ccb8e90 Frank Filz 2005-12-22 2422 * association if the spp_address field is empty. Note
> 52ccb8e90 Frank Filz 2005-12-22 2423 * also, that if delayed sack is enabled and this
> 52ccb8e90 Frank Filz 2005-12-22 2424 * value is set to 0, no change is made to the last
> 52ccb8e90 Frank Filz 2005-12-22 2425 * recorded delayed sack timer value.
> 52ccb8e90 Frank Filz 2005-12-22 2426 *
> 52ccb8e90 Frank Filz 2005-12-22 2427 * spp_flags - These flags are used to control various features
> 52ccb8e90 Frank Filz 2005-12-22 2428 * on an association. The flag field may contain
> 52ccb8e90 Frank Filz 2005-12-22 2429 * zero or more of the following options.
> 52ccb8e90 Frank Filz 2005-12-22 2430 *
> 52ccb8e90 Frank Filz 2005-12-22 2431 * SPP_HB_ENABLE - Enable heartbeats on the
> 52ccb8e90 Frank Filz 2005-12-22 2432 * specified address. Note that if the address
> 52ccb8e90 Frank Filz 2005-12-22 2433 * field is empty all addresses for the association
> 52ccb8e90 Frank Filz 2005-12-22 2434 * have heartbeats enabled upon them.
> 52ccb8e90 Frank Filz 2005-12-22 2435 *
> 52ccb8e90 Frank Filz 2005-12-22 2436 * SPP_HB_DISABLE - Disable heartbeats on the
> 52ccb8e90 Frank Filz 2005-12-22 2437 * speicifed address. Note that if the address
> 52ccb8e90 Frank Filz 2005-12-22 2438 * field is empty all addresses for the association
> 52ccb8e90 Frank Filz 2005-12-22 2439 * will have their heartbeats disabled. Note also
> 52ccb8e90 Frank Filz 2005-12-22 2440 * that SPP_HB_ENABLE and SPP_HB_DISABLE are
> 52ccb8e90 Frank Filz 2005-12-22 2441 * mutually exclusive, only one of these two should
> 52ccb8e90 Frank Filz 2005-12-22 2442 * be specified. Enabling both fields will have
> 52ccb8e90 Frank Filz 2005-12-22 2443 * undetermined results.
> 52ccb8e90 Frank Filz 2005-12-22 2444 *
> 52ccb8e90 Frank Filz 2005-12-22 2445 * SPP_HB_DEMAND - Request a user initiated heartbeat
> 52ccb8e90 Frank Filz 2005-12-22 2446 * to be made immediately.
> 52ccb8e90 Frank Filz 2005-12-22 2447 *
> bdf3092af Vlad Yasevich 2007-03-23 2448 * SPP_HB_TIME_IS_ZERO - Specify's that the time for
> bdf3092af Vlad Yasevich 2007-03-23 2449 * heartbeat delayis to be set to the value of 0
> bdf3092af Vlad Yasevich 2007-03-23 2450 * milliseconds.
> bdf3092af Vlad Yasevich 2007-03-23 2451 *
> 52ccb8e90 Frank Filz 2005-12-22 2452 * SPP_PMTUD_ENABLE - This field will enable PMTU
> 52ccb8e90 Frank Filz 2005-12-22 2453 * discovery upon the specified address. Note that
> 52ccb8e90 Frank Filz 2005-12-22 2454 * if the address feild is empty then all addresses
> 52ccb8e90 Frank Filz 2005-12-22 2455 * on the association are effected.
> 52ccb8e90 Frank Filz 2005-12-22 2456 *
> 52ccb8e90 Frank Filz 2005-12-22 2457 * SPP_PMTUD_DISABLE - This field will disable PMTU
> 52ccb8e90 Frank Filz 2005-12-22 2458 * discovery upon the specified address. Note that
> 52ccb8e90 Frank Filz 2005-12-22 2459 * if the address feild is empty then all addresses
> 52ccb8e90 Frank Filz 2005-12-22 2460 * on the association are effected. Not also that
> 52ccb8e90 Frank Filz 2005-12-22 2461 * SPP_PMTUD_ENABLE and SPP_PMTUD_DISABLE are mutually
> 52ccb8e90 Frank Filz 2005-12-22 2462 * exclusive. Enabling both will have undetermined
> 52ccb8e90 Frank Filz 2005-12-22 2463 * results.
> 52ccb8e90 Frank Filz 2005-12-22 2464 *
> 52ccb8e90 Frank Filz 2005-12-22 2465 * SPP_SACKDELAY_ENABLE - Setting this flag turns
> 52ccb8e90 Frank Filz 2005-12-22 2466 * on delayed sack. The time specified in spp_sackdelay
> 52ccb8e90 Frank Filz 2005-12-22 2467 * is used to specify the sack delay for this address. Note
> 52ccb8e90 Frank Filz 2005-12-22 2468 * that if spp_address is empty then all addresses will
> 52ccb8e90 Frank Filz 2005-12-22 2469 * enable delayed sack and take on the sack delay
> 52ccb8e90 Frank Filz 2005-12-22 2470 * value specified in spp_sackdelay.
> 52ccb8e90 Frank Filz 2005-12-22 2471 * SPP_SACKDELAY_DISABLE - Setting this flag turns
> 52ccb8e90 Frank Filz 2005-12-22 2472 * off delayed sack. If the spp_address field is blank then
> 52ccb8e90 Frank Filz 2005-12-22 2473 * delayed sack is disabled for the entire association. Note
> 52ccb8e90 Frank Filz 2005-12-22 2474 * also that this field is mutually exclusive to
> 52ccb8e90 Frank Filz 2005-12-22 2475 * SPP_SACKDELAY_ENABLE, setting both will have undefined
> 52ccb8e90 Frank Filz 2005-12-22 2476 * results.
> 0b0dce7a3 Xin Long 2018-07-02 2477 *
> 0b0dce7a3 Xin Long 2018-07-02 2478 * SPP_IPV6_FLOWLABEL: Setting this flag enables the
> 0b0dce7a3 Xin Long 2018-07-02 2479 * setting of the IPV6 flow label value. The value is
> 0b0dce7a3 Xin Long 2018-07-02 2480 * contained in the spp_ipv6_flowlabel field.
> 0b0dce7a3 Xin Long 2018-07-02 2481 * Upon retrieval, this flag will be set to indicate that
> 0b0dce7a3 Xin Long 2018-07-02 2482 * the spp_ipv6_flowlabel field has a valid value returned.
> 0b0dce7a3 Xin Long 2018-07-02 2483 * If a specific destination address is set (in the
> 0b0dce7a3 Xin Long 2018-07-02 2484 * spp_address field), then the value returned is that of
> 0b0dce7a3 Xin Long 2018-07-02 2485 * the address. If just an association is specified (and
> 0b0dce7a3 Xin Long 2018-07-02 2486 * no address), then the association's default flow label
> 0b0dce7a3 Xin Long 2018-07-02 2487 * is returned. If neither an association nor a destination
> 0b0dce7a3 Xin Long 2018-07-02 2488 * is specified, then the socket's default flow label is
> 0b0dce7a3 Xin Long 2018-07-02 2489 * returned. For non-IPv6 sockets, this flag will be left
> 0b0dce7a3 Xin Long 2018-07-02 2490 * cleared.
> 0b0dce7a3 Xin Long 2018-07-02 2491 *
> 0b0dce7a3 Xin Long 2018-07-02 2492 * SPP_DSCP: Setting this flag enables the setting of the
> 0b0dce7a3 Xin Long 2018-07-02 2493 * Differentiated Services Code Point (DSCP) value
> 0b0dce7a3 Xin Long 2018-07-02 2494 * associated with either the association or a specific
> 0b0dce7a3 Xin Long 2018-07-02 2495 * address. The value is obtained in the spp_dscp field.
> 0b0dce7a3 Xin Long 2018-07-02 2496 * Upon retrieval, this flag will be set to indicate that
> 0b0dce7a3 Xin Long 2018-07-02 2497 * the spp_dscp field has a valid value returned. If a
> 0b0dce7a3 Xin Long 2018-07-02 2498 * specific destination address is set when called (in the
> 0b0dce7a3 Xin Long 2018-07-02 2499 * spp_address field), then that specific destination
> 0b0dce7a3 Xin Long 2018-07-02 2500 * address's DSCP value is returned. If just an association
> 0b0dce7a3 Xin Long 2018-07-02 2501 * is specified, then the association's default DSCP is
> 0b0dce7a3 Xin Long 2018-07-02 2502 * returned. If neither an association nor a destination is
> 0b0dce7a3 Xin Long 2018-07-02 2503 * specified, then the socket's default DSCP is returned.
> 0b0dce7a3 Xin Long 2018-07-02 2504 *
> 0b0dce7a3 Xin Long 2018-07-02 2505 * spp_ipv6_flowlabel
> 0b0dce7a3 Xin Long 2018-07-02 2506 * - This field is used in conjunction with the
> 0b0dce7a3 Xin Long 2018-07-02 2507 * SPP_IPV6_FLOWLABEL flag and contains the IPv6 flow label.
> 0b0dce7a3 Xin Long 2018-07-02 2508 * The 20 least significant bits are used for the flow
> 0b0dce7a3 Xin Long 2018-07-02 2509 * label. This setting has precedence over any IPv6-layer
> 0b0dce7a3 Xin Long 2018-07-02 2510 * setting.
> 0b0dce7a3 Xin Long 2018-07-02 2511 *
> 0b0dce7a3 Xin Long 2018-07-02 2512 * spp_dscp - This field is used in conjunction with the SPP_DSCP flag
> 0b0dce7a3 Xin Long 2018-07-02 2513 * and contains the DSCP. The 6 most significant bits are
> 0b0dce7a3 Xin Long 2018-07-02 2514 * used for the DSCP. This setting has precedence over any
> 0b0dce7a3 Xin Long 2018-07-02 2515 * IPv4- or IPv6- layer setting.
> 52ccb8e90 Frank Filz 2005-12-22 2516 */
> 161643660 Adrian Bunk 2006-09-18 2517 static int sctp_apply_peer_addr_params(struct sctp_paddrparams *params,
> 52ccb8e90 Frank Filz 2005-12-22 2518 struct sctp_transport *trans,
> 52ccb8e90 Frank Filz 2005-12-22 2519 struct sctp_association *asoc,
> 52ccb8e90 Frank Filz 2005-12-22 2520 struct sctp_sock *sp,
> 52ccb8e90 Frank Filz 2005-12-22 2521 int hb_change,
> 52ccb8e90 Frank Filz 2005-12-22 2522 int pmtud_change,
> 52ccb8e90 Frank Filz 2005-12-22 2523 int sackdelay_change)
> 52ccb8e90 Frank Filz 2005-12-22 2524 {
> 52ccb8e90 Frank Filz 2005-12-22 2525 int error;
> 52ccb8e90 Frank Filz 2005-12-22 2526
> 52ccb8e90 Frank Filz 2005-12-22 2527 if (params->spp_flags & SPP_HB_DEMAND && trans) {
> 55e26eb95 Eric W. Biederman 2012-08-07 2528 struct net *net = sock_net(trans->asoc->base.sk);
> 55e26eb95 Eric W. Biederman 2012-08-07 2529
> 55e26eb95 Eric W. Biederman 2012-08-07 2530 error = sctp_primitive_REQUESTHEARTBEAT(net, trans->asoc, trans);
> 52ccb8e90 Frank Filz 2005-12-22 2531 if (error)
> 52ccb8e90 Frank Filz 2005-12-22 2532 return error;
> 52ccb8e90 Frank Filz 2005-12-22 2533 }
> 52ccb8e90 Frank Filz 2005-12-22 2534
> bdf3092af Vlad Yasevich 2007-03-23 2535 /* Note that unless the spp_flag is set to SPP_HB_ENABLE the value of
> bdf3092af Vlad Yasevich 2007-03-23 2536 * this field is ignored. Note also that a value of zero indicates
> bdf3092af Vlad Yasevich 2007-03-23 2537 * the current setting should be left unchanged.
> bdf3092af Vlad Yasevich 2007-03-23 2538 */
> bdf3092af Vlad Yasevich 2007-03-23 2539 if (params->spp_flags & SPP_HB_ENABLE) {
> bdf3092af Vlad Yasevich 2007-03-23 2540
> bdf3092af Vlad Yasevich 2007-03-23 2541 /* Re-zero the interval if the SPP_HB_TIME_IS_ZERO is
> bdf3092af Vlad Yasevich 2007-03-23 2542 * set. This lets us use 0 value when this flag
> bdf3092af Vlad Yasevich 2007-03-23 2543 * is set.
> bdf3092af Vlad Yasevich 2007-03-23 2544 */
> bdf3092af Vlad Yasevich 2007-03-23 2545 if (params->spp_flags & SPP_HB_TIME_IS_ZERO)
> bdf3092af Vlad Yasevich 2007-03-23 2546 params->spp_hbinterval = 0;
> bdf3092af Vlad Yasevich 2007-03-23 2547
> bdf3092af Vlad Yasevich 2007-03-23 2548 if (params->spp_hbinterval ||
> bdf3092af Vlad Yasevich 2007-03-23 2549 (params->spp_flags & SPP_HB_TIME_IS_ZERO)) {
> 52ccb8e90 Frank Filz 2005-12-22 2550 if (trans) {
> bdf3092af Vlad Yasevich 2007-03-23 2551 trans->hbinterval =
> bdf3092af Vlad Yasevich 2007-03-23 2552 msecs_to_jiffies(params->spp_hbinterval);
> 52ccb8e90 Frank Filz 2005-12-22 2553 } else if (asoc) {
> bdf3092af Vlad Yasevich 2007-03-23 2554 asoc->hbinterval =
> bdf3092af Vlad Yasevich 2007-03-23 2555 msecs_to_jiffies(params->spp_hbinterval);
> 52ccb8e90 Frank Filz 2005-12-22 2556 } else {
> 52ccb8e90 Frank Filz 2005-12-22 2557 sp->hbinterval = params->spp_hbinterval;
> 52ccb8e90 Frank Filz 2005-12-22 2558 }
> 52ccb8e90 Frank Filz 2005-12-22 2559 }
> bdf3092af Vlad Yasevich 2007-03-23 2560 }
> 52ccb8e90 Frank Filz 2005-12-22 2561
> 52ccb8e90 Frank Filz 2005-12-22 2562 if (hb_change) {
> 52ccb8e90 Frank Filz 2005-12-22 2563 if (trans) {
> 52ccb8e90 Frank Filz 2005-12-22 2564 trans->param_flags =
> 52ccb8e90 Frank Filz 2005-12-22 2565 (trans->param_flags & ~SPP_HB) | hb_change;
> 52ccb8e90 Frank Filz 2005-12-22 2566 } else if (asoc) {
> 52ccb8e90 Frank Filz 2005-12-22 2567 asoc->param_flags =
> 52ccb8e90 Frank Filz 2005-12-22 2568 (asoc->param_flags & ~SPP_HB) | hb_change;
> 52ccb8e90 Frank Filz 2005-12-22 2569 } else {
> 52ccb8e90 Frank Filz 2005-12-22 2570 sp->param_flags =
> 52ccb8e90 Frank Filz 2005-12-22 2571 (sp->param_flags & ~SPP_HB) | hb_change;
> 52ccb8e90 Frank Filz 2005-12-22 2572 }
> 52ccb8e90 Frank Filz 2005-12-22 2573 }
> 52ccb8e90 Frank Filz 2005-12-22 2574
> bdf3092af Vlad Yasevich 2007-03-23 2575 /* When Path MTU discovery is disabled the value specified here will
> bdf3092af Vlad Yasevich 2007-03-23 2576 * be the "fixed" path mtu (i.e. the value of the spp_flags field must
> bdf3092af Vlad Yasevich 2007-03-23 2577 * include the flag SPP_PMTUD_DISABLE for this field to have any
> bdf3092af Vlad Yasevich 2007-03-23 2578 * effect).
> bdf3092af Vlad Yasevich 2007-03-23 2579 */
> bdf3092af Vlad Yasevich 2007-03-23 2580 if ((params->spp_flags & SPP_PMTUD_DISABLE) && params->spp_pathmtu) {
> 52ccb8e90 Frank Filz 2005-12-22 2581 if (trans) {
> 52ccb8e90 Frank Filz 2005-12-22 2582 trans->pathmtu = params->spp_pathmtu;
> 3ebfdf082 Xin Long 2017-04-04 2583 sctp_assoc_sync_pmtu(asoc);
> 52ccb8e90 Frank Filz 2005-12-22 2584 } else if (asoc) {
> c4b2893da Marcelo Ricardo Leitner 2018-04-26 2585 sctp_assoc_set_pmtu(asoc, params->spp_pathmtu);
> 52ccb8e90 Frank Filz 2005-12-22 2586 } else {
> 52ccb8e90 Frank Filz 2005-12-22 2587 sp->pathmtu = params->spp_pathmtu;
> 52ccb8e90 Frank Filz 2005-12-22 2588 }
> 52ccb8e90 Frank Filz 2005-12-22 2589 }
> 52ccb8e90 Frank Filz 2005-12-22 2590
> 52ccb8e90 Frank Filz 2005-12-22 2591 if (pmtud_change) {
> 52ccb8e90 Frank Filz 2005-12-22 2592 if (trans) {
> 52ccb8e90 Frank Filz 2005-12-22 2593 int update = (trans->param_flags & SPP_PMTUD_DISABLE) &&
> 52ccb8e90 Frank Filz 2005-12-22 2594 (params->spp_flags & SPP_PMTUD_ENABLE);
> 52ccb8e90 Frank Filz 2005-12-22 2595 trans->param_flags =
> 52ccb8e90 Frank Filz 2005-12-22 2596 (trans->param_flags & ~SPP_PMTUD) | pmtud_change;
> 52ccb8e90 Frank Filz 2005-12-22 2597 if (update) {
> 9914ae3ca Vlad Yasevich 2011-04-26 2598 sctp_transport_pmtu(trans, sctp_opt2sk(sp));
> 3ebfdf082 Xin Long 2017-04-04 2599 sctp_assoc_sync_pmtu(asoc);
> 52ccb8e90 Frank Filz 2005-12-22 2600 }
> 52ccb8e90 Frank Filz 2005-12-22 2601 } else if (asoc) {
> 52ccb8e90 Frank Filz 2005-12-22 2602 asoc->param_flags =
> 52ccb8e90 Frank Filz 2005-12-22 2603 (asoc->param_flags & ~SPP_PMTUD) | pmtud_change;
> 52ccb8e90 Frank Filz 2005-12-22 2604 } else {
> 52ccb8e90 Frank Filz 2005-12-22 2605 sp->param_flags =
> 52ccb8e90 Frank Filz 2005-12-22 2606 (sp->param_flags & ~SPP_PMTUD) | pmtud_change;
> 52ccb8e90 Frank Filz 2005-12-22 2607 }
> 52ccb8e90 Frank Filz 2005-12-22 2608 }
> 52ccb8e90 Frank Filz 2005-12-22 2609
> bdf3092af Vlad Yasevich 2007-03-23 2610 /* Note that unless the spp_flag is set to SPP_SACKDELAY_ENABLE the
> bdf3092af Vlad Yasevich 2007-03-23 2611 * value of this field is ignored. Note also that a value of zero
> bdf3092af Vlad Yasevich 2007-03-23 2612 * indicates the current setting should be left unchanged.
> bdf3092af Vlad Yasevich 2007-03-23 2613 */
> bdf3092af Vlad Yasevich 2007-03-23 2614 if ((params->spp_flags & SPP_SACKDELAY_ENABLE) && params->spp_sackdelay) {
> 52ccb8e90 Frank Filz 2005-12-22 2615 if (trans) {
> 52ccb8e90 Frank Filz 2005-12-22 2616 trans->sackdelay =
> 52ccb8e90 Frank Filz 2005-12-22 2617 msecs_to_jiffies(params->spp_sackdelay);
> 52ccb8e90 Frank Filz 2005-12-22 2618 } else if (asoc) {
> 52ccb8e90 Frank Filz 2005-12-22 2619 asoc->sackdelay =
> 52ccb8e90 Frank Filz 2005-12-22 2620 msecs_to_jiffies(params->spp_sackdelay);
> 52ccb8e90 Frank Filz 2005-12-22 2621 } else {
> 52ccb8e90 Frank Filz 2005-12-22 2622 sp->sackdelay = params->spp_sackdelay;
> 52ccb8e90 Frank Filz 2005-12-22 2623 }
> 52ccb8e90 Frank Filz 2005-12-22 2624 }
> 52ccb8e90 Frank Filz 2005-12-22 2625
> 52ccb8e90 Frank Filz 2005-12-22 2626 if (sackdelay_change) {
> 52ccb8e90 Frank Filz 2005-12-22 2627 if (trans) {
> 52ccb8e90 Frank Filz 2005-12-22 2628 trans->param_flags =
> 52ccb8e90 Frank Filz 2005-12-22 2629 (trans->param_flags & ~SPP_SACKDELAY) |
> 52ccb8e90 Frank Filz 2005-12-22 2630 sackdelay_change;
> 52ccb8e90 Frank Filz 2005-12-22 2631 } else if (asoc) {
> 52ccb8e90 Frank Filz 2005-12-22 2632 asoc->param_flags =
> 52ccb8e90 Frank Filz 2005-12-22 2633 (asoc->param_flags & ~SPP_SACKDELAY) |
> 52ccb8e90 Frank Filz 2005-12-22 2634 sackdelay_change;
> 52ccb8e90 Frank Filz 2005-12-22 2635 } else {
> 52ccb8e90 Frank Filz 2005-12-22 2636 sp->param_flags =
> 52ccb8e90 Frank Filz 2005-12-22 2637 (sp->param_flags & ~SPP_SACKDELAY) |
> 52ccb8e90 Frank Filz 2005-12-22 2638 sackdelay_change;
> 52ccb8e90 Frank Filz 2005-12-22 2639 }
> 52ccb8e90 Frank Filz 2005-12-22 2640 }
> 52ccb8e90 Frank Filz 2005-12-22 2641
> 37051f738 Andrei Pelinescu-Onciul 2009-11-23 2642 /* Note that a value of zero indicates the current setting should be
> 37051f738 Andrei Pelinescu-Onciul 2009-11-23 2643 left unchanged.
> bdf3092af Vlad Yasevich 2007-03-23 2644 */
> 37051f738 Andrei Pelinescu-Onciul 2009-11-23 2645 if (params->spp_pathmaxrxt) {
> 52ccb8e90 Frank Filz 2005-12-22 2646 if (trans) {
> 52ccb8e90 Frank Filz 2005-12-22 2647 trans->pathmaxrxt = params->spp_pathmaxrxt;
> 52ccb8e90 Frank Filz 2005-12-22 2648 } else if (asoc) {
> 52ccb8e90 Frank Filz 2005-12-22 2649 asoc->pathmaxrxt = params->spp_pathmaxrxt;
> 52ccb8e90 Frank Filz 2005-12-22 2650 } else {
> 52ccb8e90 Frank Filz 2005-12-22 2651 sp->pathmaxrxt = params->spp_pathmaxrxt;
> 52ccb8e90 Frank Filz 2005-12-22 2652 }
> 52ccb8e90 Frank Filz 2005-12-22 2653 }
> 52ccb8e90 Frank Filz 2005-12-22 2654
> 0b0dce7a3 Xin Long 2018-07-02 2655 if (params->spp_flags & SPP_IPV6_FLOWLABEL) {
> 0b0dce7a3 Xin Long 2018-07-02 2656 if (trans && trans->ipaddr.sa.sa_family == AF_INET6) {
> 0b0dce7a3 Xin Long 2018-07-02 2657 trans->flowlabel = params->spp_ipv6_flowlabel &
> 0b0dce7a3 Xin Long 2018-07-02 2658 SCTP_FLOWLABEL_VAL_MASK;
> 0b0dce7a3 Xin Long 2018-07-02 2659 trans->flowlabel |= SCTP_FLOWLABEL_SET_MASK;
> 0b0dce7a3 Xin Long 2018-07-02 2660 } else if (asoc) {
> 0b0dce7a3 Xin Long 2018-07-02 @2661 list_for_each_entry(trans,
> 0b0dce7a3 Xin Long 2018-07-02 2662 &asoc->peer.transport_addr_list,
> 0b0dce7a3 Xin Long 2018-07-02 2663 transports) {
> 0b0dce7a3 Xin Long 2018-07-02 2664 if (trans->ipaddr.sa.sa_family != AF_INET6)
> 0b0dce7a3 Xin Long 2018-07-02 2665 continue;
> 0b0dce7a3 Xin Long 2018-07-02 2666 trans->flowlabel = params->spp_ipv6_flowlabel &
> 0b0dce7a3 Xin Long 2018-07-02 2667 SCTP_FLOWLABEL_VAL_MASK;
> 0b0dce7a3 Xin Long 2018-07-02 2668 trans->flowlabel |= SCTP_FLOWLABEL_SET_MASK;
> 0b0dce7a3 Xin Long 2018-07-02 2669 }
> 0b0dce7a3 Xin Long 2018-07-02 2670 asoc->flowlabel = params->spp_ipv6_flowlabel &
> 0b0dce7a3 Xin Long 2018-07-02 2671 SCTP_FLOWLABEL_VAL_MASK;
> 0b0dce7a3 Xin Long 2018-07-02 2672 asoc->flowlabel |= SCTP_FLOWLABEL_SET_MASK;
> 0b0dce7a3 Xin Long 2018-07-02 2673 } else if (sctp_opt2sk(sp)->sk_family == AF_INET6) {
> 0b0dce7a3 Xin Long 2018-07-02 2674 sp->flowlabel = params->spp_ipv6_flowlabel &
> 0b0dce7a3 Xin Long 2018-07-02 2675 SCTP_FLOWLABEL_VAL_MASK;
> 0b0dce7a3 Xin Long 2018-07-02 2676 sp->flowlabel |= SCTP_FLOWLABEL_SET_MASK;
> 0b0dce7a3 Xin Long 2018-07-02 2677 }
> 0b0dce7a3 Xin Long 2018-07-02 2678 }
> 0b0dce7a3 Xin Long 2018-07-02 2679
> 0b0dce7a3 Xin Long 2018-07-02 2680 if (params->spp_flags & SPP_DSCP) {
> 0b0dce7a3 Xin Long 2018-07-02 @2681 if (trans) {
> 0b0dce7a3 Xin Long 2018-07-02 2682 trans->dscp = params->spp_dscp & SCTP_DSCP_VAL_MASK;
> 0b0dce7a3 Xin Long 2018-07-02 2683 trans->dscp |= SCTP_DSCP_SET_MASK;
> 0b0dce7a3 Xin Long 2018-07-02 2684 } else if (asoc) {
> 0b0dce7a3 Xin Long 2018-07-02 2685 list_for_each_entry(trans,
> 0b0dce7a3 Xin Long 2018-07-02 2686 &asoc->peer.transport_addr_list,
> 0b0dce7a3 Xin Long 2018-07-02 2687 transports) {
> 0b0dce7a3 Xin Long 2018-07-02 2688 trans->dscp = params->spp_dscp &
> 0b0dce7a3 Xin Long 2018-07-02 2689 SCTP_DSCP_VAL_MASK;
> 0b0dce7a3 Xin Long 2018-07-02 2690 trans->dscp |= SCTP_DSCP_SET_MASK;
> 0b0dce7a3 Xin Long 2018-07-02 2691 }
> 0b0dce7a3 Xin Long 2018-07-02 2692 asoc->dscp = params->spp_dscp & SCTP_DSCP_VAL_MASK;
> 0b0dce7a3 Xin Long 2018-07-02 2693 asoc->dscp |= SCTP_DSCP_SET_MASK;
> 0b0dce7a3 Xin Long 2018-07-02 2694 } else {
> 0b0dce7a3 Xin Long 2018-07-02 2695 sp->dscp = params->spp_dscp & SCTP_DSCP_VAL_MASK;
> 0b0dce7a3 Xin Long 2018-07-02 2696 sp->dscp |= SCTP_DSCP_SET_MASK;
> 0b0dce7a3 Xin Long 2018-07-02 2697 }
> 0b0dce7a3 Xin Long 2018-07-02 2698 }
> 0b0dce7a3 Xin Long 2018-07-02 2699
> 52ccb8e90 Frank Filz 2005-12-22 2700 return 0;
> 52ccb8e90 Frank Filz 2005-12-22 2701 }
> 52ccb8e90 Frank Filz 2005-12-22 2702
>
> ---
> 0-DAY kernel test infrastructure Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all Intel Corporation