Pull networking fixes from Paolo Abeni: "Including fixes from bluetooth and wireless. Current release - regressions: - bridge: fix use-after-free during router port configuration Current release - new code bugs: - eth: wangxun: fix the creation of page_pool Previous releases - regressions: - netpoll: initialize UDP checksum field before checksumming - wifi: mac80211: finish link init before RCU publish - bluetooth: fix use-after-free in vhci_flush() - eth: - ionic: fix DMA mapping test - bnxt: properly flush XDP redirect lists Previous releases - always broken: - netlink: specs: enforce strict naming of properties - unix: don't leave consecutive consumed OOB skbs. - vsock: fix linux/vm_sockets.h userspace compilation errors - selftests: fix TCP packet checksum" * tag 'net-6.16-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (38 commits) net: libwx: fix the creation of page_pool net: selftests: fix TCP packet checksum atm: Release atm_dev_mutex after removing procfs in atm_dev_deregister(). netlink: specs: enforce strict naming of properties netlink: specs: tc: replace underscores with dashes in names netlink: specs: rt-link: replace underscores with dashes in names netlink: specs: mptcp: replace underscores with dashes in names netlink: specs: ovs_flow: replace underscores with dashes in names netlink: specs: devlink: replace underscores with dashes in names netlink: specs: dpll: replace underscores with dashes in names netlink: specs: ethtool: replace underscores with dashes in names netlink: specs: fou: replace underscores with dashes in names netlink: specs: nfsd: replace underscores with dashes in names net: enetc: Correct endianness handling in _enetc_rd_reg64 atm: idt77252: Add missing `dma_map_error()` bnxt: properly flush XDP redirect lists vsock/uapi: fix linux/vm_sockets.h userspace compilation errors wifi: mac80211: finish link init before RCU publish wifi: iwlwifi: mvm: assume '1' as the default mac_config_cmd version selftest: af_unix: Add tests for -ECONNRESET. ...
Unified · Split
| @@ -2981,6 +2981,11 @@ S: 521 Pleasant Valley Road · 2980 unmodified lines | ||
| 2981 | 2981 | S: Potsdam, New York 13676 |
| 2982 | 2982 | S: USA |
| 2983 | 2983 | |
| 2984 | +N: Shannon Nelson | |
| 2985 | +E: sln@onemain.com | |
| 2986 | +D: Worked on several network drivers including | |
| 2987 | +D: ixgbe, i40e, ionic, pds_core, pds_vdpa, pds_fwctl | |
| 2988 | + | |
| 2984 | 2989 | N: Dave Neuer |
| 2985 | 2990 | E: dave.neuer@pobox.com |
| 2986 | 2991 | D: Helped implement support for Compaq's H31xx series iPAQs |
| @@ -6,6 +6,9 @@ $schema: https://json-schema.org/draft-07/schema · 5 unmodified lines | ||
| 6 | 6 | |
| 7 | 7 | # Common defines |
| 8 | 8 | $defs: |
| 9 | + name: | |
| 10 | + type: string | |
| 11 | + pattern: ^[0-9a-z-]+$ | |
| 9 | 12 | uint: |
| 10 | 13 | type: integer |
| 11 | 14 | minimum: 0 |
| @@ -76,7 +79,7 @@ properties: · 64 unmodified lines | ||
| 76 | 79 | additionalProperties: False |
| 77 | 80 | properties: |
| 78 | 81 | name: |
| 79 | − type: string | |
| 82 | + $ref: '#/$defs/name' | |
| 80 | 83 | header: |
| 81 | 84 | description: For C-compatible languages, header which already defines this value. |
| 82 | 85 | type: string |
| @@ -103,7 +106,7 @@ properties: · 20 unmodified lines | ||
| 103 | 106 | additionalProperties: False |
| 104 | 107 | properties: |
| 105 | 108 | name: |
| 106 | − type: string | |
| 109 | + $ref: '#/$defs/name' | |
| 107 | 110 | value: |
| 108 | 111 | type: integer |
| 109 | 112 | doc: |
| @@ -132,7 +135,7 @@ properties: · 22 unmodified lines | ||
| 132 | 135 | additionalProperties: False |
| 133 | 136 | properties: |
| 134 | 137 | name: |
| 135 | − type: string | |
| 138 | + $ref: '#/$defs/name' | |
| 136 | 139 | type: |
| 137 | 140 | description: The netlink attribute type |
| 138 | 141 | enum: [ u8, u16, u32, u64, s8, s16, s32, s64, string, binary ] |
| @@ -169,7 +172,7 @@ properties: · 30 unmodified lines | ||
| 169 | 172 | name: |
| 170 | 173 | description: | |
| 171 | 174 | Name used when referring to this space in other definitions, not used outside of the spec. |
| 172 | − type: string | |
| 175 | + $ref: '#/$defs/name' | |
| 173 | 176 | name-prefix: |
| 174 | 177 | description: | |
| 175 | 178 | Prefix for the C enum name of the attributes. Default family[name]-set[name]-a- |
| @@ -206,7 +209,7 @@ properties: · 30 unmodified lines | ||
| 206 | 209 | additionalProperties: False |
| 207 | 210 | properties: |
| 208 | 211 | name: |
| 209 | − type: string | |
| 212 | + $ref: '#/$defs/name' | |
| 210 | 213 | type: &attr-type |
| 211 | 214 | description: The netlink attribute type |
| 212 | 215 | enum: [ unused, pad, flag, binary, bitfield32, |
| @@ -348,7 +351,7 @@ properties: · 135 unmodified lines | ||
| 348 | 351 | properties: |
| 349 | 352 | name: |
| 350 | 353 | description: Name of the operation, also defining its C enum value in uAPI. |
| 351 | − type: string | |
| 354 | + $ref: '#/$defs/name' | |
| 352 | 355 | doc: |
| 353 | 356 | description: Documentation for the command. |
| 354 | 357 | type: string |
| @@ -6,6 +6,9 @@ $schema: https://json-schema.org/draft-07/schema · 5 unmodified lines | ||
| 6 | 6 | |
| 7 | 7 | # Common defines |
| 8 | 8 | $defs: |
| 9 | + name: | |
| 10 | + type: string | |
| 11 | + pattern: ^[0-9a-z-]+$ | |
| 9 | 12 | uint: |
| 10 | 13 | type: integer |
| 11 | 14 | minimum: 0 |
| @@ -29,7 +32,7 @@ additionalProperties: False · 17 unmodified lines | ||
| 29 | 32 | properties: |
| 30 | 33 | name: |
| 31 | 34 | description: Name of the genetlink family. |
| 32 | − type: string | |
| 35 | + $ref: '#/$defs/name' | |
| 33 | 36 | doc: |
| 34 | 37 | type: string |
| 35 | 38 | protocol: |
| @@ -48,7 +51,7 @@ properties: · 12 unmodified lines | ||
| 48 | 51 | additionalProperties: False |
| 49 | 52 | properties: |
| 50 | 53 | name: |
| 51 | − type: string | |
| 54 | + $ref: '#/$defs/name' | |
| 52 | 55 | header: |
| 53 | 56 | description: For C-compatible languages, header which already defines this value. |
| 54 | 57 | type: string |
| @@ -75,7 +78,7 @@ properties: · 20 unmodified lines | ||
| 75 | 78 | additionalProperties: False |
| 76 | 79 | properties: |
| 77 | 80 | name: |
| 78 | − type: string | |
| 81 | + $ref: '#/$defs/name' | |
| 79 | 82 | value: |
| 80 | 83 | type: integer |
| 81 | 84 | doc: |
| @@ -96,7 +99,7 @@ properties: · 14 unmodified lines | ||
| 96 | 99 | name: |
| 97 | 100 | description: | |
| 98 | 101 | Name used when referring to this space in other definitions, not used outside of the spec. |
| 99 | − type: string | |
| 102 | + $ref: '#/$defs/name' | |
| 100 | 103 | name-prefix: |
| 101 | 104 | description: | |
| 102 | 105 | Prefix for the C enum name of the attributes. Default family[name]-set[name]-a- |
| @@ -121,7 +124,7 @@ properties: · 18 unmodified lines | ||
| 121 | 124 | additionalProperties: False |
| 122 | 125 | properties: |
| 123 | 126 | name: |
| 124 | − type: string | |
| 127 | + $ref: '#/$defs/name' | |
| 125 | 128 | type: &attr-type |
| 126 | 129 | enum: [ unused, pad, flag, binary, |
| 127 | 130 | uint, sint, u8, u16, u32, u64, s8, s16, s32, s64, |
| @@ -243,7 +246,7 @@ properties: · 115 unmodified lines | ||
| 243 | 246 | properties: |
| 244 | 247 | name: |
| 245 | 248 | description: Name of the operation, also defining its C enum value in uAPI. |
| 246 | − type: string | |
| 249 | + $ref: '#/$defs/name' | |
| 247 | 250 | doc: |
| 248 | 251 | description: Documentation for the command. |
| 249 | 252 | type: string |
| @@ -327,7 +330,7 @@ properties: · 77 unmodified lines | ||
| 327 | 330 | name: |
| 328 | 331 | description: | |
| 329 | 332 | The name for the group, used to form the define and the value of the define. |
| 330 | − type: string | |
| 333 | + $ref: '#/$defs/name' | |
| 331 | 334 | flags: *cmd_flags |
| 332 | 335 | |
| 333 | 336 | kernel-family: |
| @@ -6,6 +6,12 @@ $schema: https://json-schema.org/draft-07/schema · 5 unmodified lines | ||
| 6 | 6 | |
| 7 | 7 | # Common defines |
| 8 | 8 | $defs: |
| 9 | + name: | |
| 10 | + type: string | |
| 11 | + pattern: ^[0-9a-z-]+$ | |
| 12 | + name-cap: | |
| 13 | + type: string | |
| 14 | + pattern: ^[0-9a-zA-Z-]+$ | |
| 9 | 15 | uint: |
| 10 | 16 | type: integer |
| 11 | 17 | minimum: 0 |
| @@ -71,7 +77,7 @@ properties: · 59 unmodified lines | ||
| 71 | 77 | additionalProperties: False |
| 72 | 78 | properties: |
| 73 | 79 | name: |
| 74 | − type: string | |
| 80 | + $ref: '#/$defs/name' | |
| 75 | 81 | header: |
| 76 | 82 | description: For C-compatible languages, header which already defines this value. |
| 77 | 83 | type: string |
| @@ -98,7 +104,7 @@ properties: · 20 unmodified lines | ||
| 98 | 104 | additionalProperties: False |
| 99 | 105 | properties: |
| 100 | 106 | name: |
| 101 | − type: string | |
| 107 | + $ref: '#/$defs/name' | |
| 102 | 108 | value: |
| 103 | 109 | type: integer |
| 104 | 110 | doc: |
| @@ -124,7 +130,7 @@ properties: · 19 unmodified lines | ||
| 124 | 130 | additionalProperties: False |
| 125 | 131 | properties: |
| 126 | 132 | name: |
| 127 | − type: string | |
| 133 | + $ref: '#/$defs/name-cap' | |
| 128 | 134 | type: |
| 129 | 135 | description: | |
| 130 | 136 | The netlink attribute type. Members of type 'binary' or 'pad' |
| @@ -183,7 +189,7 @@ properties: · 52 unmodified lines | ||
| 183 | 189 | name: |
| 184 | 190 | description: | |
| 185 | 191 | Name used when referring to this space in other definitions, not used outside of the spec. |
| 186 | − type: string | |
| 192 | + $ref: '#/$defs/name' | |
| 187 | 193 | name-prefix: |
| 188 | 194 | description: | |
| 189 | 195 | Prefix for the C enum name of the attributes. Default family[name]-set[name]-a- |
| @@ -220,7 +226,7 @@ properties: · 30 unmodified lines | ||
| 220 | 226 | additionalProperties: False |
| 221 | 227 | properties: |
| 222 | 228 | name: |
| 223 | − type: string | |
| 229 | + $ref: '#/$defs/name' | |
| 224 | 230 | type: &attr-type |
| 225 | 231 | description: The netlink attribute type |
| 226 | 232 | enum: [ unused, pad, flag, binary, bitfield32, |
| @@ -408,7 +414,7 @@ properties: · 181 unmodified lines | ||
| 408 | 414 | properties: |
| 409 | 415 | name: |
| 410 | 416 | description: Name of the operation, also defining its C enum value in uAPI. |
| 411 | − type: string | |
| 417 | + $ref: '#/$defs/name' | |
| 412 | 418 | doc: |
| 413 | 419 | description: Documentation for the command. |
| 414 | 420 | type: string |
| @@ -38,15 +38,15 @@ definitions: · 37 unmodified lines | ||
| 38 | 38 | - |
| 39 | 39 | name: dsa |
| 40 | 40 | - |
| 41 | − name: pci_pf | |
| 41 | + name: pci-pf | |
| 42 | 42 | - |
| 43 | − name: pci_vf | |
| 43 | + name: pci-vf | |
| 44 | 44 | - |
| 45 | 45 | name: virtual |
| 46 | 46 | - |
| 47 | 47 | name: unused |
| 48 | 48 | - |
| 49 | − name: pci_sf | |
| 49 | + name: pci-sf | |
| 50 | 50 | - |
| 51 | 51 | type: enum |
| 52 | 52 | name: port-fn-state |
| @@ -220,7 +220,7 @@ definitions: · 167 unmodified lines | ||
| 220 | 220 | - |
| 221 | 221 | name: flag |
| 222 | 222 | - |
| 223 | − name: nul_string | |
| 223 | + name: nul-string | |
| 224 | 224 | value: 10 |
| 225 | 225 | - |
| 226 | 226 | name: binary |
| @@ -188,7 +188,7 @@ definitions: · 187 unmodified lines | ||
| 188 | 188 | value: 10000 |
| 189 | 189 | - |
| 190 | 190 | type: const |
| 191 | − name: pin-frequency-77_5-khz | |
| 191 | + name: pin-frequency-77-5-khz | |
| 192 | 192 | value: 77500 |
| 193 | 193 | - |
| 194 | 194 | type: const |
| @@ -48,7 +48,7 @@ definitions: · 47 unmodified lines | ||
| 48 | 48 | name: started |
| 49 | 49 | doc: The firmware flashing process has started. |
| 50 | 50 | - |
| 51 | − name: in_progress | |
| 51 | + name: in-progress | |
| 52 | 52 | doc: The firmware flashing process is in progress. |
| 53 | 53 | - |
| 54 | 54 | name: completed |
| @@ -1422,7 +1422,7 @@ attribute-sets: · 1367 unmodified lines | ||
| 1422 | 1422 | name: hkey |
| 1423 | 1423 | type: binary |
| 1424 | 1424 | - |
| 1425 | − name: input_xfrm | |
| 1425 | + name: input-xfrm | |
| 1426 | 1426 | type: u32 |
| 1427 | 1427 | - |
| 1428 | 1428 | name: start-context |
| @@ -2238,7 +2238,7 @@ operations: · 809 unmodified lines | ||
| 2238 | 2238 | - hfunc |
| 2239 | 2239 | - indir |
| 2240 | 2240 | - hkey |
| 2241 | − - input_xfrm | |
| 2241 | + - input-xfrm | |
| 2242 | 2242 | dump: |
| 2243 | 2243 | request: |
| 2244 | 2244 | attributes: |
| @@ -15,7 +15,7 @@ kernel-policy: global · 14 unmodified lines | ||
| 15 | 15 | definitions: |
| 16 | 16 | - |
| 17 | 17 | type: enum |
| 18 | − name: encap_type | |
| 18 | + name: encap-type | |
| 19 | 19 | name-prefix: fou-encap- |
| 20 | 20 | enum-name: |
| 21 | 21 | entries: [ unspec, direct, gue ] |
| @@ -43,26 +43,26 @@ attribute-sets: · 21 unmodified lines | ||
| 43 | 43 | name: type |
| 44 | 44 | type: u8 |
| 45 | 45 | - |
| 46 | − name: remcsum_nopartial | |
| 46 | + name: remcsum-nopartial | |
| 47 | 47 | type: flag |
| 48 | 48 | - |
| 49 | − name: local_v4 | |
| 49 | + name: local-v4 | |
| 50 | 50 | type: u32 |
| 51 | 51 | - |
| 52 | − name: local_v6 | |
| 52 | + name: local-v6 | |
| 53 | 53 | type: binary |
| 54 | 54 | checks: |
| 55 | 55 | min-len: 16 |
| 56 | 56 | - |
| 57 | − name: peer_v4 | |
| 57 | + name: peer-v4 | |
| 58 | 58 | type: u32 |
| 59 | 59 | - |
| 60 | − name: peer_v6 | |
| 60 | + name: peer-v6 | |
| 61 | 61 | type: binary |
| 62 | 62 | checks: |
| 63 | 63 | min-len: 16 |
| 64 | 64 | - |
| 65 | − name: peer_port | |
| 65 | + name: peer-port | |
| 66 | 66 | type: u16 |
| 67 | 67 | byte-order: big-endian |
| 68 | 68 | - |
| @@ -90,12 +90,12 @@ operations: · 21 unmodified lines | ||
| 90 | 90 | - port |
| 91 | 91 | - ipproto |
| 92 | 92 | - type |
| 93 | − - remcsum_nopartial | |
| 94 | − - local_v4 | |
| 95 | − - peer_v4 | |
| 96 | − - local_v6 | |
| 97 | − - peer_v6 | |
| 98 | − - peer_port | |
| 93 | + - remcsum-nopartial | |
| 94 | + - local-v4 | |
| 95 | + - peer-v4 | |
| 96 | + - local-v6 | |
| 97 | + - peer-v6 | |
| 98 | + - peer-port | |
| 99 | 99 | - ifindex |
| 100 | 100 | |
| 101 | 101 | - |
| @@ -112,11 +112,11 @@ operations: · 10 unmodified lines | ||
| 112 | 112 | - af |
| 113 | 113 | - ifindex |
| 114 | 114 | - port |
| 115 | − - peer_port | |
| 116 | − - local_v4 | |
| 117 | − - peer_v4 | |
| 118 | − - local_v6 | |
| 119 | − - peer_v6 | |
| 115 | + - peer-port | |
| 116 | + - local-v4 | |
| 117 | + - peer-v4 | |
| 118 | + - local-v6 | |
| 119 | + - peer-v6 | |
| 120 | 120 | |
| 121 | 121 | - |
| 122 | 122 | name: get |
| @@ -57,21 +57,21 @@ definitions: · 56 unmodified lines | ||
| 57 | 57 | doc: >- |
| 58 | 58 | A new subflow has been established. 'error' should not be set. |
| 59 | 59 | Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 | |
| 60 | − daddr6, sport, dport, backup, if_idx [, error]. | |
| 60 | + daddr6, sport, dport, backup, if-idx [, error]. | |
| 61 | 61 | - |
| 62 | 62 | name: sub-closed |
| 63 | 63 | doc: >- |
| 64 | 64 | A subflow has been closed. An error (copy of sk_err) could be set if an |
| 65 | 65 | error has been detected for this subflow. |
| 66 | 66 | Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 | |
| 67 | − daddr6, sport, dport, backup, if_idx [, error]. | |
| 67 | + daddr6, sport, dport, backup, if-idx [, error]. | |
| 68 | 68 | - |
| 69 | 69 | name: sub-priority |
| 70 | 70 | value: 13 |
| 71 | 71 | doc: >- |
| 72 | 72 | The priority of a subflow has changed. 'error' should not be set. |
| 73 | 73 | Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 | |
| 74 | − daddr6, sport, dport, backup, if_idx [, error]. | |
| 74 | + daddr6, sport, dport, backup, if-idx [, error]. | |
| 75 | 75 | - |
| 76 | 76 | name: listener-created |
| 77 | 77 | value: 15 |
| @@ -255,7 +255,7 @@ attribute-sets: · 177 unmodified lines | ||
| 255 | 255 | name: timeout |
| 256 | 256 | type: u32 |
| 257 | 257 | - |
| 258 | − name: if_idx | |
| 258 | + name: if-idx | |
| 259 | 259 | type: u32 |
| 260 | 260 | - |
| 261 | 261 | name: reset-reason |
| @@ -27,7 +27,7 @@ attribute-sets: · 26 unmodified lines | ||
| 27 | 27 | name: proc |
| 28 | 28 | type: u32 |
| 29 | 29 | - |
| 30 | − name: service_time | |
| 30 | + name: service-time | |
| 31 | 31 | type: s64 |
| 32 | 32 | - |
| 33 | 33 | name: pad |
| @@ -139,7 +139,7 @@ operations: · 105 unmodified lines | ||
| 139 | 139 | - prog |
| 140 | 140 | - version |
| 141 | 141 | - proc |
| 142 | − - service_time | |
| 142 | + - service-time | |
| 143 | 143 | - saddr4 |
| 144 | 144 | - daddr4 |
| 145 | 145 | - saddr6 |
| @@ -216,7 +216,7 @@ definitions: · 215 unmodified lines | ||
| 216 | 216 | type: struct |
| 217 | 217 | members: |
| 218 | 218 | - |
| 219 | − name: nd_target | |
| 219 | + name: nd-target | |
| 220 | 220 | type: binary |
| 221 | 221 | len: 16 |
| 222 | 222 | byte-order: big-endian |
| @@ -258,12 +258,12 @@ definitions: · 35 unmodified lines | ||
| 258 | 258 | type: struct |
| 259 | 259 | members: |
| 260 | 260 | - |
| 261 | − name: vlan_tpid | |
| 261 | + name: vlan-tpid | |
| 262 | 262 | type: u16 |
| 263 | 263 | byte-order: big-endian |
| 264 | 264 | doc: Tag protocol identifier (TPID) to push. |
| 265 | 265 | - |
| 266 | − name: vlan_tci | |
| 266 | + name: vlan-tci | |
| 267 | 267 | type: u16 |
| 268 | 268 | byte-order: big-endian |
| 269 | 269 | doc: Tag control identifier (TCI) to push. |
| @@ -603,7 +603,7 @@ definitions: · 602 unmodified lines | ||
| 603 | 603 | name: optmask |
| 604 | 604 | type: u32 |
| 605 | 605 | - |
| 606 | − name: if_stats_msg | |
| 606 | + name: if-stats-msg | |
| 607 | 607 | type: struct |
| 608 | 608 | members: |
| 609 | 609 | - |
| @@ -2486,7 +2486,7 @@ operations: · 1876 unmodified lines | ||
| 2486 | 2486 | name: getstats |
| 2487 | 2487 | doc: Get / dump link stats. |
| 2488 | 2488 | attribute-set: stats-attrs |
| 2489 | − fixed-header: if_stats_msg | |
| 2489 | + fixed-header: if-stats-msg | |
| 2490 | 2490 | do: |
| 2491 | 2491 | request: |
| 2492 | 2492 | value: 94 |
| @@ -232,7 +232,7 @@ definitions: · 231 unmodified lines | ||
| 232 | 232 | type: u8 |
| 233 | 233 | doc: log(P_max / (qth-max - qth-min)) |
| 234 | 234 | - |
| 235 | − name: Scell_log | |
| 235 | + name: Scell-log | |
| 236 | 236 | type: u8 |
| 237 | 237 | doc: cell size for idle damping |
| 238 | 238 | - |
| @@ -253,7 +253,7 @@ definitions: · 14 unmodified lines | ||
| 253 | 253 | name: DPs |
| 254 | 254 | type: u32 |
| 255 | 255 | - |
| 256 | − name: def_DP | |
| 256 | + name: def-DP | |
| 257 | 257 | type: u32 |
| 258 | 258 | - |
| 259 | 259 | name: grio |
| @@ -66,7 +66,7 @@ Admin Function driver · 65 unmodified lines | ||
| 66 | 66 | As mentioned above RVU PF0 is called the admin function (AF), this driver |
| 67 | 67 | supports resource provisioning and configuration of functional blocks. |
| 68 | 68 | Doesn't handle any I/O. It sets up few basic stuff but most of the |
| 69 | −funcionality is achieved via configuration requests from PFs and VFs. | |
| 69 | +functionality is achieved via configuration requests from PFs and VFs. | |
| 70 | 70 | |
| 71 | 71 | PF/VFs communicates with AF via a shared memory region (mailbox). Upon |
| 72 | 72 | receiving requests AF does resource provisioning and other HW configuration. |
| @@ -852,6 +852,8 @@ queue_skb(struct idt77252_dev *card, struct vc_map *vc, · 851 unmodified lines | ||
| 852 | 852 | |
| 853 | 853 | IDT77252_PRV_PADDR(skb) = dma_map_single(&card->pcidev->dev, skb->data, |
| 854 | 854 | skb->len, DMA_TO_DEVICE); |
| 855 | + if (dma_mapping_error(&card->pcidev->dev, IDT77252_PRV_PADDR(skb))) | |
| 856 | + return -ENOMEM; | |
| 855 | 857 | |
| 856 | 858 | error = -EINVAL; |
| 857 | 859 | |
| @@ -1857,6 +1859,8 @@ add_rx_skb(struct idt77252_dev *card, int queue, · 999 unmodified lines | ||
| 1857 | 1859 | paddr = dma_map_single(&card->pcidev->dev, skb->data, |
| 1858 | 1860 | skb_end_pointer(skb) - skb->data, |
| 1859 | 1861 | DMA_FROM_DEVICE); |
| 1862 | + if (dma_mapping_error(&card->pcidev->dev, paddr)) | |
| 1863 | + goto outpoolrm; | |
| 1860 | 1864 | IDT77252_PRV_PADDR(skb) = paddr; |
| 1861 | 1865 | |
| 1862 | 1866 | if (push_rx_skb(card, skb, queue)) { |
| @@ -1871,6 +1875,7 @@ outunmap: · 8 unmodified lines | ||
| 1871 | 1875 | dma_unmap_single(&card->pcidev->dev, IDT77252_PRV_PADDR(skb), |
| 1872 | 1876 | skb_end_pointer(skb) - skb->data, DMA_FROM_DEVICE); |
| 1873 | 1877 | |
| 1878 | +outpoolrm: | |
| 1874 | 1879 | handle = IDT77252_PRV_POOL(skb); |
| 1875 | 1880 | card->sbpool[POOL_QUEUE(handle)].skb[POOL_INDEX(handle)] = NULL; |
| 1876 | 1881 | |
| @@ -2033,6 +2033,28 @@ static void btintel_pcie_release_hdev(struct btintel_pcie_data *data) · 2032 unmodified lines | ||
| 2033 | 2033 | data->hdev = NULL; |
| 2034 | 2034 | } |
| 2035 | 2035 | |
| 2036 | +static void btintel_pcie_disable_interrupts(struct btintel_pcie_data *data) | |
| 2037 | +{ | |
| 2038 | + spin_lock(&data->irq_lock); | |
| 2039 | + btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_MSIX_FH_INT_MASK, data->fh_init_mask); | |
| 2040 | + btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_MSIX_HW_INT_MASK, data->hw_init_mask); | |
| 2041 | + spin_unlock(&data->irq_lock); | |
| 2042 | +} | |
| 2043 | + | |
| 2044 | +static void btintel_pcie_enable_interrupts(struct btintel_pcie_data *data) | |
| 2045 | +{ | |
| 2046 | + spin_lock(&data->irq_lock); | |
| 2047 | + btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_MSIX_FH_INT_MASK, ~data->fh_init_mask); | |
| 2048 | + btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_MSIX_HW_INT_MASK, ~data->hw_init_mask); | |
| 2049 | + spin_unlock(&data->irq_lock); | |
| 2050 | +} | |
| 2051 | + | |
| 2052 | +static void btintel_pcie_synchronize_irqs(struct btintel_pcie_data *data) | |
| 2053 | +{ | |
| 2054 | + for (int i = 0; i < data->alloc_vecs; i++) | |
| 2055 | + synchronize_irq(data->msix_entries[i].vector); | |
| 2056 | +} | |
| 2057 | + | |
| 2036 | 2058 | static int btintel_pcie_setup_internal(struct hci_dev *hdev) |
| 2037 | 2059 | { |
| 2038 | 2060 | struct btintel_pcie_data *data = hci_get_drvdata(hdev); |
| @@ -2152,6 +2174,8 @@ static int btintel_pcie_setup(struct hci_dev *hdev) · 113 unmodified lines | ||
| 2152 | 2174 | bt_dev_err(hdev, "Firmware download retry count: %d", |
| 2153 | 2175 | fw_dl_retry); |
| 2154 | 2176 | btintel_pcie_dump_debug_registers(hdev); |
| 2177 | + btintel_pcie_disable_interrupts(data); | |
| 2178 | + btintel_pcie_synchronize_irqs(data); | |
| 2155 | 2179 | err = btintel_pcie_reset_bt(data); |
| 2156 | 2180 | if (err) { |
| 2157 | 2181 | bt_dev_err(hdev, "Failed to do shr reset: %d", err); |
| @@ -2159,6 +2183,7 @@ static int btintel_pcie_setup(struct hci_dev *hdev) · 1 unmodified line | ||
| 2159 | 2183 | } |
| 2160 | 2184 | usleep_range(10000, 12000); |
| 2161 | 2185 | btintel_pcie_reset_ia(data); |
| 2186 | + btintel_pcie_enable_interrupts(data); | |
| 2162 | 2187 | btintel_pcie_config_msix(data); |
| 2163 | 2188 | err = btintel_pcie_enable_bt(data); |
| 2164 | 2189 | if (err) { |
| @@ -2291,6 +2316,12 @@ static void btintel_pcie_remove(struct pci_dev *pdev) · 126 unmodified lines | ||
| 2291 | 2316 | |
| 2292 | 2317 | data = pci_get_drvdata(pdev); |
| 2293 | 2318 | |
| 2319 | + btintel_pcie_disable_interrupts(data); | |
| 2320 | + | |
| 2321 | + btintel_pcie_synchronize_irqs(data); | |
| 2322 | + | |
| 2323 | + flush_work(&data->rx_work); | |
| 2324 | + | |
| 2294 | 2325 | btintel_pcie_reset_bt(data); |
| 2295 | 2326 | for (int i = 0; i < data->alloc_vecs; i++) { |
| 2296 | 2327 | struct msix_entry *msix_entry; |
| @@ -2303,8 +2334,6 @@ static void btintel_pcie_remove(struct pci_dev *pdev) · 6 unmodified lines | ||
| 2303 | 2334 | |
| 2304 | 2335 | btintel_pcie_release_hdev(data); |
| 2305 | 2336 | |
| 2306 | − flush_work(&data->rx_work); | |
| 2307 | − | |
| 2308 | 2337 | destroy_workqueue(data->workqueue); |
| 2309 | 2338 | |
| 2310 | 2339 | btintel_pcie_free(data); |
| @@ -2392,10 +2392,17 @@ static int qca_serdev_probe(struct serdev_device *serdev) · 2391 unmodified lines | ||
| 2392 | 2392 | */ |
| 2393 | 2393 | qcadev->bt_power->pwrseq = devm_pwrseq_get(&serdev->dev, |
| 2394 | 2394 | "bluetooth"); |
| 2395 | − if (IS_ERR(qcadev->bt_power->pwrseq)) | |
| 2396 | − return PTR_ERR(qcadev->bt_power->pwrseq); | |
| 2397 | 2395 | |
| 2398 | − break; | |
| 2396 | + /* | |
| 2397 | + * Some modules have BT_EN enabled via a hardware pull-up, | |
| 2398 | + * meaning it is not defined in the DTS and is not controlled | |
| 2399 | + * through the power sequence. In such cases, fall through | |
| 2400 | + * to follow the legacy flow. | |
| 2401 | + */ | |
| 2402 | + if (IS_ERR(qcadev->bt_power->pwrseq)) | |
| 2403 | + qcadev->bt_power->pwrseq = NULL; | |
| 2404 | + else | |
| 2405 | + break; | |
| 2399 | 2406 | } |
| 2400 | 2407 | fallthrough; |
| 2401 | 2408 | case QCA_WCN3950: |
| @@ -2989,6 +2989,7 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, · 2988 unmodified lines | ||
| 2989 | 2989 | { |
| 2990 | 2990 | struct bnxt_napi *bnapi = cpr->bnapi; |
| 2991 | 2991 | u32 raw_cons = cpr->cp_raw_cons; |
| 2992 | + bool flush_xdp = false; | |
| 2992 | 2993 | u32 cons; |
| 2993 | 2994 | int rx_pkts = 0; |
| 2994 | 2995 | u8 event = 0; |
| @@ -3042,6 +3043,8 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, · 47 unmodified lines | ||
| 3042 | 3043 | else |
| 3043 | 3044 | rc = bnxt_force_rx_discard(bp, cpr, &raw_cons, |
| 3044 | 3045 | &event); |
| 3046 | + if (event & BNXT_REDIRECT_EVENT) | |
| 3047 | + flush_xdp = true; | |
| 3045 | 3048 | if (likely(rc >= 0)) |
| 3046 | 3049 | rx_pkts += rc; |
| 3047 | 3050 | /* Increment rx_pkts when rc is -ENOMEM to count towards |
| @@ -3066,7 +3069,7 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, · 18 unmodified lines | ||
| 3066 | 3069 | } |
| 3067 | 3070 | } |
| 3068 | 3071 | |
| 3069 | − if (event & BNXT_REDIRECT_EVENT) { | |
| 3072 | + if (flush_xdp) { | |
| 3070 | 3073 | xdp_do_flush(); |
| 3071 | 3074 | event &= ~BNXT_REDIRECT_EVENT; |
| 3072 | 3075 | } |
| @@ -507,7 +507,7 @@ static inline u64 _enetc_rd_reg64(void __iomem *reg) · 506 unmodified lines | ||
| 507 | 507 | tmp = ioread32(reg + 4); |
| 508 | 508 | } while (high != tmp); |
| 509 | 509 | |
| 510 | − return le64_to_cpu((__le64)high << 32 | low); | |
| 510 | + return (u64)high << 32 | low; | |
| 511 | 511 | } |
| 512 | 512 | #endif |
| 513 | 513 | |
| @@ -31,6 +31,9 @@ static void mana_gd_init_pf_regs(struct pci_dev *pdev) · 30 unmodified lines | ||
| 31 | 31 | gc->db_page_base = gc->bar0_va + |
| 32 | 32 | mana_gd_r64(gc, GDMA_PF_REG_DB_PAGE_OFF); |
| 33 | 33 | |
| 34 | + gc->phys_db_page_base = gc->bar0_pa + | |
| 35 | + mana_gd_r64(gc, GDMA_PF_REG_DB_PAGE_OFF); | |
| 36 | + | |
| 34 | 37 | sriov_base_off = mana_gd_r64(gc, GDMA_SRIOV_REG_CFG_BASE_OFF); |
| 35 | 38 | |
| 36 | 39 | sriov_base_va = gc->bar0_va + sriov_base_off; |
| @@ -321,7 +321,7 @@ static int ionic_xdp_post_frame(struct ionic_queue *q, struct xdp_frame *frame, · 320 unmodified lines | ||
| 321 | 321 | len, DMA_TO_DEVICE); |
| 322 | 322 | } else /* XDP_REDIRECT */ { |
| 323 | 323 | dma_addr = ionic_tx_map_single(q, frame->data, len); |
| 324 | − if (!dma_addr) | |
| 324 | + if (dma_addr == DMA_MAPPING_ERROR) | |
| 325 | 325 | return -EIO; |
| 326 | 326 | } |
| 327 | 327 | |
| @@ -357,7 +357,7 @@ static int ionic_xdp_post_frame(struct ionic_queue *q, struct xdp_frame *frame, · 29 unmodified lines | ||
| 357 | 357 | } else { |
| 358 | 358 | dma_addr = ionic_tx_map_frag(q, frag, 0, |
| 359 | 359 | skb_frag_size(frag)); |
| 360 | − if (dma_mapping_error(q->dev, dma_addr)) { | |
| 360 | + if (dma_addr == DMA_MAPPING_ERROR) { | |
| 361 | 361 | ionic_tx_desc_unmap_bufs(q, desc_info); |
| 362 | 362 | return -EIO; |
| 363 | 363 | } |
| @@ -1083,7 +1083,7 @@ static dma_addr_t ionic_tx_map_single(struct ionic_queue *q, · 719 unmodified lines | ||
| 1083 | 1083 | net_warn_ratelimited("%s: DMA single map failed on %s!\n", |
| 1084 | 1084 | dev_name(dev), q->name); |
| 1085 | 1085 | q_to_tx_stats(q)->dma_map_err++; |
| 1086 | − return 0; | |
| 1086 | + return DMA_MAPPING_ERROR; | |
| 1087 | 1087 | } |
| 1088 | 1088 | return dma_addr; |
| 1089 | 1089 | } |
| @@ -1100,7 +1100,7 @@ static dma_addr_t ionic_tx_map_frag(struct ionic_queue *q, · 10 unmodified lines | ||
| 1100 | 1100 | net_warn_ratelimited("%s: DMA frag map failed on %s!\n", |
| 1101 | 1101 | dev_name(dev), q->name); |
| 1102 | 1102 | q_to_tx_stats(q)->dma_map_err++; |
| 1103 | − return 0; | |
| 1103 | + return DMA_MAPPING_ERROR; | |
| 1104 | 1104 | } |
| 1105 | 1105 | return dma_addr; |
| 1106 | 1106 | } |
| @@ -1116,7 +1116,7 @@ static int ionic_tx_map_skb(struct ionic_queue *q, struct sk_buff *skb, · 9 unmodified lines | ||
| 1116 | 1116 | int frag_idx; |
| 1117 | 1117 | |
| 1118 | 1118 | dma_addr = ionic_tx_map_single(q, skb->data, skb_headlen(skb)); |
| 1119 | − if (!dma_addr) | |
| 1119 | + if (dma_addr == DMA_MAPPING_ERROR) | |
| 1120 | 1120 | return -EIO; |
| 1121 | 1121 | buf_info->dma_addr = dma_addr; |
| 1122 | 1122 | buf_info->len = skb_headlen(skb); |
| @@ -1126,7 +1126,7 @@ static int ionic_tx_map_skb(struct ionic_queue *q, struct sk_buff *skb, · 3 unmodified lines | ||
| 1126 | 1126 | nfrags = skb_shinfo(skb)->nr_frags; |
| 1127 | 1127 | for (frag_idx = 0; frag_idx < nfrags; frag_idx++, frag++) { |
| 1128 | 1128 | dma_addr = ionic_tx_map_frag(q, frag, 0, skb_frag_size(frag)); |
| 1129 | − if (!dma_addr) | |
| 1129 | + if (dma_addr == DMA_MAPPING_ERROR) | |
| 1130 | 1130 | goto dma_fail; |
| 1131 | 1131 | buf_info->dma_addr = dma_addr; |
| 1132 | 1132 | buf_info->len = skb_frag_size(frag); |
| @@ -242,7 +242,7 @@ static int qed_mfw_get_tlv_group(u8 tlv_type, u8 *tlv_group) · 241 unmodified lines | ||
| 242 | 242 | } |
| 243 | 243 | |
| 244 | 244 | /* Returns size of the data buffer or, -1 in case TLV data is not available. */ |
| 245 | −static int | |
| 245 | +static noinline_for_stack int | |
| 246 | 246 | qed_mfw_get_gen_tlv_value(struct qed_drv_tlv_hdr *p_tlv, |
| 247 | 247 | struct qed_mfw_tlv_generic *p_drv_buf, |
| 248 | 248 | struct qed_tlv_parsed_buf *p_buf) |
| @@ -304,7 +304,7 @@ qed_mfw_get_gen_tlv_value(struct qed_drv_tlv_hdr *p_tlv, · 55 unmodified lines | ||
| 304 | 304 | return -1; |
| 305 | 305 | } |
| 306 | 306 | |
| 307 | −static int | |
| 307 | +static noinline_for_stack int | |
| 308 | 308 | qed_mfw_get_eth_tlv_value(struct qed_drv_tlv_hdr *p_tlv, |
| 309 | 309 | struct qed_mfw_tlv_eth *p_drv_buf, |
| 310 | 310 | struct qed_tlv_parsed_buf *p_buf) |
| @@ -438,7 +438,7 @@ qed_mfw_get_tlv_time_value(struct qed_mfw_tlv_time *p_time, · 127 unmodified lines | ||
| 438 | 438 | return QED_MFW_TLV_TIME_SIZE; |
| 439 | 439 | } |
| 440 | 440 | |
| 441 | −static int | |
| 441 | +static noinline_for_stack int | |
| 442 | 442 | qed_mfw_get_fcoe_tlv_value(struct qed_drv_tlv_hdr *p_tlv, |
| 443 | 443 | struct qed_mfw_tlv_fcoe *p_drv_buf, |
| 444 | 444 | struct qed_tlv_parsed_buf *p_buf) |
| @@ -1073,7 +1073,7 @@ qed_mfw_get_fcoe_tlv_value(struct qed_drv_tlv_hdr *p_tlv, · 628 unmodified lines | ||
| 1073 | 1073 | return -1; |
| 1074 | 1074 | } |
| 1075 | 1075 | |
| 1076 | −static int | |
| 1076 | +static noinline_for_stack int | |
| 1077 | 1077 | qed_mfw_get_iscsi_tlv_value(struct qed_drv_tlv_hdr *p_tlv, |
| 1078 | 1078 | struct qed_mfw_tlv_iscsi *p_drv_buf, |
| 1079 | 1079 | struct qed_tlv_parsed_buf *p_buf) |
| @@ -2623,7 +2623,7 @@ static int wx_alloc_page_pool(struct wx_ring *rx_ring) · 2622 unmodified lines | ||
| 2623 | 2623 | struct page_pool_params pp_params = { |
| 2624 | 2624 | .flags = PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV, |
| 2625 | 2625 | .order = 0, |
| 2626 | − .pool_size = rx_ring->size, | |
| 2626 | + .pool_size = rx_ring->count, | |
| 2627 | 2627 | .nid = dev_to_node(rx_ring->dev), |
| 2628 | 2628 | .dev = rx_ring->dev, |
| 2629 | 2629 | .dma_dir = DMA_FROM_DEVICE, |
| @@ -1426,6 +1426,7 @@ static const struct usb_device_id products[] = { · 1425 unmodified lines | ||
| 1426 | 1426 | {QMI_QUIRK_SET_DTR(0x22de, 0x9051, 2)}, /* Hucom Wireless HM-211S/K */ |
| 1427 | 1427 | {QMI_FIXED_INTF(0x22de, 0x9061, 3)}, /* WeTelecom WPD-600N */ |
| 1428 | 1428 | {QMI_QUIRK_SET_DTR(0x1e0e, 0x9001, 5)}, /* SIMCom 7100E, 7230E, 7600E ++ */ |
| 1429 | + {QMI_QUIRK_SET_DTR(0x1e0e, 0x9071, 3)}, /* SIMCom 8230C ++ */ | |
| 1429 | 1430 | {QMI_QUIRK_SET_DTR(0x2c7c, 0x0121, 4)}, /* Quectel EC21 Mini PCIe */ |
| 1430 | 1431 | {QMI_QUIRK_SET_DTR(0x2c7c, 0x0191, 4)}, /* Quectel EG91 */ |
| 1431 | 1432 | {QMI_QUIRK_SET_DTR(0x2c7c, 0x0195, 4)}, /* Quectel EG95 */ |
| @@ -203,7 +203,8 @@ il4965_rs_extract_rate(u32 rate_n_flags) · 202 unmodified lines | ||
| 203 | 203 | return (u8) (rate_n_flags & 0xFF); |
| 204 | 204 | } |
| 205 | 205 | |
| 206 | −static void | |
| 206 | +/* noinline works around https://github.com/llvm/llvm-project/issues/143908 */ | |
| 207 | +static noinline_for_stack void | |
| 207 | 208 | il4965_rs_rate_scale_clear_win(struct il_rate_scale_data *win) |
| 208 | 209 | { |
| 209 | 210 | win->data = 0; |
| @@ -32,9 +32,9 @@ static void iwl_mvm_mld_mac_ctxt_cmd_common(struct iwl_mvm *mvm, · 31 unmodified lines | ||
| 32 | 32 | unsigned int link_id; |
| 33 | 33 | int cmd_ver = iwl_fw_lookup_cmd_ver(mvm->fw, |
| 34 | 34 | WIDE_ID(MAC_CONF_GROUP, |
| 35 | − MAC_CONFIG_CMD), 0); | |
| 35 | + MAC_CONFIG_CMD), 1); | |
| 36 | 36 | |
| 37 | − if (WARN_ON(cmd_ver < 1 || cmd_ver > 3)) | |
| 37 | + if (WARN_ON(cmd_ver > 3)) | |
| 38 | 38 | return; |
| 39 | 39 | |
| 40 | 40 | cmd->id_and_color = cpu_to_le32(mvmvif->id); |
| @@ -29,6 +29,7 @@ · 28 unmodified lines | ||
| 29 | 29 | #include <linux/idr.h> |
| 30 | 30 | #include <linux/leds.h> |
| 31 | 31 | #include <linux/rculist.h> |
| 32 | +#include <linux/srcu.h> | |
| 32 | 33 | |
| 33 | 34 | #include <net/bluetooth/hci.h> |
| 34 | 35 | #include <net/bluetooth/hci_drv.h> |
| @@ -347,6 +348,7 @@ struct adv_monitor { · 312 unmodified lines | ||
| 347 | 348 | |
| 348 | 349 | struct hci_dev { |
| 349 | 350 | struct list_head list; |
| 351 | + struct srcu_struct srcu; | |
| 350 | 352 | struct mutex lock; |
| 351 | 353 | |
| 352 | 354 | struct ida unset_handle_ida; |
| @@ -27,14 +27,14 @@ · 26 unmodified lines | ||
| 27 | 27 | * token, rem_id. |
| 28 | 28 | * @MPTCP_EVENT_SUB_ESTABLISHED: A new subflow has been established. 'error' |
| 29 | 29 | * should not be set. Attributes: token, family, loc_id, rem_id, saddr4 | |
| 30 | − * saddr6, daddr4 | daddr6, sport, dport, backup, if_idx [, error]. | |
| 30 | + * saddr6, daddr4 | daddr6, sport, dport, backup, if-idx [, error]. | |
| 31 | 31 | * @MPTCP_EVENT_SUB_CLOSED: A subflow has been closed. An error (copy of |
| 32 | 32 | * sk_err) could be set if an error has been detected for this subflow. |
| 33 | 33 | * Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 | |
| 34 | − * daddr6, sport, dport, backup, if_idx [, error]. | |
| 34 | + * daddr6, sport, dport, backup, if-idx [, error]. | |
| 35 | 35 | * @MPTCP_EVENT_SUB_PRIORITY: The priority of a subflow has changed. 'error' |
| 36 | 36 | * should not be set. Attributes: token, family, loc_id, rem_id, saddr4 | |
| 37 | − * saddr6, daddr4 | daddr6, sport, dport, backup, if_idx [, error]. | |
| 37 | + * saddr6, daddr4 | daddr6, sport, dport, backup, if-idx [, error]. | |
| 38 | 38 | * @MPTCP_EVENT_LISTENER_CREATED: A new PM listener is created. Attributes: |
| 39 | 39 | * family, sport, saddr4 | saddr6. |
| 40 | 40 | * @MPTCP_EVENT_LISTENER_CLOSED: A PM listener is closed. Attributes: family, |
| @@ -17,6 +17,10 @@ · 16 unmodified lines | ||
| 17 | 17 | #ifndef _UAPI_VM_SOCKETS_H |
| 18 | 18 | #define _UAPI_VM_SOCKETS_H |
| 19 | 19 | |
| 20 | +#ifndef __KERNEL__ | |
| 21 | +#include <sys/socket.h> /* for struct sockaddr and sa_family_t */ | |
| 22 | +#endif | |
| 23 | + | |
| 20 | 24 | #include <linux/socket.h> |
| 21 | 25 | #include <linux/types.h> |
| 22 | 26 | |
| @@ -193,12 +193,6 @@ static void clip_push(struct atm_vcc *vcc, struct sk_buff *skb) · 192 unmodified lines | ||
| 193 | 193 | |
| 194 | 194 | pr_debug("\n"); |
| 195 | 195 | |
| 196 | − if (!clip_devs) { | |
| 197 | − atm_return(vcc, skb->truesize); | |
| 198 | − kfree_skb(skb); | |
| 199 | − return; | |
| 200 | − } | |
| 201 | − | |
| 202 | 196 | if (!skb) { |
| 203 | 197 | pr_debug("removing VCC %p\n", clip_vcc); |
| 204 | 198 | if (clip_vcc->entry) |
| @@ -208,6 +202,11 @@ static void clip_push(struct atm_vcc *vcc, struct sk_buff *skb) · 3 unmodified lines | ||
| 208 | 202 | return; |
| 209 | 203 | } |
| 210 | 204 | atm_return(vcc, skb->truesize); |
| 205 | + if (!clip_devs) { | |
| 206 | + kfree_skb(skb); | |
| 207 | + return; | |
| 208 | + } | |
| 209 | + | |
| 211 | 210 | skb->dev = clip_vcc->entry ? clip_vcc->entry->neigh->dev : clip_devs; |
| 212 | 211 | /* clip_vcc->entry == NULL if we don't have an IP address yet */ |
| 213 | 212 | if (!skb->dev) { |
| @@ -146,11 +146,10 @@ void atm_dev_deregister(struct atm_dev *dev) · 145 unmodified lines | ||
| 146 | 146 | */ |
| 147 | 147 | mutex_lock(&atm_dev_mutex); |
| 148 | 148 | list_del(&dev->dev_list); |
| 149 | − mutex_unlock(&atm_dev_mutex); | |
| 150 | − | |
| 151 | 149 | atm_dev_release_vccs(dev); |
| 152 | 150 | atm_unregister_sysfs(dev); |
| 153 | 151 | atm_proc_dev_deregister(dev); |
| 152 | + mutex_unlock(&atm_dev_mutex); | |
| 154 | 153 | |
| 155 | 154 | atm_dev_put(dev); |
| 156 | 155 | } |
| @@ -64,7 +64,7 @@ static DEFINE_IDA(hci_index_ida); · 63 unmodified lines | ||
| 64 | 64 | |
| 65 | 65 | /* Get HCI device by index. |
| 66 | 66 | * Device is held on return. */ |
| 67 | −struct hci_dev *hci_dev_get(int index) | |
| 67 | +static struct hci_dev *__hci_dev_get(int index, int *srcu_index) | |
| 68 | 68 | { |
| 69 | 69 | struct hci_dev *hdev = NULL, *d; |
| 70 | 70 | |
| @@ -77,6 +77,8 @@ struct hci_dev *hci_dev_get(int index) · 6 unmodified lines | ||
| 77 | 77 | list_for_each_entry(d, &hci_dev_list, list) { |
| 78 | 78 | if (d->id == index) { |
| 79 | 79 | hdev = hci_dev_hold(d); |
| 80 | + if (srcu_index) | |
| 81 | + *srcu_index = srcu_read_lock(&d->srcu); | |
| 80 | 82 | break; |
| 81 | 83 | } |
| 82 | 84 | } |
| @@ -84,6 +86,22 @@ struct hci_dev *hci_dev_get(int index) · 1 unmodified line | ||
| 84 | 86 | return hdev; |
| 85 | 87 | } |
| 86 | 88 | |
| 89 | +struct hci_dev *hci_dev_get(int index) | |
| 90 | +{ | |
| 91 | + return __hci_dev_get(index, NULL); | |
| 92 | +} | |
| 93 | + | |
| 94 | +static struct hci_dev *hci_dev_get_srcu(int index, int *srcu_index) | |
| 95 | +{ | |
| 96 | + return __hci_dev_get(index, srcu_index); | |
| 97 | +} | |
| 98 | + | |
| 99 | +static void hci_dev_put_srcu(struct hci_dev *hdev, int srcu_index) | |
| 100 | +{ | |
| 101 | + srcu_read_unlock(&hdev->srcu, srcu_index); | |
| 102 | + hci_dev_put(hdev); | |
| 103 | +} | |
| 104 | + | |
| 87 | 105 | /* ---- Inquiry support ---- */ |
| 88 | 106 | |
| 89 | 107 | bool hci_discovery_active(struct hci_dev *hdev) |
| @@ -568,9 +586,9 @@ static int hci_dev_do_reset(struct hci_dev *hdev) · 478 unmodified lines | ||
| 568 | 586 | int hci_dev_reset(__u16 dev) |
| 569 | 587 | { |
| 570 | 588 | struct hci_dev *hdev; |
| 571 | − int err; | |
| 589 | + int err, srcu_index; | |
| 572 | 590 | |
| 573 | − hdev = hci_dev_get(dev); | |
| 591 | + hdev = hci_dev_get_srcu(dev, &srcu_index); | |
| 574 | 592 | if (!hdev) |
| 575 | 593 | return -ENODEV; |
| 576 | 594 | |
| @@ -592,7 +610,7 @@ int hci_dev_reset(__u16 dev) · 15 unmodified lines | ||
| 592 | 610 | err = hci_dev_do_reset(hdev); |
| 593 | 611 | |
| 594 | 612 | done: |
| 595 | − hci_dev_put(hdev); | |
| 613 | + hci_dev_put_srcu(hdev, srcu_index); | |
| 596 | 614 | return err; |
| 597 | 615 | } |
| 598 | 616 | |
| @@ -2433,6 +2451,11 @@ struct hci_dev *hci_alloc_dev_priv(int sizeof_priv) · 1834 unmodified lines | ||
| 2433 | 2451 | if (!hdev) |
| 2434 | 2452 | return NULL; |
| 2435 | 2453 | |
| 2454 | + if (init_srcu_struct(&hdev->srcu)) { | |
| 2455 | + kfree(hdev); | |
| 2456 | + return NULL; | |
| 2457 | + } | |
| 2458 | + | |
| 2436 | 2459 | hdev->pkt_type = (HCI_DM1 | HCI_DH1 | HCI_HV1); |
| 2437 | 2460 | hdev->esco_type = (ESCO_HV1); |
| 2438 | 2461 | hdev->link_mode = (HCI_LM_ACCEPT); |
| @@ -2678,6 +2701,9 @@ void hci_unregister_dev(struct hci_dev *hdev) · 239 unmodified lines | ||
| 2678 | 2701 | list_del(&hdev->list); |
| 2679 | 2702 | write_unlock(&hci_dev_list_lock); |
| 2680 | 2703 | |
| 2704 | + synchronize_srcu(&hdev->srcu); | |
| 2705 | + cleanup_srcu_struct(&hdev->srcu); | |
| 2706 | + | |
| 2681 | 2707 | disable_work_sync(&hdev->rx_work); |
| 2682 | 2708 | disable_work_sync(&hdev->cmd_work); |
| 2683 | 2709 | disable_work_sync(&hdev->tx_work); |
| @@ -3415,7 +3415,7 @@ static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data, size_t data · 3414 unmodified lines | ||
| 3415 | 3415 | struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC }; |
| 3416 | 3416 | struct l2cap_conf_efs efs; |
| 3417 | 3417 | u8 remote_efs = 0; |
| 3418 | − u16 mtu = L2CAP_DEFAULT_MTU; | |
| 3418 | + u16 mtu = 0; | |
| 3419 | 3419 | u16 result = L2CAP_CONF_SUCCESS; |
| 3420 | 3420 | u16 size; |
| 3421 | 3421 | |
| @@ -3520,6 +3520,13 @@ done: · 98 unmodified lines | ||
| 3520 | 3520 | /* Configure output options and let the other side know |
| 3521 | 3521 | * which ones we don't like. */ |
| 3522 | 3522 | |
| 3523 | + /* If MTU is not provided in configure request, use the most recently | |
| 3524 | + * explicitly or implicitly accepted value for the other direction, | |
| 3525 | + * or the default value. | |
| 3526 | + */ | |
| 3527 | + if (mtu == 0) | |
| 3528 | + mtu = chan->imtu ? chan->imtu : L2CAP_DEFAULT_MTU; | |
| 3529 | + | |
| 3523 | 3530 | if (mtu < L2CAP_DEFAULT_MIN_MTU) |
| 3524 | 3531 | result = L2CAP_CONF_UNACCEPT; |
| 3525 | 3532 | else { |
| @@ -2015,10 +2015,19 @@ void br_multicast_port_ctx_init(struct net_bridge_port *port, · 2014 unmodified lines | ||
| 2015 | 2015 | |
| 2016 | 2016 | void br_multicast_port_ctx_deinit(struct net_bridge_mcast_port *pmctx) |
| 2017 | 2017 | { |
| 2018 | + struct net_bridge *br = pmctx->port->br; | |
| 2019 | + bool del = false; | |
| 2020 | + | |
| 2018 | 2021 | #if IS_ENABLED(CONFIG_IPV6) |
| 2019 | 2022 | timer_delete_sync(&pmctx->ip6_mc_router_timer); |
| 2020 | 2023 | #endif |
| 2021 | 2024 | timer_delete_sync(&pmctx->ip4_mc_router_timer); |
| 2025 | + | |
| 2026 | + spin_lock_bh(&br->multicast_lock); | |
| 2027 | + del |= br_ip6_multicast_rport_del(pmctx); | |
| 2028 | + del |= br_ip4_multicast_rport_del(pmctx); | |
| 2029 | + br_multicast_rport_del_notify(pmctx, del); | |
| 2030 | + spin_unlock_bh(&br->multicast_lock); | |
| 2022 | 2031 | } |
| 2023 | 2032 | |
| 2024 | 2033 | int br_multicast_add_port(struct net_bridge_port *port) |
| @@ -432,6 +432,7 @@ int netpoll_send_udp(struct netpoll *np, const char *msg, int len) · 431 unmodified lines | ||
| 432 | 432 | udph->dest = htons(np->remote_port); |
| 433 | 433 | udph->len = htons(udp_len); |
| 434 | 434 | |
| 435 | + udph->check = 0; | |
| 435 | 436 | if (np->ipv6) { |
| 436 | 437 | udph->check = csum_ipv6_magic(&np->local_ip.in6, |
| 437 | 438 | &np->remote_ip.in6, |
| @@ -460,7 +461,6 @@ int netpoll_send_udp(struct netpoll *np, const char *msg, int len) · 22 unmodified lines | ||
| 460 | 461 | skb_reset_mac_header(skb); |
| 461 | 462 | skb->protocol = eth->h_proto = htons(ETH_P_IPV6); |
| 462 | 463 | } else { |
| 463 | − udph->check = 0; | |
| 464 | 464 | udph->check = csum_tcpudp_magic(np->local_ip.ip, |
| 465 | 465 | np->remote_ip.ip, |
| 466 | 466 | udp_len, IPPROTO_UDP, |
| @@ -160,8 +160,9 @@ static struct sk_buff *net_test_get_skb(struct net_device *ndev, · 159 unmodified lines | ||
| 160 | 160 | skb->csum = 0; |
| 161 | 161 | skb->ip_summed = CHECKSUM_PARTIAL; |
| 162 | 162 | if (attr->tcp) { |
| 163 | − thdr->check = ~tcp_v4_check(skb->len, ihdr->saddr, | |
| 164 | − ihdr->daddr, 0); | |
| 163 | + int l4len = skb->len - skb_transport_offset(skb); | |
| 164 | + | |
| 165 | + thdr->check = ~tcp_v4_check(l4len, ihdr->saddr, ihdr->daddr, 0); | |
| 165 | 166 | skb->csum_start = skb_transport_header(skb) - skb->head; |
| 166 | 167 | skb->csum_offset = offsetof(struct tcphdr, check); |
| 167 | 168 | } else { |
| @@ -93,9 +93,6 @@ void ieee80211_link_init(struct ieee80211_sub_if_data *sdata, · 92 unmodified lines | ||
| 93 | 93 | if (link_id < 0) |
| 94 | 94 | link_id = 0; |
| 95 | 95 | |
| 96 | − rcu_assign_pointer(sdata->vif.link_conf[link_id], link_conf); | |
| 97 | − rcu_assign_pointer(sdata->link[link_id], link); | |
| 98 | − | |
| 99 | 96 | if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) { |
| 100 | 97 | struct ieee80211_sub_if_data *ap_bss; |
| 101 | 98 | struct ieee80211_bss_conf *ap_bss_conf; |
| @@ -145,6 +142,9 @@ void ieee80211_link_init(struct ieee80211_sub_if_data *sdata, · 43 unmodified lines | ||
| 145 | 142 | |
| 146 | 143 | ieee80211_link_debugfs_add(link); |
| 147 | 144 | } |
| 145 | + | |
| 146 | + rcu_assign_pointer(sdata->vif.link_conf[link_id], link_conf); | |
| 147 | + rcu_assign_pointer(sdata->link[link_id], link); | |
| 148 | 148 | } |
| 149 | 149 | |
| 150 | 150 | void ieee80211_link_stop(struct ieee80211_link_data *link) |
| @@ -3884,7 +3884,7 @@ void ieee80211_recalc_dtim(struct ieee80211_local *local, · 3883 unmodified lines | ||
| 3884 | 3884 | { |
| 3885 | 3885 | u64 tsf = drv_get_tsf(local, sdata); |
| 3886 | 3886 | u64 dtim_count = 0; |
| 3887 | − u16 beacon_int = sdata->vif.bss_conf.beacon_int * 1024; | |
| 3887 | + u32 beacon_int = sdata->vif.bss_conf.beacon_int * 1024; | |
| 3888 | 3888 | u8 dtim_period = sdata->vif.bss_conf.dtim_period; |
| 3889 | 3889 | struct ps_data *ps; |
| 3890 | 3890 | u8 bcns_from_dtim; |
| @@ -660,6 +660,11 @@ static void unix_sock_destructor(struct sock *sk) · 659 unmodified lines | ||
| 660 | 660 | #endif |
| 661 | 661 | } |
| 662 | 662 | |
| 663 | +static unsigned int unix_skb_len(const struct sk_buff *skb) | |
| 664 | +{ | |
| 665 | + return skb->len - UNIXCB(skb).consumed; | |
| 666 | +} | |
| 667 | + | |
| 663 | 668 | static void unix_release_sock(struct sock *sk, int embrion) |
| 664 | 669 | { |
| 665 | 670 | struct unix_sock *u = unix_sk(sk); |
| @@ -694,10 +699,16 @@ static void unix_release_sock(struct sock *sk, int embrion) · 28 unmodified lines | ||
| 694 | 699 | |
| 695 | 700 | if (skpair != NULL) { |
| 696 | 701 | if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) { |
| 702 | + struct sk_buff *skb = skb_peek(&sk->sk_receive_queue); | |
| 703 | + | |
| 704 | +#if IS_ENABLED(CONFIG_AF_UNIX_OOB) | |
| 705 | + if (skb && !unix_skb_len(skb)) | |
| 706 | + skb = skb_peek_next(skb, &sk->sk_receive_queue); | |
| 707 | +#endif | |
| 697 | 708 | unix_state_lock(skpair); |
| 698 | 709 | /* No more writes */ |
| 699 | 710 | WRITE_ONCE(skpair->sk_shutdown, SHUTDOWN_MASK); |
| 700 | − if (!skb_queue_empty_lockless(&sk->sk_receive_queue) || embrion) | |
| 711 | + if (skb || embrion) | |
| 701 | 712 | WRITE_ONCE(skpair->sk_err, ECONNRESET); |
| 702 | 713 | unix_state_unlock(skpair); |
| 703 | 714 | skpair->sk_state_change(skpair); |
| @@ -2661,11 +2672,6 @@ static long unix_stream_data_wait(struct sock *sk, long timeo, · 1957 unmodified lines | ||
| 2661 | 2672 | return timeo; |
| 2662 | 2673 | } |
| 2663 | 2674 | |
| 2664 | −static unsigned int unix_skb_len(const struct sk_buff *skb) | |
| 2665 | −{ | |
| 2666 | − return skb->len - UNIXCB(skb).consumed; | |
| 2667 | −} | |
| 2668 | − | |
| 2669 | 2675 | struct unix_stream_read_state { |
| 2670 | 2676 | int (*recv_actor)(struct sk_buff *, int, int, |
| 2671 | 2677 | struct unix_stream_read_state *); |
| @@ -2680,11 +2686,11 @@ struct unix_stream_read_state { · 8 unmodified lines | ||
| 2680 | 2686 | #if IS_ENABLED(CONFIG_AF_UNIX_OOB) |
| 2681 | 2687 | static int unix_stream_recv_urg(struct unix_stream_read_state *state) |
| 2682 | 2688 | { |
| 2689 | + struct sk_buff *oob_skb, *read_skb = NULL; | |
| 2683 | 2690 | struct socket *sock = state->socket; |
| 2684 | 2691 | struct sock *sk = sock->sk; |
| 2685 | 2692 | struct unix_sock *u = unix_sk(sk); |
| 2686 | 2693 | int chunk = 1; |
| 2687 | − struct sk_buff *oob_skb; | |
| 2688 | 2694 | |
| 2689 | 2695 | mutex_lock(&u->iolock); |
| 2690 | 2696 | unix_state_lock(sk); |
| @@ -2699,9 +2705,16 @@ static int unix_stream_recv_urg(struct unix_stream_read_state *state) · 8 unmodified lines | ||
| 2699 | 2705 | |
| 2700 | 2706 | oob_skb = u->oob_skb; |
| 2701 | 2707 | |
| 2702 | − if (!(state->flags & MSG_PEEK)) | |
| 2708 | + if (!(state->flags & MSG_PEEK)) { | |
| 2703 | 2709 | WRITE_ONCE(u->oob_skb, NULL); |
| 2704 | 2710 | |
| 2711 | + if (oob_skb->prev != (struct sk_buff *)&sk->sk_receive_queue && | |
| 2712 | + !unix_skb_len(oob_skb->prev)) { | |
| 2713 | + read_skb = oob_skb->prev; | |
| 2714 | + __skb_unlink(read_skb, &sk->sk_receive_queue); | |
| 2715 | + } | |
| 2716 | + } | |
| 2717 | + | |
| 2705 | 2718 | spin_unlock(&sk->sk_receive_queue.lock); |
| 2706 | 2719 | unix_state_unlock(sk); |
| 2707 | 2720 | |
| @@ -2712,6 +2725,8 @@ static int unix_stream_recv_urg(struct unix_stream_read_state *state) · 4 unmodified lines | ||
| 2712 | 2725 | |
| 2713 | 2726 | mutex_unlock(&u->iolock); |
| 2714 | 2727 | |
| 2728 | + consume_skb(read_skb); | |
| 2729 | + | |
| 2715 | 2730 | if (chunk < 0) |
| 2716 | 2731 | return -EFAULT; |
| 2717 | 2732 | |
| @@ -38,7 +38,7 @@ def test_rss_input_xfrm(cfg, ipver): · 37 unmodified lines | ||
| 38 | 38 | raise KsftSkipEx("socket.SO_INCOMING_CPU was added in Python 3.11") |
| 39 | 39 | |
| 40 | 40 | input_xfrm = cfg.ethnl.rss_get( |
| 41 | − {'header': {'dev-name': cfg.ifname}}).get('input_xfrm') | |
| 41 | + {'header': {'dev-name': cfg.ifname}}).get('input-xfrm') | |
| 42 | 42 | |
| 43 | 43 | # Check for symmetric xor/or-xor |
| 44 | 44 | if not input_xfrm or (input_xfrm != 1 and input_xfrm != 2): |
| @@ -210,7 +210,7 @@ static void __sendpair(struct __test_metadata *_metadata, · 209 unmodified lines | ||
| 210 | 210 | static void __recvpair(struct __test_metadata *_metadata, |
| 211 | 211 | FIXTURE_DATA(msg_oob) *self, |
| 212 | 212 | const char *expected_buf, int expected_len, |
| 213 | − int buf_len, int flags) | |
| 213 | + int buf_len, int flags, bool is_sender) | |
| 214 | 214 | { |
| 215 | 215 | int i, ret[2], recv_errno[2], expected_errno = 0; |
| 216 | 216 | char recv_buf[2][BUF_SZ] = {}; |
| @@ -221,7 +221,9 @@ static void __recvpair(struct __test_metadata *_metadata, · 4 unmodified lines | ||
| 221 | 221 | errno = 0; |
| 222 | 222 | |
| 223 | 223 | for (i = 0; i < 2; i++) { |
| 224 | − ret[i] = recv(self->fd[i * 2 + 1], recv_buf[i], buf_len, flags); | |
| 224 | + int index = is_sender ? i * 2 : i * 2 + 1; | |
| 225 | + | |
| 226 | + ret[i] = recv(self->fd[index], recv_buf[i], buf_len, flags); | |
| 225 | 227 | recv_errno[i] = errno; |
| 226 | 228 | } |
| 227 | 229 | |
| @@ -308,6 +310,20 @@ static void __siocatmarkpair(struct __test_metadata *_metadata, · 80 unmodified lines | ||
| 308 | 310 | ASSERT_EQ(answ[0], answ[1]); |
| 309 | 311 | } |
| 310 | 312 | |
| 313 | +static void __resetpair(struct __test_metadata *_metadata, | |
| 314 | + FIXTURE_DATA(msg_oob) *self, | |
| 315 | + const FIXTURE_VARIANT(msg_oob) *variant, | |
| 316 | + bool reset) | |
| 317 | +{ | |
| 318 | + int i; | |
| 319 | + | |
| 320 | + for (i = 0; i < 2; i++) | |
| 321 | + close(self->fd[i * 2 + 1]); | |
| 322 | + | |
| 323 | + __recvpair(_metadata, self, "", reset ? -ECONNRESET : 0, 1, | |
| 324 | + variant->peek ? MSG_PEEK : 0, true); | |
| 325 | +} | |
| 326 | + | |
| 311 | 327 | #define sendpair(buf, len, flags) \ |
| 312 | 328 | __sendpair(_metadata, self, buf, len, flags) |
| 313 | 329 | |
| @@ -316,9 +332,10 @@ static void __siocatmarkpair(struct __test_metadata *_metadata, · 2 unmodified lines | ||
| 316 | 332 | if (variant->peek) \ |
| 317 | 333 | __recvpair(_metadata, self, \ |
| 318 | 334 | expected_buf, expected_len, \ |
| 319 | − buf_len, (flags) | MSG_PEEK); \ | |
| 335 | + buf_len, (flags) | MSG_PEEK, false); \ | |
| 320 | 336 | __recvpair(_metadata, self, \ |
| 321 | − expected_buf, expected_len, buf_len, flags); \ | |
| 337 | + expected_buf, expected_len, \ | |
| 338 | + buf_len, flags, false); \ | |
| 322 | 339 | } while (0) |
| 323 | 340 | |
| 324 | 341 | #define epollpair(oob_remaining) \ |
| @@ -330,6 +347,9 @@ static void __siocatmarkpair(struct __test_metadata *_metadata, · 5 unmodified lines | ||
| 330 | 347 | #define setinlinepair() \ |
| 331 | 348 | __setinlinepair(_metadata, self) |
| 332 | 349 | |
| 350 | +#define resetpair(reset) \ | |
| 351 | + __resetpair(_metadata, self, variant, reset) | |
| 352 | + | |
| 333 | 353 | #define tcp_incompliant \ |
| 334 | 354 | for (self->tcp_compliant = false; \ |
| 335 | 355 | self->tcp_compliant == false; \ |
| @@ -344,6 +364,21 @@ TEST_F(msg_oob, non_oob) · 8 unmodified lines | ||
| 344 | 364 | recvpair("", -EINVAL, 1, MSG_OOB); |
| 345 | 365 | epollpair(false); |
| 346 | 366 | siocatmarkpair(false); |
| 367 | + | |
| 368 | + resetpair(true); | |
| 369 | +} | |
| 370 | + | |
| 371 | +TEST_F(msg_oob, non_oob_no_reset) | |
| 372 | +{ | |
| 373 | + sendpair("x", 1, 0); | |
| 374 | + epollpair(false); | |
| 375 | + siocatmarkpair(false); | |
| 376 | + | |
| 377 | + recvpair("x", 1, 1, 0); | |
| 378 | + epollpair(false); | |
| 379 | + siocatmarkpair(false); | |
| 380 | + | |
| 381 | + resetpair(false); | |
| 347 | 382 | } |
| 348 | 383 | |
| 349 | 384 | TEST_F(msg_oob, oob) |
| @@ -355,6 +390,19 @@ TEST_F(msg_oob, oob) · 5 unmodified lines | ||
| 355 | 390 | recvpair("x", 1, 1, MSG_OOB); |
| 356 | 391 | epollpair(false); |
| 357 | 392 | siocatmarkpair(true); |
| 393 | + | |
| 394 | + tcp_incompliant { | |
| 395 | + resetpair(false); /* TCP sets -ECONNRESET for ex-OOB. */ | |
| 396 | + } | |
| 397 | +} | |
| 398 | + | |
| 399 | +TEST_F(msg_oob, oob_reset) | |
| 400 | +{ | |
| 401 | + sendpair("x", 1, MSG_OOB); | |
| 402 | + epollpair(true); | |
| 403 | + siocatmarkpair(true); | |
| 404 | + | |
| 405 | + resetpair(true); | |
| 358 | 406 | } |
| 359 | 407 | |
| 360 | 408 | TEST_F(msg_oob, oob_drop) |
| @@ -370,6 +418,8 @@ TEST_F(msg_oob, oob_drop) · 9 unmodified lines | ||
| 370 | 418 | recvpair("", -EINVAL, 1, MSG_OOB); |
| 371 | 419 | epollpair(false); |
| 372 | 420 | siocatmarkpair(false); |
| 421 | + | |
| 422 | + resetpair(false); | |
| 373 | 423 | } |
| 374 | 424 | |
| 375 | 425 | TEST_F(msg_oob, oob_ahead) |
| @@ -385,6 +435,10 @@ TEST_F(msg_oob, oob_ahead) · 9 unmodified lines | ||
| 385 | 435 | recvpair("hell", 4, 4, 0); |
| 386 | 436 | epollpair(false); |
| 387 | 437 | siocatmarkpair(true); |
| 438 | + | |
| 439 | + tcp_incompliant { | |
| 440 | + resetpair(false); /* TCP sets -ECONNRESET for ex-OOB. */ | |
| 441 | + } | |
| 388 | 442 | } |
| 389 | 443 | |
| 390 | 444 | TEST_F(msg_oob, oob_break) |
| @@ -403,6 +457,8 @@ TEST_F(msg_oob, oob_break) · 12 unmodified lines | ||
| 403 | 457 | |
| 404 | 458 | recvpair("", -EAGAIN, 1, 0); |
| 405 | 459 | siocatmarkpair(false); |
| 460 | + | |
| 461 | + resetpair(false); | |
| 406 | 462 | } |
| 407 | 463 | |
| 408 | 464 | TEST_F(msg_oob, oob_ahead_break) |
| @@ -426,6 +482,8 @@ TEST_F(msg_oob, oob_ahead_break) · 17 unmodified lines | ||
| 426 | 482 | recvpair("world", 5, 5, 0); |
| 427 | 483 | epollpair(false); |
| 428 | 484 | siocatmarkpair(false); |
| 485 | + | |
| 486 | + resetpair(false); | |
| 429 | 487 | } |
| 430 | 488 | |
| 431 | 489 | TEST_F(msg_oob, oob_break_drop) |
| @@ -449,6 +507,8 @@ TEST_F(msg_oob, oob_break_drop) · 17 unmodified lines | ||
| 449 | 507 | recvpair("", -EINVAL, 1, MSG_OOB); |
| 450 | 508 | epollpair(false); |
| 451 | 509 | siocatmarkpair(false); |
| 510 | + | |
| 511 | + resetpair(false); | |
| 452 | 512 | } |
| 453 | 513 | |
| 454 | 514 | TEST_F(msg_oob, ex_oob_break) |
| @@ -476,6 +536,8 @@ TEST_F(msg_oob, ex_oob_break) · 21 unmodified lines | ||
| 476 | 536 | recvpair("ld", 2, 2, 0); |
| 477 | 537 | epollpair(false); |
| 478 | 538 | siocatmarkpair(false); |
| 539 | + | |
| 540 | + resetpair(false); | |
| 479 | 541 | } |
| 480 | 542 | |
| 481 | 543 | TEST_F(msg_oob, ex_oob_drop) |
| @@ -498,6 +560,8 @@ TEST_F(msg_oob, ex_oob_drop) · 16 unmodified lines | ||
| 498 | 560 | epollpair(false); |
| 499 | 561 | siocatmarkpair(true); |
| 500 | 562 | } |
| 563 | + | |
| 564 | + resetpair(false); | |
| 501 | 565 | } |
| 502 | 566 | |
| 503 | 567 | TEST_F(msg_oob, ex_oob_drop_2) |
| @@ -523,6 +587,8 @@ TEST_F(msg_oob, ex_oob_drop_2) · 19 unmodified lines | ||
| 523 | 587 | epollpair(false); |
| 524 | 588 | siocatmarkpair(true); |
| 525 | 589 | } |
| 590 | + | |
| 591 | + resetpair(false); | |
| 526 | 592 | } |
| 527 | 593 | |
| 528 | 594 | TEST_F(msg_oob, ex_oob_oob) |
| @@ -546,6 +612,54 @@ TEST_F(msg_oob, ex_oob_oob) · 17 unmodified lines | ||
| 546 | 612 | recvpair("", -EINVAL, 1, MSG_OOB); |
| 547 | 613 | epollpair(false); |
| 548 | 614 | siocatmarkpair(false); |
| 615 | + | |
| 616 | + resetpair(false); | |
| 617 | +} | |
| 618 | + | |
| 619 | +TEST_F(msg_oob, ex_oob_ex_oob) | |
| 620 | +{ | |
| 621 | + sendpair("x", 1, MSG_OOB); | |
| 622 | + epollpair(true); | |
| 623 | + siocatmarkpair(true); | |
| 624 | + | |
| 625 | + recvpair("x", 1, 1, MSG_OOB); | |
| 626 | + epollpair(false); | |
| 627 | + siocatmarkpair(true); | |
| 628 | + | |
| 629 | + sendpair("y", 1, MSG_OOB); | |
| 630 | + epollpair(true); | |
| 631 | + siocatmarkpair(true); | |
| 632 | + | |
| 633 | + recvpair("y", 1, 1, MSG_OOB); | |
| 634 | + epollpair(false); | |
| 635 | + siocatmarkpair(true); | |
| 636 | + | |
| 637 | + tcp_incompliant { | |
| 638 | + resetpair(false); /* TCP sets -ECONNRESET for ex-OOB. */ | |
| 639 | + } | |
| 640 | +} | |
| 641 | + | |
| 642 | +TEST_F(msg_oob, ex_oob_ex_oob_oob) | |
| 643 | +{ | |
| 644 | + sendpair("x", 1, MSG_OOB); | |
| 645 | + epollpair(true); | |
| 646 | + siocatmarkpair(true); | |
| 647 | + | |
| 648 | + recvpair("x", 1, 1, MSG_OOB); | |
| 649 | + epollpair(false); | |
| 650 | + siocatmarkpair(true); | |
| 651 | + | |
| 652 | + sendpair("y", 1, MSG_OOB); | |
| 653 | + epollpair(true); | |
| 654 | + siocatmarkpair(true); | |
| 655 | + | |
| 656 | + recvpair("y", 1, 1, MSG_OOB); | |
| 657 | + epollpair(false); | |
| 658 | + siocatmarkpair(true); | |
| 659 | + | |
| 660 | + sendpair("z", 1, MSG_OOB); | |
| 661 | + epollpair(true); | |
| 662 | + siocatmarkpair(true); | |
| 549 | 663 | } |
| 550 | 664 | |
| 551 | 665 | TEST_F(msg_oob, ex_oob_ahead_break) |
| @@ -576,6 +690,10 @@ TEST_F(msg_oob, ex_oob_ahead_break) · 24 unmodified lines | ||
| 576 | 690 | recvpair("d", 1, 1, MSG_OOB); |
| 577 | 691 | epollpair(false); |
| 578 | 692 | siocatmarkpair(true); |
| 693 | + | |
| 694 | + tcp_incompliant { | |
| 695 | + resetpair(false); /* TCP sets -ECONNRESET for ex-OOB. */ | |
| 696 | + } | |
| 579 | 697 | } |
| 580 | 698 | |
| 581 | 699 | TEST_F(msg_oob, ex_oob_siocatmark) |
| @@ -595,6 +713,8 @@ TEST_F(msg_oob, ex_oob_siocatmark) · 13 unmodified lines | ||
| 595 | 713 | recvpair("hell", 4, 4, 0); /* Intentionally stop at ex-OOB. */ |
| 596 | 714 | epollpair(true); |
| 597 | 715 | siocatmarkpair(false); |
| 716 | + | |
| 717 | + resetpair(true); | |
| 598 | 718 | } |
| 599 | 719 | |
| 600 | 720 | TEST_F(msg_oob, inline_oob) |
| @@ -612,6 +732,8 @@ TEST_F(msg_oob, inline_oob) · 11 unmodified lines | ||
| 612 | 732 | recvpair("x", 1, 1, 0); |
| 613 | 733 | epollpair(false); |
| 614 | 734 | siocatmarkpair(false); |
| 735 | + | |
| 736 | + resetpair(false); | |
| 615 | 737 | } |
| 616 | 738 | |
| 617 | 739 | TEST_F(msg_oob, inline_oob_break) |
| @@ -633,6 +755,8 @@ TEST_F(msg_oob, inline_oob_break) · 15 unmodified lines | ||
| 633 | 755 | recvpair("o", 1, 1, 0); |
| 634 | 756 | epollpair(false); |
| 635 | 757 | siocatmarkpair(false); |
| 758 | + | |
| 759 | + resetpair(false); | |
| 636 | 760 | } |
| 637 | 761 | |
| 638 | 762 | TEST_F(msg_oob, inline_oob_ahead_break) |
| @@ -661,6 +785,8 @@ TEST_F(msg_oob, inline_oob_ahead_break) · 22 unmodified lines | ||
| 661 | 785 | |
| 662 | 786 | epollpair(false); |
| 663 | 787 | siocatmarkpair(false); |
| 788 | + | |
| 789 | + resetpair(false); | |
| 664 | 790 | } |
| 665 | 791 | |
| 666 | 792 | TEST_F(msg_oob, inline_ex_oob_break) |
| @@ -686,6 +812,8 @@ TEST_F(msg_oob, inline_ex_oob_break) · 19 unmodified lines | ||
| 686 | 812 | recvpair("rld", 3, 3, 0); |
| 687 | 813 | epollpair(false); |
| 688 | 814 | siocatmarkpair(false); |
| 815 | + | |
| 816 | + resetpair(false); | |
| 689 | 817 | } |
| 690 | 818 | |
| 691 | 819 | TEST_F(msg_oob, inline_ex_oob_no_drop) |
| @@ -707,6 +835,8 @@ TEST_F(msg_oob, inline_ex_oob_no_drop) · 15 unmodified lines | ||
| 707 | 835 | recvpair("y", 1, 1, 0); |
| 708 | 836 | epollpair(false); |
| 709 | 837 | siocatmarkpair(false); |
| 838 | + | |
| 839 | + resetpair(false); | |
| 710 | 840 | } |
| 711 | 841 | |
| 712 | 842 | TEST_F(msg_oob, inline_ex_oob_drop) |
| @@ -731,6 +861,8 @@ TEST_F(msg_oob, inline_ex_oob_drop) · 18 unmodified lines | ||
| 731 | 861 | epollpair(false); |
| 732 | 862 | siocatmarkpair(false); |
| 733 | 863 | } |
| 864 | + | |
| 865 | + resetpair(false); | |
| 734 | 866 | } |
| 735 | 867 | |
| 736 | 868 | TEST_F(msg_oob, inline_ex_oob_siocatmark) |
| @@ -752,6 +884,8 @@ TEST_F(msg_oob, inline_ex_oob_siocatmark) · 15 unmodified lines | ||
| 752 | 884 | recvpair("hell", 4, 4, 0); /* Intentionally stop at ex-OOB. */ |
| 753 | 885 | epollpair(true); |
| 754 | 886 | siocatmarkpair(false); |
| 887 | + | |
| 888 | + resetpair(true); | |
| 755 | 889 | } |
| 756 | 890 | |
| 757 | 891 | TEST_HARNESS_MAIN |