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.
julia
---------- Forwarded message ----------
Date: Wed, 29 Aug 2018 22:02:39 +0800
From: kbuild test robot <[email protected]>
To: [email protected]
Cc: Julia Lawall <[email protected]>
Subject: net/sctp/socket.c:2681:6-11: ERROR: invalid reference to the index
variable of the iterator on line 2661
CC: [email protected]
CC: [email protected]
TO: Xin Long <[email protected]>
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
On Wed, Aug 29, 2018 at 11:32 PM Julia Lawall <[email protected]> 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 <[email protected]>
> To: [email protected]
> Cc: Julia Lawall <[email protected]>
> Subject: net/sctp/socket.c:2681:6-11: ERROR: invalid reference to the index
> variable of the iterator on line 2661
>
> CC: [email protected]
> CC: [email protected]
> TO: Xin Long <[email protected]>
>
> 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