09 Feb, 2021

1 commit

  • The sctp transport seq_file iterators take a reference to the transport
    in the ->start and ->next functions and releases the reference in the
    ->show function. The preferred handling for such resources is to
    release them in the subsequent ->next or ->stop function call.

    Since Commit 1f4aace60b0e ("fs/seq_file.c: simplify seq_file iteration
    code and interface") there is no guarantee that ->show will be called
    after ->next, so this function can now leak references.

    So move the sctp_transport_put() call to ->next and ->stop.

    Fixes: 1f4aace60b0e ("fs/seq_file.c: simplify seq_file iteration code and interface")
    Reported-by: Xin Long
    Signed-off-by: NeilBrown
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Jakub Kicinski

    NeilBrown
     

24 Nov, 2020

1 commit


20 Nov, 2020

1 commit


15 Nov, 2020

1 commit

  • A call trace was found in Hangbin's Codenomicon testing with debug kernel:

    [ 2615.981988] ODEBUG: free active (active state 0) object type: timer_list hint: sctp_generate_proto_unreach_event+0x0/0x3a0 [sctp]
    [ 2615.995050] WARNING: CPU: 17 PID: 0 at lib/debugobjects.c:328 debug_print_object+0x199/0x2b0
    [ 2616.095934] RIP: 0010:debug_print_object+0x199/0x2b0
    [ 2616.191533] Call Trace:
    [ 2616.194265]
    [ 2616.202068] debug_check_no_obj_freed+0x25e/0x3f0
    [ 2616.207336] slab_free_freelist_hook+0xeb/0x140
    [ 2616.220971] kfree+0xd6/0x2c0
    [ 2616.224293] rcu_do_batch+0x3bd/0xc70
    [ 2616.243096] rcu_core+0x8b9/0xd00
    [ 2616.256065] __do_softirq+0x23d/0xacd
    [ 2616.260166] irq_exit+0x236/0x2a0
    [ 2616.263879] smp_apic_timer_interrupt+0x18d/0x620
    [ 2616.269138] apic_timer_interrupt+0xf/0x20
    [ 2616.273711]

    This is because it holds asoc when transport->proto_unreach_timer starts
    and puts asoc when the timer stops, and without holding transport the
    transport could be freed when the timer is still running.

    So fix it by holding/putting transport instead for proto_unreach_timer
    in transport, just like other timers in transport.

    v1->v2:
    - Also use sctp_transport_put() for the "out_unlock:" path in
    sctp_generate_proto_unreach_event(), as Marcelo noticed.

    Fixes: 50b5d6ad6382 ("sctp: Fix a race between ICMP protocol unreachable and connect()")
    Reported-by: Hangbin Liu
    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Link: https://lore.kernel.org/r/102788809b554958b13b95d33440f5448113b8d6.1605331373.git.lucien.xin@gmail.com
    Signed-off-by: Jakub Kicinski

    Xin Long
     

07 Nov, 2020

1 commit


06 Nov, 2020

1 commit

  • inet(6)_skb_parm was removed from sctp_input_cb by Commit a1dd2cf2f1ae
    ("sctp: allow changing transport encap_port by peer packets"), as it
    thought sctp_input_cb->header is not used any more in SCTP.

    syzbot reported a crash:

    [ ] BUG: KASAN: use-after-free in decode_session6+0xe7c/0x1580
    [ ]
    [ ] Call Trace:
    [ ]
    [ ] dump_stack+0x107/0x163
    [ ] kasan_report.cold+0x1f/0x37
    [ ] decode_session6+0xe7c/0x1580
    [ ] __xfrm_policy_check+0x2fa/0x2850
    [ ] sctp_rcv+0x12b0/0x2e30
    [ ] sctp6_rcv+0x22/0x40
    [ ] ip6_protocol_deliver_rcu+0x2e8/0x1680
    [ ] ip6_input_finish+0x7f/0x160
    [ ] ip6_input+0x9c/0xd0
    [ ] ipv6_rcv+0x28e/0x3c0

    It was caused by sctp_input_cb->header/IP6CB(skb) still used in sctp rx
    path decode_session6() but some members overwritten by sctp6_rcv().

    This patch is to fix it by bring inet(6)_skb_parm back to sctp_input_cb
    and not overwriting it in sctp4/6_rcv() and sctp_udp_rcv().

    Reported-by: syzbot+5be8aebb1b7dfa90ef31@syzkaller.appspotmail.com
    Fixes: a1dd2cf2f1ae ("sctp: allow changing transport encap_port by peer packets")
    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Link: https://lore.kernel.org/r/136c1a7a419341487c504be6d1996928d9d16e02.1604472932.git.lucien.xin@gmail.com
    Signed-off-by: Jakub Kicinski

    Xin Long
     

03 Nov, 2020

1 commit

  • Commit 978aa0474115 ("sctp: fix some type cast warnings introduced since
    very beginning")' broke err reading from sctp_arg, because it reads the
    value as 32-bit integer, although the value is stored as 16-bit integer.
    Later this value is passed to the userspace in 16-bit variable, thus the
    user always gets 0 on big-endian platforms. Fix it by reading the __u16
    field of sctp_arg union, as reading err field would produce a sparse
    warning.

    Fixes: 978aa0474115 ("sctp: fix some type cast warnings introduced since very beginning")
    Signed-off-by: Petr Malat
    Acked-by: Marcelo Ricardo Leitner
    Link: https://lore.kernel.org/r/20201030132633.7045-1-oss@malat.biz
    Signed-off-by: Jakub Kicinski

    Petr Malat
     

31 Oct, 2020

14 commits

  • This patch is to enable udp tunneling socks by calling
    sctp_udp_sock_start() in sctp_ctrlsock_init(), and
    sctp_udp_sock_stop() in sctp_ctrlsock_exit().

    Also add sysctl udp_port to allow changing the listening
    sock's port by users.

    Wit this patch, the whole sctp over udp feature can be
    enabled and used.

    v1->v2:
    - Also update ctl_sock udp_port in proc_sctp_do_udp_port()
    where netns udp_port gets changed.
    v2->v3:
    - Call htons() when setting sk udp_port from netns udp_port.
    v3->v4:
    - Not call sctp_udp_sock_start() when new_value is 0.
    - Add udp_port entry in ip-sysctl.rst.
    v4->v5:
    - Not call sctp_udp_sock_start/stop() in sctp_ctrlsock_init/exit().
    - Improve the description of udp_port in ip-sysctl.rst.

    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Jakub Kicinski

    Xin Long
     
  • This is from Section 4 of draft-tuexen-tsvwg-sctp-udp-encaps-cons-03,
    and it requires responding with an abort chunk with an error cause
    when the udp source port of the received init chunk doesn't match the
    encap port of the transport.

    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Jakub Kicinski

    Xin Long
     
  • This patch is to add the function to make the abort chunk with
    the error cause for new encapsulation port restart, defined
    on Section 4.4 in draft-tuexen-tsvwg-sctp-udp-encaps-cons-03.

    v1->v2:
    - no change.
    v2->v3:
    - no need to call htons() when setting nep.cur_port/new_port.

    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Jakub Kicinski

    Xin Long
     
  • This one basically does the similar things in sctp_v6_xmit as does for
    udp4 sock in the last patch, just note that:

    1. label needs to be calculated, as it's the param of
    udp_tunnel6_xmit_skb().

    2. The 'nocheck' param of udp_tunnel6_xmit_skb() is false, as
    required by RFC.

    v1->v2:
    - Use sp->udp_port instead in sctp_v6_xmit(), which is more safe.

    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Jakub Kicinski

    Xin Long
     
  • This patch does what the rfc6951#section-5.3 says for ipv4:

    "Within the UDP header, the source port MUST be the local UDP
    encapsulation port number of the SCTP stack, and the destination port
    MUST be the remote UDP encapsulation port number maintained for the
    association and the destination address to which the packet is sent
    (see Section 5.1).

    Because the SCTP packet is the UDP payload, the length of the UDP
    packet MUST be the length of the SCTP packet plus the size of the UDP
    header.

    The SCTP checksum MUST be computed for IPv4 and IPv6, and the UDP
    checksum SHOULD be computed for IPv4 and IPv6."

    Some places need to be adjusted in sctp_packet_transmit():

    1. For non-gso packets, when transport's encap_port is set, sctp
    checksum has to be done in sctp_packet_pack(), as the outer
    udp will use ip_summed = CHECKSUM_PARTIAL to do the offload
    setting for checksum.

    2. Delay calling dst_clone() and skb_dst_set() for non-udp packets
    until sctp_v4_xmit(), as for udp packets, skb_dst_set() is not
    needed before calling udp_tunnel_xmit_skb().

    then in sctp_v4_xmit():

    1. Go to udp_tunnel_xmit_skb() only when transport->encap_port and
    net->sctp.udp_port both are set, as these are one for dst port
    and another for src port.

    2. For gso packet, SKB_GSO_UDP_TUNNEL_CSUM is set for gso_type, and
    with this udp checksum can be done in __skb_udp_tunnel_segment()
    for each segments after the sctp gso.

    3. inner_mac_header and inner_transport_header are set, as these
    will be needed in __skb_udp_tunnel_segment() to find the right
    headers.

    4. df and ttl are calculated, as these are the required params by
    udp_tunnel_xmit_skb().

    5. nocheck param has to be false, as "the UDP checksum SHOULD be
    computed for IPv4 and IPv6", says in rfc6951#section-5.3.

    v1->v2:
    - Use sp->udp_port instead in sctp_v4_xmit(), which is more safe.

    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Jakub Kicinski

    Xin Long
     
  • sk_setup_caps() was originally called in Commit 90017accff61 ("sctp:
    Add GSO support"), as:

    "We have to refresh this in case we are xmiting to more than one
    transport at a time"

    This actually happens in the loop of sctp_outq_flush_transports(),
    and it shouldn't be tied to gso, so move it out of gso part and
    before sctp_packet_pack().

    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Jakub Kicinski

    Xin Long
     
  • sctp_mtu_payload() is for calculating the frag size before making
    chunks from a msg. So we should only add udphdr size to overhead
    when udp socks are listening, as only then sctp can handle the
    incoming sctp over udp packets and outgoing sctp over udp packets
    will be possible.

    Note that we can't do this according to transport->encap_port, as
    different transports may be set to different values, while the
    chunks were made before choosing the transport, we could not be
    able to meet all rfc6951#section-5.6 recommends.

    v1->v2:
    - Add udp_port for sctp_sock to avoid a potential race issue, it
    will be used in xmit path in the next patch.

    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Jakub Kicinski

    Xin Long
     
  • As rfc6951#section-5.4 says:

    "After finding the SCTP association (which
    includes checking the verification tag), the UDP source port MUST be
    stored as the encapsulation port for the destination address the SCTP
    packet is received from (see Section 5.1).

    When a non-encapsulated SCTP packet is received by the SCTP stack,
    the encapsulation of outgoing packets belonging to the same
    association and the corresponding destination address MUST be
    disabled."

    transport encap_port should be updated by a validated incoming packet's
    udp src port.

    We save the udp src port in sctp_input_cb->encap_port, and then update
    the transport in two places:

    1. right after vtag is verified, which is required by RFC, and this
    allows the existent transports to be updated by the chunks that
    can only be processed on an asoc.

    2. right before processing the 'init' where the transports are added,
    and this allows building a sctp over udp connection by client with
    the server not knowing the remote encap port.

    3. when processing ootb_pkt and creating the temporary transport for
    the reply pkt.

    Note that sctp_input_cb->header is removed, as it's not used any more
    in sctp.

    v1->v2:
    - Change encap_port as __be16 for sctp_input_cb.

    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Jakub Kicinski

    Xin Long
     
  • This patch is to implement:

    rfc6951#section-6.1: Get or Set the Remote UDP Encapsulation Port Number

    with the param of the struct:

    struct sctp_udpencaps {
    sctp_assoc_t sue_assoc_id;
    struct sockaddr_storage sue_address;
    uint16_t sue_port;
    };

    the encap_port of sock, assoc or transport can be changed by users,
    which also means it allows the different transports of the same asoc
    to have different encap_port value.

    v1->v2:
    - no change.
    v2->v3:
    - fix the endian warning when setting values between encap_port and
    sue_port.

    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Jakub Kicinski

    Xin Long
     
  • encap_port is added as per netns/sock/assoc/transport, and the
    latter one's encap_port inherits the former one's by default.
    The transport's encap_port value would mostly decide if one
    packet should go out with udp encapsulated or not.

    This patch also allows users to set netns' encap_port by sysctl.

    v1->v2:
    - Change to define encap_port as __be16 for sctp_sock, asoc and
    transport.
    v2->v3:
    - No change.
    v3->v4:
    - Add 'encap_port' entry in ip-sysctl.rst.
    v4->v5:
    - Improve the description of encap_port in ip-sysctl.rst.

    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Jakub Kicinski

    Xin Long
     
  • As it says in rfc6951#section-5.5:

    "When receiving ICMP or ICMPv6 response packets, there might not be
    enough bytes in the payload to identify the SCTP association that the
    SCTP packet triggering the ICMP or ICMPv6 packet belongs to. If a
    received ICMP or ICMPv6 packet cannot be related to a specific SCTP
    association or the verification tag cannot be verified, it MUST be
    discarded silently. In particular, this means that the SCTP stack
    MUST NOT rely on receiving ICMP or ICMPv6 messages. Implementation
    constraints could prevent processing received ICMP or ICMPv6
    messages."

    ICMP or ICMPv6 packets need to be handled, and this is implemented by
    udp encap sock .encap_err_lookup function.

    The .encap_err_lookup function is called in __udp(6)_lib_err_encap()
    to confirm this path does need to be updated. For sctp, what we can
    do here is check if the corresponding asoc and transport exist.

    Note that icmp packet process for sctp over udp is done by udp sock
    .encap_err_lookup(), and it means for now we can't do as much as
    sctp_v4/6_err() does. Also we can't do the two mappings mentioned
    in rfc6951#section-5.5.

    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Jakub Kicinski

    Xin Long
     
  • This patch is to add the udp6 sock part in sctp_udp_sock_start/stop().
    udp_conf.use_udp6_rx_checksums is set to true, as:

    "The SCTP checksum MUST be computed for IPv4 and IPv6, and the UDP
    checksum SHOULD be computed for IPv4 and IPv6"

    says in rfc6951#section-5.3.

    v1->v2:
    - Add pr_err() when fails to create udp v6 sock.
    - Add #if IS_ENABLED(CONFIG_IPV6) not to create v6 sock when ipv6 is
    disabled.

    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Jakub Kicinski

    Xin Long
     
  • This patch is to add the functions to create/release udp4 sock,
    and set the sock's encap_rcv to process the incoming udp encap
    sctp packets. In sctp_udp_rcv(), as we can see, all we need to
    do is fix the transport header for sctp_rcv(), then it would
    implement the part of rfc6951#section-5.4:

    "When an encapsulated packet is received, the UDP header is removed.
    Then, the generic lookup is performed, as done by an SCTP stack
    whenever a packet is received, to find the association for the
    received SCTP packet"

    Note that these functions will be called in the last patch of
    this patchset when enabling this feature.

    v1->v2:
    - Add pr_err() when fails to create udp v4 sock.
    v2->v3:
    - Add 'select NET_UDP_TUNNEL' in sctp Kconfig.
    v3->v4:
    - No change.
    v4->v5:
    - Change to set udp_port to 0 by default.

    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Jakub Kicinski

    Xin Long
     
  • For the gso of sctp over udp packets, sctp_gso_segment() will be called in
    skb_udp_tunnel_segment(), we need to set transport_header to sctp header.

    As all the current HWs can't handle both crc checksum and udp checksum at
    the same time, the crc checksum has to be done in sctp_gso_segment() by
    removing the NETIF_F_SCTP_CRC flag from the features.

    Meanwhile, if the HW can't do udp checksum, csum and csum_start has to be
    set correctly, and udp checksum will be done in __skb_udp_tunnel_segment()
    by calling gso_make_checksum().

    Thanks to Paolo, Marcelo and Guillaume for helping with this one.

    v1->v2:
    - no change.
    v2->v3:
    - remove the he NETIF_F_SCTP_CRC flag from the features.
    - set csum and csum_start in sctp_gso_make_checksum().

    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Jakub Kicinski

    Xin Long
     

09 Oct, 2020

2 commits

  • Small conflict around locking in rxrpc_process_event() -
    channel_lock moved to bundle in next, while state lock
    needs _bh() from net.

    Signed-off-by: Jakub Kicinski

    Jakub Kicinski
     
  • After freeing ep->auth_hmacs we have to clear the pointer
    or risk use-after-free as reported by syzbot:

    BUG: KASAN: use-after-free in sctp_auth_destroy_hmacs net/sctp/auth.c:509 [inline]
    BUG: KASAN: use-after-free in sctp_auth_destroy_hmacs net/sctp/auth.c:501 [inline]
    BUG: KASAN: use-after-free in sctp_auth_free+0x17e/0x1d0 net/sctp/auth.c:1070
    Read of size 8 at addr ffff8880a8ff52c0 by task syz-executor941/6874

    CPU: 0 PID: 6874 Comm: syz-executor941 Not tainted 5.9.0-rc8-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    Call Trace:
    __dump_stack lib/dump_stack.c:77 [inline]
    dump_stack+0x198/0x1fd lib/dump_stack.c:118
    print_address_description.constprop.0.cold+0xae/0x497 mm/kasan/report.c:383
    __kasan_report mm/kasan/report.c:513 [inline]
    kasan_report.cold+0x1f/0x37 mm/kasan/report.c:530
    sctp_auth_destroy_hmacs net/sctp/auth.c:509 [inline]
    sctp_auth_destroy_hmacs net/sctp/auth.c:501 [inline]
    sctp_auth_free+0x17e/0x1d0 net/sctp/auth.c:1070
    sctp_endpoint_destroy+0x95/0x240 net/sctp/endpointola.c:203
    sctp_endpoint_put net/sctp/endpointola.c:236 [inline]
    sctp_endpoint_free+0xd6/0x110 net/sctp/endpointola.c:183
    sctp_destroy_sock+0x9c/0x3c0 net/sctp/socket.c:4981
    sctp_v6_destroy_sock+0x11/0x20 net/sctp/socket.c:9415
    sk_common_release+0x64/0x390 net/core/sock.c:3254
    sctp_close+0x4ce/0x8b0 net/sctp/socket.c:1533
    inet_release+0x12e/0x280 net/ipv4/af_inet.c:431
    inet6_release+0x4c/0x70 net/ipv6/af_inet6.c:475
    __sock_release+0xcd/0x280 net/socket.c:596
    sock_close+0x18/0x20 net/socket.c:1277
    __fput+0x285/0x920 fs/file_table.c:281
    task_work_run+0xdd/0x190 kernel/task_work.c:141
    exit_task_work include/linux/task_work.h:25 [inline]
    do_exit+0xb7d/0x29f0 kernel/exit.c:806
    do_group_exit+0x125/0x310 kernel/exit.c:903
    __do_sys_exit_group kernel/exit.c:914 [inline]
    __se_sys_exit_group kernel/exit.c:912 [inline]
    __x64_sys_exit_group+0x3a/0x50 kernel/exit.c:912
    do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
    entry_SYSCALL_64_after_hwframe+0x44/0xa9
    RIP: 0033:0x43f278
    Code: Bad RIP value.
    RSP: 002b:00007fffe0995c38 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
    RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 000000000043f278
    RDX: 0000000000000000 RSI: 000000000000003c RDI: 0000000000000000
    RBP: 00000000004bf068 R08: 00000000000000e7 R09: ffffffffffffffd0
    R10: 0000000020000000 R11: 0000000000000246 R12: 0000000000000001
    R13: 00000000006d1180 R14: 0000000000000000 R15: 0000000000000000

    Allocated by task 6874:
    kasan_save_stack+0x1b/0x40 mm/kasan/common.c:48
    kasan_set_track mm/kasan/common.c:56 [inline]
    __kasan_kmalloc.constprop.0+0xbf/0xd0 mm/kasan/common.c:461
    kmem_cache_alloc_trace+0x174/0x300 mm/slab.c:3554
    kmalloc include/linux/slab.h:554 [inline]
    kmalloc_array include/linux/slab.h:593 [inline]
    kcalloc include/linux/slab.h:605 [inline]
    sctp_auth_init_hmacs+0xdb/0x3b0 net/sctp/auth.c:464
    sctp_auth_init+0x8a/0x4a0 net/sctp/auth.c:1049
    sctp_setsockopt_auth_supported net/sctp/socket.c:4354 [inline]
    sctp_setsockopt+0x477e/0x97f0 net/sctp/socket.c:4631
    __sys_setsockopt+0x2db/0x610 net/socket.c:2132
    __do_sys_setsockopt net/socket.c:2143 [inline]
    __se_sys_setsockopt net/socket.c:2140 [inline]
    __x64_sys_setsockopt+0xba/0x150 net/socket.c:2140
    do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
    entry_SYSCALL_64_after_hwframe+0x44/0xa9

    Freed by task 6874:
    kasan_save_stack+0x1b/0x40 mm/kasan/common.c:48
    kasan_set_track+0x1c/0x30 mm/kasan/common.c:56
    kasan_set_free_info+0x1b/0x30 mm/kasan/generic.c:355
    __kasan_slab_free+0xd8/0x120 mm/kasan/common.c:422
    __cache_free mm/slab.c:3422 [inline]
    kfree+0x10e/0x2b0 mm/slab.c:3760
    sctp_auth_destroy_hmacs net/sctp/auth.c:511 [inline]
    sctp_auth_destroy_hmacs net/sctp/auth.c:501 [inline]
    sctp_auth_init_hmacs net/sctp/auth.c:496 [inline]
    sctp_auth_init_hmacs+0x2b7/0x3b0 net/sctp/auth.c:454
    sctp_auth_init+0x8a/0x4a0 net/sctp/auth.c:1049
    sctp_setsockopt_auth_supported net/sctp/socket.c:4354 [inline]
    sctp_setsockopt+0x477e/0x97f0 net/sctp/socket.c:4631
    __sys_setsockopt+0x2db/0x610 net/socket.c:2132
    __do_sys_setsockopt net/socket.c:2143 [inline]
    __se_sys_setsockopt net/socket.c:2140 [inline]
    __x64_sys_setsockopt+0xba/0x150 net/socket.c:2140
    do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
    entry_SYSCALL_64_after_hwframe+0x44/0xa9

    Fixes: 1f485649f529 ("[SCTP]: Implement SCTP-AUTH internals")
    Signed-off-by: Eric Dumazet
    Cc: Vlad Yasevich
    Cc: Neil Horman
    Cc: Marcelo Ricardo Leitner
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: Jakub Kicinski

    Eric Dumazet
     

23 Sep, 2020

1 commit

  • Two minor conflicts:

    1) net/ipv4/route.c, adding a new local variable while
    moving another local variable and removing it's
    initial assignment.

    2) drivers/net/dsa/microchip/ksz9477.c, overlapping changes.
    One pretty prints the port mode differently, whilst another
    changes the driver to try and obtain the port mode from
    the port node rather than the switch node.

    Signed-off-by: David S. Miller

    David S. Miller
     

21 Sep, 2020

1 commit

  • When calculating ancestor_size with IPv6 enabled, simply using
    sizeof(struct ipv6_pinfo) doesn't account for extra bytes needed for
    alignment in the struct sctp6_sock. On x86, there aren't any extra
    bytes, but on ARM the ipv6_pinfo structure is aligned on an 8-byte
    boundary so there were 4 pad bytes that were omitted from the
    ancestor_size calculation. This would lead to corruption of the
    pd_lobby pointers, causing an oops when trying to free the sctp
    structure on socket close.

    Fixes: 636d25d557d1 ("sctp: not copy sctp_sock pd_lobby in sctp_copy_descendant")
    Signed-off-by: Henry Ptasinski
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: David S. Miller

    Henry Ptasinski
     

05 Sep, 2020

1 commit

  • We got slightly different patches removing a double word
    in a comment in net/ipv4/raw.c - picked the version from net.

    Simple conflict in drivers/net/ethernet/ibm/ibmvnic.c. Use cached
    values instead of VNIC login response buffer (following what
    commit 507ebe6444a4 ("ibmvnic: Fix use-after-free of VNIC login
    response buffer") did).

    Signed-off-by: Jakub Kicinski

    Jakub Kicinski
     

04 Sep, 2020

1 commit

  • Pull networking fixes from David Miller:

    1) Use netif_rx_ni() when necessary in batman-adv stack, from Jussi
    Kivilinna.

    2) Fix loss of RTT samples in rxrpc, from David Howells.

    3) Memory leak in hns_nic_dev_probe(), from Dignhao Liu.

    4) ravb module cannot be unloaded, fix from Yuusuke Ashizuka.

    5) We disable BH for too lokng in sctp_get_port_local(), add a
    cond_resched() here as well, from Xin Long.

    6) Fix memory leak in st95hf_in_send_cmd, from Dinghao Liu.

    7) Out of bound access in bpf_raw_tp_link_fill_link_info(), from
    Yonghong Song.

    8) Missing of_node_put() in mt7530 DSA driver, from Sumera
    Priyadarsini.

    9) Fix crash in bnxt_fw_reset_task(), from Michael Chan.

    10) Fix geneve tunnel checksumming bug in hns3, from Yi Li.

    11) Memory leak in rxkad_verify_response, from Dinghao Liu.

    12) In tipc, don't use smp_processor_id() in preemptible context. From
    Tuong Lien.

    13) Fix signedness issue in mlx4 memory allocation, from Shung-Hsi Yu.

    14) Missing clk_disable_prepare() in gemini driver, from Dan Carpenter.

    15) Fix ABI mismatch between driver and firmware in nfp, from Louis
    Peens.

    * git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (110 commits)
    net/smc: fix sock refcounting in case of termination
    net/smc: reset sndbuf_desc if freed
    net/smc: set rx_off for SMCR explicitly
    net/smc: fix toleration of fake add_link messages
    tg3: Fix soft lockup when tg3_reset_task() fails.
    doc: net: dsa: Fix typo in config code sample
    net: dp83867: Fix WoL SecureOn password
    nfp: flower: fix ABI mismatch between driver and firmware
    tipc: fix shutdown() of connectionless socket
    ipv6: Fix sysctl max for fib_multipath_hash_policy
    drivers/net/wan/hdlc: Change the default of hard_header_len to 0
    net: gemini: Fix another missing clk_disable_unprepare() in probe
    net: bcmgenet: fix mask check in bcmgenet_validate_flow()
    amd-xgbe: Add support for new port mode
    net: usb: dm9601: Add USB ID of Keenetic Plus DSL
    vhost: fix typo in error message
    net: ethernet: mlx4: Fix memory allocation in mlx4_buddy_init()
    pktgen: fix error message with wrong function name
    net: ethernet: ti: am65-cpsw: fix rmii 100Mbit link mode
    cxgb4: fix thermal zone device registration
    ...

    Linus Torvalds
     

25 Aug, 2020

8 commits

  • Drop the repeated word "an".

    Signed-off-by: Randy Dunlap
    Cc: Vlad Yasevich
    Cc: Neil Horman
    Cc: Marcelo Ricardo Leitner
    Cc: linux-sctp@vger.kernel.org
    Cc: "David S. Miller"
    Cc: Jakub Kicinski
    Signed-off-by: David S. Miller

    Randy Dunlap
     
  • Drop the repeated words "for", "that", and "a".
    Change "his" to "this".

    Signed-off-by: Randy Dunlap
    Cc: Vlad Yasevich
    Cc: Neil Horman
    Cc: Marcelo Ricardo Leitner
    Cc: linux-sctp@vger.kernel.org
    Cc: "David S. Miller"
    Cc: Jakub Kicinski
    Signed-off-by: David S. Miller

    Randy Dunlap
     
  • Drop the repeated words "of" and "that".
    Add some punctuation for readability.

    Signed-off-by: Randy Dunlap
    Cc: Vlad Yasevich
    Cc: Neil Horman
    Cc: Marcelo Ricardo Leitner
    Cc: linux-sctp@vger.kernel.org
    Cc: "David S. Miller"
    Cc: Jakub Kicinski
    Signed-off-by: David S. Miller

    Randy Dunlap
     
  • Drop the repeated word "the".

    Signed-off-by: Randy Dunlap
    Cc: Vlad Yasevich
    Cc: Neil Horman
    Cc: Marcelo Ricardo Leitner
    Cc: linux-sctp@vger.kernel.org
    Cc: "David S. Miller"
    Cc: Jakub Kicinski
    Signed-off-by: David S. Miller

    Randy Dunlap
     
  • Drop the repeated word "of".

    Signed-off-by: Randy Dunlap
    Cc: Vlad Yasevich
    Cc: Neil Horman
    Cc: Marcelo Ricardo Leitner
    Cc: linux-sctp@vger.kernel.org
    Cc: "David S. Miller"
    Cc: Jakub Kicinski
    Signed-off-by: David S. Miller

    Randy Dunlap
     
  • Drop the repeated word "the" and "now".

    Signed-off-by: Randy Dunlap
    Cc: Vlad Yasevich
    Cc: Neil Horman
    Cc: Marcelo Ricardo Leitner
    Cc: linux-sctp@vger.kernel.org
    Cc: "David S. Miller"
    Cc: Jakub Kicinski
    Signed-off-by: David S. Miller

    Randy Dunlap
     
  • Drop the repeated word "the" in two places.

    Signed-off-by: Randy Dunlap
    Cc: Vlad Yasevich
    Cc: Neil Horman
    Cc: Marcelo Ricardo Leitner
    Cc: linux-sctp@vger.kernel.org
    Cc: "David S. Miller"
    Cc: Jakub Kicinski
    Signed-off-by: David S. Miller

    Randy Dunlap
     
  • With disabling bh in the whole sctp_get_port_local(), when
    snum == 0 and too many ports have been used, the do-while
    loop will take the cpu for a long time and cause cpu stuck:

    [ ] watchdog: BUG: soft lockup - CPU#11 stuck for 22s!
    [ ] RIP: 0010:native_queued_spin_lock_slowpath+0x4de/0x940
    [ ] Call Trace:
    [ ] _raw_spin_lock+0xc1/0xd0
    [ ] sctp_get_port_local+0x527/0x650 [sctp]
    [ ] sctp_do_bind+0x208/0x5e0 [sctp]
    [ ] sctp_autobind+0x165/0x1e0 [sctp]
    [ ] sctp_connect_new_asoc+0x355/0x480 [sctp]
    [ ] __sctp_connect+0x360/0xb10 [sctp]

    There's no need to disable bh in the whole function of
    sctp_get_port_local. So fix this cpu stuck by removing
    local_bh_disable() called at the beginning, and using
    spin_lock_bh() instead.

    The same thing was actually done for inet_csk_get_port() in
    Commit ea8add2b1903 ("tcp/dccp: better use of ephemeral
    ports in bind()").

    Thanks to Marcelo for pointing the buggy code out.

    v1->v2:
    - use cond_resched() to yield cpu to other tasks if needed,
    as Eric noticed.

    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: Ying Xu
    Signed-off-by: Xin Long
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: David S. Miller

    Xin Long
     

24 Aug, 2020

1 commit

  • Replace the existing /* fall through */ comments and its variants with
    the new pseudo-keyword macro fallthrough[1]. Also, remove unnecessary
    fall-through markings when it is the case.

    [1] https://www.kernel.org/doc/html/v5.7/process/deprecated.html?highlight=fallthrough#implicit-switch-case-fall-through

    Signed-off-by: Gustavo A. R. Silva

    Gustavo A. R. Silva
     

21 Aug, 2020

1 commit

  • The number of output and input streams was never being reduced, eg when
    processing received INIT or INIT_ACK chunks.
    The effect is that DATA chunks can be sent with invalid stream ids
    and then discarded by the remote system.

    Fixes: 2075e50caf5ea ("sctp: convert to genradix")
    Signed-off-by: David Laight
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: David S. Miller

    David Laight
     

08 Aug, 2020

1 commit

  • As said by Linus:

    A symmetric naming is only helpful if it implies symmetries in use.
    Otherwise it's actively misleading.

    In "kzalloc()", the z is meaningful and an important part of what the
    caller wants.

    In "kzfree()", the z is actively detrimental, because maybe in the
    future we really _might_ want to use that "memfill(0xdeadbeef)" or
    something. The "zero" part of the interface isn't even _relevant_.

    The main reason that kzfree() exists is to clear sensitive information
    that should not be leaked to other future users of the same memory
    objects.

    Rename kzfree() to kfree_sensitive() to follow the example of the recently
    added kvfree_sensitive() and make the intention of the API more explicit.
    In addition, memzero_explicit() is used to clear the memory to make sure
    that it won't get optimized away by the compiler.

    The renaming is done by using the command sequence:

    git grep -w --name-only kzfree |\
    xargs sed -i 's/kzfree/kfree_sensitive/'

    followed by some editing of the kfree_sensitive() kerneldoc and adding
    a kzfree backward compatibility macro in slab.h.

    [akpm@linux-foundation.org: fs/crypto/inline_crypt.c needs linux/slab.h]
    [akpm@linux-foundation.org: fix fs/crypto/inline_crypt.c some more]

    Suggested-by: Joe Perches
    Signed-off-by: Waiman Long
    Signed-off-by: Andrew Morton
    Acked-by: David Howells
    Acked-by: Michal Hocko
    Acked-by: Johannes Weiner
    Cc: Jarkko Sakkinen
    Cc: James Morris
    Cc: "Serge E. Hallyn"
    Cc: Joe Perches
    Cc: Matthew Wilcox
    Cc: David Rientjes
    Cc: Dan Carpenter
    Cc: "Jason A . Donenfeld"
    Link: http://lkml.kernel.org/r/20200616154311.12314-3-longman@redhat.com
    Signed-off-by: Linus Torvalds

    Waiman Long
     

26 Jul, 2020

1 commit

  • The UDP reuseport conflict was a little bit tricky.

    The net-next code, via bpf-next, extracted the reuseport handling
    into a helper so that the BPF sk lookup code could invoke it.

    At the same time, the logic for reuseport handling of unconnected
    sockets changed via commit efc6b6f6c3113e8b203b9debfb72d81e0f3dcace
    which changed the logic to carry on the reuseport result into the
    rest of the lookup loop if we do not return immediately.

    This requires moving the reuseport_has_conns() logic into the callers.

    While we are here, get rid of inline directives as they do not belong
    in foo.c files.

    The other changes were cases of more straightforward overlapping
    modifications.

    Signed-off-by: David S. Miller

    David S. Miller
     

25 Jul, 2020

1 commit

  • The variable status is being initialized with a value that is never read
    and it is being updated later with a new value. The initialization is
    redundant and can be removed. Also put the variable declarations into
    reverse christmas tree order.

    Addresses-Coverity: ("Unused value")
    Signed-off-by: Colin Ian King
    Acked-by: Marcelo Ricardo Leitner
    Signed-off-by: David S. Miller

    Colin Ian King