1. 23 1月, 2021 2 次提交
  2. 15 1月, 2021 1 次提交
  3. 13 1月, 2021 2 次提交
  4. 10 1月, 2021 5 次提交
  5. 29 12月, 2020 1 次提交
    • D
      net: mptcp: cap forward allocation to 1M · e7579d5d
      Davide Caratti 提交于
      the following syzkaller reproducer:
      
       r0 = socket$inet_mptcp(0x2, 0x1, 0x106)
       bind$inet(r0, &(0x7f0000000080)={0x2, 0x4e24, @multicast2}, 0x10)
       connect$inet(r0, &(0x7f0000000480)={0x2, 0x4e24, @local}, 0x10)
       sendto$inet(r0, &(0x7f0000000100)="f6", 0xffffffe7, 0xc000, 0x0, 0x0)
      
      systematically triggers the following warning:
      
       WARNING: CPU: 2 PID: 8618 at net/core/stream.c:208 sk_stream_kill_queues+0x3fa/0x580
       Modules linked in:
       CPU: 2 PID: 8618 Comm: syz-executor Not tainted 5.10.0+ #334
       Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.11.1-4.module+el8.1.0+4066+0f1aadab 04/04
       RIP: 0010:sk_stream_kill_queues+0x3fa/0x580
       Code: df 48 c1 ea 03 0f b6 04 02 84 c0 74 04 3c 03 7e 40 8b ab 20 02 00 00 e9 64 ff ff ff e8 df f0 81 2
       RSP: 0018:ffffc9000290fcb0 EFLAGS: 00010293
       RAX: ffff888011cb8000 RBX: 0000000000000000 RCX: ffffffff86eecf0e
       RDX: 0000000000000000 RSI: ffffffff86eecf6a RDI: 0000000000000005
       RBP: 0000000000000e28 R08: ffff888011cb8000 R09: fffffbfff1f48139
       R10: ffffffff8fa409c7 R11: fffffbfff1f48138 R12: ffff8880215e6220
       R13: ffffffff8fa409c0 R14: ffffc9000290fd30 R15: 1ffff92000521fa2
       FS:  00007f41c78f4800(0000) GS:ffff88802d000000(0000) knlGS:0000000000000000
       CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       CR2: 00007f95c803d088 CR3: 0000000025ed2000 CR4: 00000000000006f0
       Call Trace:
        __mptcp_destroy_sock+0x4f5/0x8e0
         mptcp_close+0x5e2/0x7f0
        inet_release+0x12b/0x270
        __sock_release+0xc8/0x270
        sock_close+0x18/0x20
        __fput+0x272/0x8e0
        task_work_run+0xe0/0x1a0
        exit_to_user_mode_prepare+0x1df/0x200
        syscall_exit_to_user_mode+0x19/0x50
        entry_SYSCALL_64_after_hwframe+0x44/0xa9
      
      userspace programs provide arbitrarily high values of 'len' in sendmsg():
      this is causing integer overflow of 'amount'. Cap forward allocation to 1
      megabyte: higher values are not really useful.
      Suggested-by: NPaolo Abeni <pabeni@redhat.com>
      Fixes: e93da928 ("mptcp: implement wmem reservation")
      Signed-off-by: NDavide Caratti <dcaratti@redhat.com>
      Link: https://lore.kernel.org/r/3334d00d8b2faecafdfab9aa593efcbf61442756.1608584474.git.dcaratti@redhat.comSigned-off-by: NJakub Kicinski <kuba@kernel.org>
      e7579d5d
  6. 18 12月, 2020 4 次提交
  7. 17 12月, 2020 1 次提交
    • G
      mptcp: clear use_ack and use_map when dropping other suboptions · 3ae32c07
      Geliang Tang 提交于
      This patch cleared use_ack and use_map when dropping other suboptions to
      fix the following syzkaller BUG:
      
      [   15.223006] BUG: unable to handle page fault for address: 0000000000223b10
      [   15.223700] #PF: supervisor read access in kernel mode
      [   15.224209] #PF: error_code(0x0000) - not-present page
      [   15.224724] PGD b8d5067 P4D b8d5067 PUD c0a5067 PMD 0
      [   15.225237] Oops: 0000 [#1] SMP
      [   15.225556] CPU: 0 PID: 7747 Comm: syz-executor Not tainted 5.10.0-rc6+ #24
      [   15.226281] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1ubuntu1 04/01/2014
      [   15.227292] RIP: 0010:skb_release_data+0x89/0x1e0
      [   15.227816] Code: 5b 5d 41 5c 41 5d 41 5e 41 5f e9 02 06 8a ff e8 fd 05 8a ff 45 31 ed 80 7d 02 00 4c 8d 65 30 74 55 e8 eb 05 8a ff 49 8b 1c 24 <4c> 8b 7b 08 41 f6 c7 01 0f 85 18 01 00 00 e8 d4 05 8a ff 8b 43 34
      [   15.229669] RSP: 0018:ffffc900019c7c08 EFLAGS: 00010293
      [   15.230188] RAX: ffff88800daad900 RBX: 0000000000223b08 RCX: 0000000000000006
      [   15.230895] RDX: 0000000000000000 RSI: ffffffff818e06c5 RDI: ffff88807f6dc700
      [   15.231593] RBP: ffff88807f71a4c0 R08: 0000000000000001 R09: 0000000000000001
      [   15.232299] R10: ffffc900019c7c18 R11: 0000000000000000 R12: ffff88807f71a4f0
      [   15.233007] R13: 0000000000000000 R14: ffff88807f6dc700 R15: 0000000000000002
      [   15.233714] FS:  00007f65d9b5f700(0000) GS:ffff88807c400000(0000) knlGS:0000000000000000
      [   15.234509] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   15.235081] CR2: 0000000000223b10 CR3: 000000000b883000 CR4: 00000000000006f0
      [   15.235788] Call Trace:
      [   15.236042]  skb_release_all+0x28/0x30
      [   15.236419]  __kfree_skb+0x11/0x20
      [   15.236768]  tcp_data_queue+0x270/0x1240
      [   15.237161]  ? tcp_urg+0x50/0x2a0
      [   15.237496]  tcp_rcv_established+0x39a/0x890
      [   15.237997]  ? mark_held_locks+0x49/0x70
      [   15.238467]  tcp_v4_do_rcv+0xb9/0x270
      [   15.238915]  __release_sock+0x8a/0x160
      [   15.239365]  release_sock+0x32/0xd0
      [   15.239793]  __inet_stream_connect+0x1d2/0x400
      [   15.240313]  ? do_wait_intr_irq+0x80/0x80
      [   15.240791]  inet_stream_connect+0x36/0x50
      [   15.241275]  mptcp_stream_connect+0x69/0x1b0
      [   15.241787]  __sys_connect+0x122/0x140
      [   15.242236]  ? syscall_enter_from_user_mode+0x17/0x50
      [   15.242836]  ? lockdep_hardirqs_on_prepare+0xd4/0x170
      [   15.243436]  __x64_sys_connect+0x1a/0x20
      [   15.243924]  do_syscall_64+0x33/0x40
      [   15.244313]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
      [   15.244821] RIP: 0033:0x7f65d946e469
      [   15.245183] Code: 00 f3 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d ff 49 2b 00 f7 d8 64 89 01 48
      [   15.247019] RSP: 002b:00007f65d9b5eda8 EFLAGS: 00000246 ORIG_RAX: 000000000000002a
      [   15.247770] RAX: ffffffffffffffda RBX: 000000000049bf00 RCX: 00007f65d946e469
      [   15.248471] RDX: 0000000000000010 RSI: 00000000200000c0 RDI: 0000000000000005
      [   15.249205] RBP: 000000000049bf00 R08: 0000000000000000 R09: 0000000000000000
      [   15.249908] R10: 0000000000000000 R11: 0000000000000246 R12: 000000000049bf0c
      [   15.250603] R13: 00007fffe8a25cef R14: 00007f65d9b3f000 R15: 0000000000000003
      [   15.251312] Modules linked in:
      [   15.251626] CR2: 0000000000223b10
      [   15.251965] BUG: kernel NULL pointer dereference, address: 0000000000000048
      [   15.252005] ---[ end trace f5c51fe19123c773 ]---
      [   15.252822] #PF: supervisor read access in kernel mode
      [   15.252823] #PF: error_code(0x0000) - not-present page
      [   15.252825] PGD c6c6067 P4D c6c6067 PUD c0d8067
      [   15.253294] RIP: 0010:skb_release_data+0x89/0x1e0
      [   15.253910] PMD 0
      [   15.253914] Oops: 0000 [#2] SMP
      [   15.253917] CPU: 1 PID: 7746 Comm: syz-executor Tainted: G      D           5.10.0-rc6+ #24
      [   15.253920] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1ubuntu1 04/01/2014
      [   15.254435] Code: 5b 5d 41 5c 41 5d 41 5e 41 5f e9 02 06 8a ff e8 fd 05 8a ff 45 31 ed 80 7d 02 00 4c 8d 65 30 74 55 e8 eb 05 8a ff 49 8b 1c 24 <4c> 8b 7b 08 41 f6 c7 01 0f 85 18 01 00 00 e8 d4 05 8a ff 8b 43 34
      [   15.254899] RIP: 0010:skb_release_data+0x89/0x1e0
      [   15.254902] Code: 5b 5d 41 5c 41 5d 41 5e 41 5f e9 02 06 8a ff e8 fd 05 8a ff 45 31 ed 80 7d 02 00 4c 8d 65 30 74 55 e8 eb 05 8a ff 49 8b 1c 24 <4c> 8b 7b 08 41 f6 c7 01 0f 85 18 01 00 00 e8 d4 05 8a ff 8b 43 34
      [   15.254905] RSP: 0018:ffffc900019bfc08 EFLAGS: 00010293
      [   15.255376] RSP: 0018:ffffc900019c7c08 EFLAGS: 00010293
      [   15.255580]
      [   15.255583] RAX: ffff888004a7ac80 RBX: 0000000000000040 RCX: 0000000000000000
      [   15.255912]
      [   15.256724] RDX: 0000000000000000 RSI: ffffffff818e06c5 RDI: ffff88807f6ddd00
      [   15.257620] RAX: ffff88800daad900 RBX: 0000000000223b08 RCX: 0000000000000006
      [   15.259817] RBP: ffff88800e9006c0 R08: 0000000000000000 R09: 0000000000000000
      [   15.259818] R10: 0000000000000000 R11: 0000000000000000 R12: ffff88800e9006f0
      [   15.259820] R13: 0000000000000000 R14: ffff88807f6ddd00 R15: 0000000000000002
      [   15.259822] FS:  00007fae4a60a700(0000) GS:ffff88807c500000(0000) knlGS:0000000000000000
      [   15.259826] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   15.260296] RDX: 0000000000000000 RSI: ffffffff818e06c5 RDI: ffff88807f6dc700
      [   15.262514] CR2: 0000000000000048 CR3: 000000000b89c000 CR4: 00000000000006e0
      [   15.262515] Call Trace:
      [   15.262519]  skb_release_all+0x28/0x30
      [   15.262523]  __kfree_skb+0x11/0x20
      [   15.263054] RBP: ffff88807f71a4c0 R08: 0000000000000001 R09: 0000000000000001
      [   15.263680]  tcp_data_queue+0x270/0x1240
      [   15.263843] R10: ffffc900019c7c18 R11: 0000000000000000 R12: ffff88807f71a4f0
      [   15.264693]  ? tcp_urg+0x50/0x2a0
      [   15.264856] R13: 0000000000000000 R14: ffff88807f6dc700 R15: 0000000000000002
      [   15.265720]  tcp_rcv_established+0x39a/0x890
      [   15.266438] FS:  00007f65d9b5f700(0000) GS:ffff88807c400000(0000) knlGS:0000000000000000
      [   15.267283]  ? __schedule+0x3fa/0x880
      [   15.267287]  tcp_v4_do_rcv+0xb9/0x270
      [   15.267290]  __release_sock+0x8a/0x160
      [   15.268049] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   15.268788]  release_sock+0x32/0xd0
      [   15.268791]  __inet_stream_connect+0x1d2/0x400
      [   15.268795]  ? do_wait_intr_irq+0x80/0x80
      [   15.269593] CR2: 0000000000223b10 CR3: 000000000b883000 CR4: 00000000000006f0
      [   15.270246]  inet_stream_connect+0x36/0x50
      [   15.270250]  mptcp_stream_connect+0x69/0x1b0
      [   15.270253]  __sys_connect+0x122/0x140
      [   15.271097] Kernel panic - not syncing: Fatal exception
      [   15.271820]  ? syscall_enter_from_user_mode+0x17/0x50
      [   15.283542]  ? lockdep_hardirqs_on_prepare+0xd4/0x170
      [   15.284275]  __x64_sys_connect+0x1a/0x20
      [   15.284853]  do_syscall_64+0x33/0x40
      [   15.285369]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
      [   15.286105] RIP: 0033:0x7fae49f19469
      [   15.286638] Code: 00 f3 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d ff 49 2b 00 f7 d8 64 89 01 48
      [   15.289295] RSP: 002b:00007fae4a609da8 EFLAGS: 00000246 ORIG_RAX: 000000000000002a
      [   15.290375] RAX: ffffffffffffffda RBX: 000000000049bf00 RCX: 00007fae49f19469
      [   15.291403] RDX: 0000000000000010 RSI: 00000000200000c0 RDI: 0000000000000005
      [   15.292437] RBP: 000000000049bf00 R08: 0000000000000000 R09: 0000000000000000
      [   15.293456] R10: 0000000000000000 R11: 0000000000000246 R12: 000000000049bf0c
      [   15.294473] R13: 00007fff0004b6bf R14: 00007fae4a5ea000 R15: 0000000000000003
      [   15.295492] Modules linked in:
      [   15.295944] CR2: 0000000000000048
      [   15.296567] Kernel Offset: disabled
      [   15.296941] ---[ end Kernel panic - not syncing: Fatal exception ]---
      Reported-by: NChristoph Paasch <cpaasch@apple.com>
      Fixes: 84dfe367 (mptcp: send out dedicated ADD_ADDR packet)
      Signed-off-by: NGeliang Tang <geliangtang@gmail.com>
      Reviewed-by: NMat Martineau <mathew.j.martineau@linux.intel.com>
      Link: https://lore.kernel.org/r/ccca4e8f01457a1b495c5d612ed16c5f7a585706.1608010058.git.geliangtang@gmail.comSigned-off-by: NJakub Kicinski <kuba@kernel.org>
      3ae32c07
  8. 15 12月, 2020 7 次提交
  9. 10 12月, 2020 14 次提交
  10. 08 12月, 2020 1 次提交
  11. 04 12月, 2020 2 次提交
    • F
      mptcp: emit tcp reset when a join request fails · 3ecfbe3e
      Florian Westphal 提交于
      RFC 8684 says:
       If the token is unknown or the host wants to refuse subflow establishment
       (for example, due to a limit on the number of subflows it will permit),
       the receiver will send back a reset (RST) signal, analogous to an unknown
       port in TCP, containing an MP_TCPRST option (Section 3.6) with an
       "MPTCP specific error" reason code.
      
      mptcp-next doesn't support MP_TCPRST yet, this can be added in another
      change.
      Signed-off-by: NFlorian Westphal <fw@strlen.de>
      Reviewed-by: NMat Martineau <mathew.j.martineau@linux.intel.com>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      3ecfbe3e
    • F
      tcp: merge 'init_req' and 'route_req' functions · 7ea851d1
      Florian Westphal 提交于
      The Multipath-TCP standard (RFC 8684) says that an MPTCP host should send
      a TCP reset if the token in a MP_JOIN request is unknown.
      
      At this time we don't do this, the 3whs completes and the 'new subflow'
      is reset afterwards.  There are two ways to allow MPTCP to send the
      reset.
      
      1. override 'send_synack' callback and emit the rst from there.
         The drawback is that the request socket gets inserted into the
         listeners queue just to get removed again right away.
      
      2. Send the reset from the 'route_req' function instead.
         This avoids the 'add&remove request socket', but route_req lacks the
         skb that is required to send the TCP reset.
      
      Instead of just adding the skb to that function for MPTCP sake alone,
      Paolo suggested to merge init_req and route_req functions.
      
      This saves one indirection from syn processing path and provides the skb
      to the merged function at the same time.
      
      'send reset on unknown mptcp join token' is added in next patch.
      Suggested-by: NPaolo Abeni <pabeni@redhat.com>
      Cc: Eric Dumazet <edumazet@google.com>
      Signed-off-by: NFlorian Westphal <fw@strlen.de>
      Signed-off-by: NJakub Kicinski <kuba@kernel.org>
      7ea851d1