<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux.git/net, branch v6.16-rc2</title>
<subtitle>Linux kernel source tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/'/>
<entry>
<title>Merge tag 'net-6.16-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net</title>
<updated>2025-06-12T16:50:36+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2025-06-12T16:50:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=27605c8c0f69e319df156b471974e4e223035378'/>
<id>27605c8c0f69e319df156b471974e4e223035378</id>
<content type='text'>
Pull networking fixes from Jakub Kicinski:
 "Including fixes from bluetooth and wireless.

  Current release - regressions:

   - af_unix: allow passing cred for embryo without SO_PASSCRED/SO_PASSPIDFD

  Current release - new code bugs:

   - eth: airoha: correct enable mask for RX queues 16-31

   - veth: prevent NULL pointer dereference in veth_xdp_rcv when peer
     disappears under traffic

   - ipv6: move fib6_config_validate() to ip6_route_add(), prevent
     invalid routes

  Previous releases - regressions:

   - phy: phy_caps: don't skip better duplex match on non-exact match

   - dsa: b53: fix untagged traffic sent via cpu tagged with VID 0

   - Revert "wifi: mwifiex: Fix HT40 bandwidth issue.", it caused
     transient packet loss, exact reason not fully understood, yet

  Previous releases - always broken:

   - net: clear the dst when BPF is changing skb protocol (IPv4 &lt;&gt; IPv6)

   - sched: sfq: fix a potential crash on gso_skb handling

   - Bluetooth: intel: improve rx buffer posting to avoid causing issues
     in the firmware

   - eth: intel: i40e: make reset handling robust against multiple
     requests

   - eth: mlx5: ensure FW pages are always allocated on the local NUMA
     node, even when device is configure to 'serve' another node

   - wifi: ath12k: fix GCC_GCC_PCIE_HOT_RST definition for WCN7850,
     prevent kernel crashes

   - wifi: ath11k: avoid burning CPU in ath11k_debugfs_fw_stats_request()
     for 3 sec if fw_stats_done is not set"

* tag 'net-6.16-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (70 commits)
  selftests: drv-net: rss_ctx: Add test for ntuple rules targeting default RSS context
  net: ethtool: Don't check if RSS context exists in case of context 0
  af_unix: Allow passing cred for embryo without SO_PASSCRED/SO_PASSPIDFD.
  ipv6: Move fib6_config_validate() to ip6_route_add().
  net: drv: netdevsim: don't napi_complete() from netpoll
  net/mlx5: HWS, Add error checking to hws_bwc_rule_complex_hash_node_get()
  veth: prevent NULL pointer dereference in veth_xdp_rcv
  net_sched: remove qdisc_tree_flush_backlog()
  net_sched: ets: fix a race in ets_qdisc_change()
  net_sched: tbf: fix a race in tbf_change()
  net_sched: red: fix a race in __red_change()
  net_sched: prio: fix a race in prio_tune()
  net_sched: sch_sfq: reject invalid perturb period
  net: phy: phy_caps: Don't skip better duplex macth on non-exact match
  MAINTAINERS: Update Kuniyuki Iwashima's email address.
  selftests: net: add test case for NAT46 looping back dst
  net: clear the dst when changing skb protocol
  net/mlx5e: Fix number of lanes to UNKNOWN when using data_rate_oper
  net/mlx5e: Fix leak of Geneve TLV option object
  net/mlx5: HWS, make sure the uplink is the last destination
  ...
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Pull networking fixes from Jakub Kicinski:
 "Including fixes from bluetooth and wireless.

  Current release - regressions:

   - af_unix: allow passing cred for embryo without SO_PASSCRED/SO_PASSPIDFD

  Current release - new code bugs:

   - eth: airoha: correct enable mask for RX queues 16-31

   - veth: prevent NULL pointer dereference in veth_xdp_rcv when peer
     disappears under traffic

   - ipv6: move fib6_config_validate() to ip6_route_add(), prevent
     invalid routes

  Previous releases - regressions:

   - phy: phy_caps: don't skip better duplex match on non-exact match

   - dsa: b53: fix untagged traffic sent via cpu tagged with VID 0

   - Revert "wifi: mwifiex: Fix HT40 bandwidth issue.", it caused
     transient packet loss, exact reason not fully understood, yet

  Previous releases - always broken:

   - net: clear the dst when BPF is changing skb protocol (IPv4 &lt;&gt; IPv6)

   - sched: sfq: fix a potential crash on gso_skb handling

   - Bluetooth: intel: improve rx buffer posting to avoid causing issues
     in the firmware

   - eth: intel: i40e: make reset handling robust against multiple
     requests

   - eth: mlx5: ensure FW pages are always allocated on the local NUMA
     node, even when device is configure to 'serve' another node

   - wifi: ath12k: fix GCC_GCC_PCIE_HOT_RST definition for WCN7850,
     prevent kernel crashes

   - wifi: ath11k: avoid burning CPU in ath11k_debugfs_fw_stats_request()
     for 3 sec if fw_stats_done is not set"

* tag 'net-6.16-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (70 commits)
  selftests: drv-net: rss_ctx: Add test for ntuple rules targeting default RSS context
  net: ethtool: Don't check if RSS context exists in case of context 0
  af_unix: Allow passing cred for embryo without SO_PASSCRED/SO_PASSPIDFD.
  ipv6: Move fib6_config_validate() to ip6_route_add().
  net: drv: netdevsim: don't napi_complete() from netpoll
  net/mlx5: HWS, Add error checking to hws_bwc_rule_complex_hash_node_get()
  veth: prevent NULL pointer dereference in veth_xdp_rcv
  net_sched: remove qdisc_tree_flush_backlog()
  net_sched: ets: fix a race in ets_qdisc_change()
  net_sched: tbf: fix a race in tbf_change()
  net_sched: red: fix a race in __red_change()
  net_sched: prio: fix a race in prio_tune()
  net_sched: sch_sfq: reject invalid perturb period
  net: phy: phy_caps: Don't skip better duplex macth on non-exact match
  MAINTAINERS: Update Kuniyuki Iwashima's email address.
  selftests: net: add test case for NAT46 looping back dst
  net: clear the dst when changing skb protocol
  net/mlx5e: Fix number of lanes to UNKNOWN when using data_rate_oper
  net/mlx5e: Fix leak of Geneve TLV option object
  net/mlx5: HWS, make sure the uplink is the last destination
  ...
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge tag 'wireless-2025-06-12' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless</title>
<updated>2025-06-12T15:16:47+00:00</updated>
<author>
<name>Jakub Kicinski</name>
<email>kuba@kernel.org</email>
</author>
<published>2025-06-12T15:16:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=d5705afbaca2f5b3fb8766391ca6c43105d229b2'/>
<id>d5705afbaca2f5b3fb8766391ca6c43105d229b2</id>
<content type='text'>
Johannes Berg says:

====================
Another quick round of updates:

 - revert mwifiex HT40 that was causing issues
 - many ath10k/ath11k/ath12k fixes
 - re-add some iwlwifi code I lost in a merge
 - use kfree_sensitive() on an error path in cfg80211

* tag 'wireless-2025-06-12' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless:
  wifi: cfg80211: use kfree_sensitive() for connkeys cleanup
  wifi: iwlwifi: fix merge damage related to iwl_pci_resume
  Revert "wifi: mwifiex: Fix HT40 bandwidth issue."
  wifi: ath12k: fix uaf in ath12k_core_init()
  wifi: ath12k: Fix hal_reo_cmd_status kernel-doc
  wifi: ath12k: fix GCC_GCC_PCIE_HOT_RST definition for WCN7850
  wifi: ath11k: validate ath11k_crypto_mode on top of ath11k_core_qmi_firmware_ready
  wifi: ath11k: consistently use ath11k_mac_get_fw_stats()
  wifi: ath11k: move locking outside of ath11k_mac_get_fw_stats()
  wifi: ath11k: adjust unlock sequence in ath11k_update_stats_event()
  wifi: ath11k: move some firmware stats related functions outside of debugfs
  wifi: ath11k: don't wait when there is no vdev started
  wifi: ath11k: don't use static variables in ath11k_debugfs_fw_stats_process()
  wifi: ath11k: avoid burning CPU in ath11k_debugfs_fw_stats_request()
  wil6210: fix support for sparrow chipsets
  wifi: ath10k: Avoid vdev delete timeout when firmware is already down
  ath10k: snoc: fix unbalanced IRQ enable in crash recovery
====================

Link: https://patch.msgid.link/20250612082519.11447-3-johannes@sipsolutions.net
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Johannes Berg says:

====================
Another quick round of updates:

 - revert mwifiex HT40 that was causing issues
 - many ath10k/ath11k/ath12k fixes
 - re-add some iwlwifi code I lost in a merge
 - use kfree_sensitive() on an error path in cfg80211

* tag 'wireless-2025-06-12' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless:
  wifi: cfg80211: use kfree_sensitive() for connkeys cleanup
  wifi: iwlwifi: fix merge damage related to iwl_pci_resume
  Revert "wifi: mwifiex: Fix HT40 bandwidth issue."
  wifi: ath12k: fix uaf in ath12k_core_init()
  wifi: ath12k: Fix hal_reo_cmd_status kernel-doc
  wifi: ath12k: fix GCC_GCC_PCIE_HOT_RST definition for WCN7850
  wifi: ath11k: validate ath11k_crypto_mode on top of ath11k_core_qmi_firmware_ready
  wifi: ath11k: consistently use ath11k_mac_get_fw_stats()
  wifi: ath11k: move locking outside of ath11k_mac_get_fw_stats()
  wifi: ath11k: adjust unlock sequence in ath11k_update_stats_event()
  wifi: ath11k: move some firmware stats related functions outside of debugfs
  wifi: ath11k: don't wait when there is no vdev started
  wifi: ath11k: don't use static variables in ath11k_debugfs_fw_stats_process()
  wifi: ath11k: avoid burning CPU in ath11k_debugfs_fw_stats_request()
  wil6210: fix support for sparrow chipsets
  wifi: ath10k: Avoid vdev delete timeout when firmware is already down
  ath10k: snoc: fix unbalanced IRQ enable in crash recovery
====================

Link: https://patch.msgid.link/20250612082519.11447-3-johannes@sipsolutions.net
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: ethtool: Don't check if RSS context exists in case of context 0</title>
<updated>2025-06-12T15:15:35+00:00</updated>
<author>
<name>Gal Pressman</name>
<email>gal@nvidia.com</email>
</author>
<published>2025-06-12T07:19:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=d78ebc772c7ceccf6e655ddb93099f49a1268af4'/>
<id>d78ebc772c7ceccf6e655ddb93099f49a1268af4</id>
<content type='text'>
Context 0 (default context) always exists, there is no need to check
whether it exists or not when adding a flow steering rule.

The existing check fails when creating a flow steering rule for context
0 as it is not stored in the rss_ctx xarray.

For example:
$ ethtool --config-ntuple eth2 flow-type tcp4 dst-ip 194.237.147.23 dst-port 19983 context 0 loc 618
rmgr: Cannot insert RX class rule: Invalid argument
Cannot insert classification rule

An example usecase for this could be:
- A high-priority rule (loc 0) directing specific port traffic to
  context 0.
- A low-priority rule (loc 1) directing all other TCP traffic to context
  1.

This is a user-visible regression that was caught in our testing
environment, it was not reported by a user yet.

Fixes: de7f7582dff2 ("net: ethtool: prevent flow steering to RSS contexts which don't exist")
Reviewed-by: Tariq Toukan &lt;tariqt@nvidia.com&gt;
Reviewed-by: Nimrod Oren &lt;noren@nvidia.com&gt;
Signed-off-by: Gal Pressman &lt;gal@nvidia.com&gt;
Reviewed-by: Joe Damato &lt;jdamato@fastly.com&gt;
Reviewed-by: Edward Cree &lt;ecree.xilinx@gmail.com&gt;
Link: https://patch.msgid.link/20250612071958.1696361-2-gal@nvidia.com
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Context 0 (default context) always exists, there is no need to check
whether it exists or not when adding a flow steering rule.

The existing check fails when creating a flow steering rule for context
0 as it is not stored in the rss_ctx xarray.

For example:
$ ethtool --config-ntuple eth2 flow-type tcp4 dst-ip 194.237.147.23 dst-port 19983 context 0 loc 618
rmgr: Cannot insert RX class rule: Invalid argument
Cannot insert classification rule

An example usecase for this could be:
- A high-priority rule (loc 0) directing specific port traffic to
  context 0.
- A low-priority rule (loc 1) directing all other TCP traffic to context
  1.

This is a user-visible regression that was caught in our testing
environment, it was not reported by a user yet.

Fixes: de7f7582dff2 ("net: ethtool: prevent flow steering to RSS contexts which don't exist")
Reviewed-by: Tariq Toukan &lt;tariqt@nvidia.com&gt;
Reviewed-by: Nimrod Oren &lt;noren@nvidia.com&gt;
Signed-off-by: Gal Pressman &lt;gal@nvidia.com&gt;
Reviewed-by: Joe Damato &lt;jdamato@fastly.com&gt;
Reviewed-by: Edward Cree &lt;ecree.xilinx@gmail.com&gt;
Link: https://patch.msgid.link/20250612071958.1696361-2-gal@nvidia.com
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge tag 'for-net-2025-06-11' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth</title>
<updated>2025-06-12T15:13:48+00:00</updated>
<author>
<name>Jakub Kicinski</name>
<email>kuba@kernel.org</email>
</author>
<published>2025-06-12T15:13:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=d5441acae780c346c04213a62d3eb189216daab1'/>
<id>d5441acae780c346c04213a62d3eb189216daab1</id>
<content type='text'>
Luiz Augusto von Dentz says:

====================
bluetooth pull request for net:

 - eir: Fix NULL pointer deference on eir_get_service_data
 - eir: Fix possible crashes on eir_create_adv_data
 - hci_sync: Fix broadcast/PA when using an existing instance
 - ISO: Fix using BT_SK_PA_SYNC to detect BIS sockets
 - ISO: Fix not using bc_sid as advertisement SID
 - MGMT: Fix sparse errors

* tag 'for-net-2025-06-11' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth:
  Bluetooth: MGMT: Fix sparse errors
  Bluetooth: ISO: Fix not using bc_sid as advertisement SID
  Bluetooth: ISO: Fix using BT_SK_PA_SYNC to detect BIS sockets
  Bluetooth: eir: Fix possible crashes on eir_create_adv_data
  Bluetooth: hci_sync: Fix broadcast/PA when using an existing instance
  Bluetooth: Fix NULL pointer deference on eir_get_service_data
====================

Link: https://patch.msgid.link/20250611204944.1559356-1-luiz.dentz@gmail.com
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Luiz Augusto von Dentz says:

====================
bluetooth pull request for net:

 - eir: Fix NULL pointer deference on eir_get_service_data
 - eir: Fix possible crashes on eir_create_adv_data
 - hci_sync: Fix broadcast/PA when using an existing instance
 - ISO: Fix using BT_SK_PA_SYNC to detect BIS sockets
 - ISO: Fix not using bc_sid as advertisement SID
 - MGMT: Fix sparse errors

* tag 'for-net-2025-06-11' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth:
  Bluetooth: MGMT: Fix sparse errors
  Bluetooth: ISO: Fix not using bc_sid as advertisement SID
  Bluetooth: ISO: Fix using BT_SK_PA_SYNC to detect BIS sockets
  Bluetooth: eir: Fix possible crashes on eir_create_adv_data
  Bluetooth: hci_sync: Fix broadcast/PA when using an existing instance
  Bluetooth: Fix NULL pointer deference on eir_get_service_data
====================

Link: https://patch.msgid.link/20250611204944.1559356-1-luiz.dentz@gmail.com
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>af_unix: Allow passing cred for embryo without SO_PASSCRED/SO_PASSPIDFD.</title>
<updated>2025-06-12T15:13:06+00:00</updated>
<author>
<name>Kuniyuki Iwashima</name>
<email>kuniyu@google.com</email>
</author>
<published>2025-06-11T20:27:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=43fb2b30eea7cfc40214484935b026ec29838a91'/>
<id>43fb2b30eea7cfc40214484935b026ec29838a91</id>
<content type='text'>
Before the cited commit, the kernel unconditionally embedded SCM
credentials to skb for embryo sockets even when both the sender
and listener disabled SO_PASSCRED and SO_PASSPIDFD.

Now, the credentials are added to skb only when configured by the
sender or the listener.

However, as reported in the link below, it caused a regression for
some programs that assume credentials are included in every skb,
but sometimes not now.

The only problematic scenario would be that a socket starts listening
before setting the option.  Then, there will be 2 types of non-small
race window, where a client can send skb without credentials, which
the peer receives as an "invalid" message (and aborts the connection
it seems ?):

  Client                    Server
  ------                    ------
                            s1.listen()  &lt;-- No SO_PASS{CRED,PIDFD}
  s2.connect()
  s2.send()  &lt;-- w/o cred
                            s1.setsockopt(SO_PASS{CRED,PIDFD})
  s2.send()  &lt;-- w/  cred

or

  Client                    Server
  ------                    ------
                            s1.listen()  &lt;-- No SO_PASS{CRED,PIDFD}
  s2.connect()
  s2.send()  &lt;-- w/o cred
                            s3, _ = s1.accept()  &lt;-- Inherit cred options
  s2.send()  &lt;-- w/o cred                            but not set yet

                            s3.setsockopt(SO_PASS{CRED,PIDFD})
  s2.send()  &lt;-- w/  cred

It's unfortunate that buggy programs depend on the behaviour,
but let's restore the previous behaviour.

Fixes: 3f84d577b79d ("af_unix: Inherit sk_flags at connect().")
Reported-by: Jacek Łuczak &lt;difrost.kernel@gmail.com&gt;
Closes: https://lore.kernel.org/all/68d38b0b-1666-4974-85d4-15575789c8d4@gmail.com/
Signed-off-by: Kuniyuki Iwashima &lt;kuniyu@google.com&gt;
Tested-by: Christian Heusel &lt;christian@heusel.eu&gt;
Tested-by: André Almeida &lt;andrealmeid@igalia.com&gt;
Tested-by: Jacek Łuczak &lt;difrost.kernel@gmail.com&gt;
Link: https://patch.msgid.link/20250611202758.3075858-1-kuni1840@gmail.com
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Before the cited commit, the kernel unconditionally embedded SCM
credentials to skb for embryo sockets even when both the sender
and listener disabled SO_PASSCRED and SO_PASSPIDFD.

Now, the credentials are added to skb only when configured by the
sender or the listener.

However, as reported in the link below, it caused a regression for
some programs that assume credentials are included in every skb,
but sometimes not now.

The only problematic scenario would be that a socket starts listening
before setting the option.  Then, there will be 2 types of non-small
race window, where a client can send skb without credentials, which
the peer receives as an "invalid" message (and aborts the connection
it seems ?):

  Client                    Server
  ------                    ------
                            s1.listen()  &lt;-- No SO_PASS{CRED,PIDFD}
  s2.connect()
  s2.send()  &lt;-- w/o cred
                            s1.setsockopt(SO_PASS{CRED,PIDFD})
  s2.send()  &lt;-- w/  cred

or

  Client                    Server
  ------                    ------
                            s1.listen()  &lt;-- No SO_PASS{CRED,PIDFD}
  s2.connect()
  s2.send()  &lt;-- w/o cred
                            s3, _ = s1.accept()  &lt;-- Inherit cred options
  s2.send()  &lt;-- w/o cred                            but not set yet

                            s3.setsockopt(SO_PASS{CRED,PIDFD})
  s2.send()  &lt;-- w/  cred

It's unfortunate that buggy programs depend on the behaviour,
but let's restore the previous behaviour.

Fixes: 3f84d577b79d ("af_unix: Inherit sk_flags at connect().")
Reported-by: Jacek Łuczak &lt;difrost.kernel@gmail.com&gt;
Closes: https://lore.kernel.org/all/68d38b0b-1666-4974-85d4-15575789c8d4@gmail.com/
Signed-off-by: Kuniyuki Iwashima &lt;kuniyu@google.com&gt;
Tested-by: Christian Heusel &lt;christian@heusel.eu&gt;
Tested-by: André Almeida &lt;andrealmeid@igalia.com&gt;
Tested-by: Jacek Łuczak &lt;difrost.kernel@gmail.com&gt;
Link: https://patch.msgid.link/20250611202758.3075858-1-kuni1840@gmail.com
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ipv6: Move fib6_config_validate() to ip6_route_add().</title>
<updated>2025-06-12T15:12:35+00:00</updated>
<author>
<name>Kuniyuki Iwashima</name>
<email>kuniyu@google.com</email>
</author>
<published>2025-06-11T19:35:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=b3979e3d2fc92bf1a2da614fc383b75b9859ef58'/>
<id>b3979e3d2fc92bf1a2da614fc383b75b9859ef58</id>
<content type='text'>
syzkaller created an IPv6 route from a malformed packet, which has
a prefix len &gt; 128, triggering the splat below. [0]

This is a similar issue fixed by commit 586ceac9acb7 ("ipv6: Restore
fib6_config validation for SIOCADDRT.").

The cited commit removed fib6_config validation from some callers
of ip6_add_route().

Let's move the validation back to ip6_route_add() and
ip6_route_multipath_add().

[0]:
UBSAN: array-index-out-of-bounds in ./include/net/ipv6.h:616:34
index 20 is out of range for type '__u8 [16]'
CPU: 1 UID: 0 PID: 7444 Comm: syz.0.708 Not tainted 6.16.0-rc1-syzkaller-g19272b37aa4f #0 PREEMPT
Hardware name: riscv-virtio,qemu (DT)
Call Trace:
[&lt;ffffffff80078a80&gt;] dump_backtrace+0x2e/0x3c arch/riscv/kernel/stacktrace.c:132
[&lt;ffffffff8000327a&gt;] show_stack+0x30/0x3c arch/riscv/kernel/stacktrace.c:138
[&lt;ffffffff80061012&gt;] __dump_stack lib/dump_stack.c:94 [inline]
[&lt;ffffffff80061012&gt;] dump_stack_lvl+0x12e/0x1a6 lib/dump_stack.c:120
[&lt;ffffffff800610a6&gt;] dump_stack+0x1c/0x24 lib/dump_stack.c:129
[&lt;ffffffff8001c0ea&gt;] ubsan_epilogue+0x14/0x46 lib/ubsan.c:233
[&lt;ffffffff819ba290&gt;] __ubsan_handle_out_of_bounds+0xf6/0xf8 lib/ubsan.c:455
[&lt;ffffffff85b363a4&gt;] ipv6_addr_prefix include/net/ipv6.h:616 [inline]
[&lt;ffffffff85b363a4&gt;] ip6_route_info_create+0x8f8/0x96e net/ipv6/route.c:3793
[&lt;ffffffff85b635da&gt;] ip6_route_add+0x2a/0x1aa net/ipv6/route.c:3889
[&lt;ffffffff85b02e08&gt;] addrconf_prefix_route+0x2c4/0x4e8 net/ipv6/addrconf.c:2487
[&lt;ffffffff85b23bb2&gt;] addrconf_prefix_rcv+0x1720/0x1e62 net/ipv6/addrconf.c:2878
[&lt;ffffffff85b92664&gt;] ndisc_router_discovery+0x1a06/0x3504 net/ipv6/ndisc.c:1570
[&lt;ffffffff85b99038&gt;] ndisc_rcv+0x500/0x600 net/ipv6/ndisc.c:1874
[&lt;ffffffff85bc2c18&gt;] icmpv6_rcv+0x145e/0x1e0a net/ipv6/icmp.c:988
[&lt;ffffffff85af6798&gt;] ip6_protocol_deliver_rcu+0x18a/0x1976 net/ipv6/ip6_input.c:436
[&lt;ffffffff85af8078&gt;] ip6_input_finish+0xf4/0x174 net/ipv6/ip6_input.c:480
[&lt;ffffffff85af8262&gt;] NF_HOOK include/linux/netfilter.h:317 [inline]
[&lt;ffffffff85af8262&gt;] NF_HOOK include/linux/netfilter.h:311 [inline]
[&lt;ffffffff85af8262&gt;] ip6_input+0x16a/0x70c net/ipv6/ip6_input.c:491
[&lt;ffffffff85af8dcc&gt;] ip6_mc_input+0x5c8/0x1268 net/ipv6/ip6_input.c:588
[&lt;ffffffff85af6112&gt;] dst_input include/net/dst.h:469 [inline]
[&lt;ffffffff85af6112&gt;] ip6_rcv_finish net/ipv6/ip6_input.c:79 [inline]
[&lt;ffffffff85af6112&gt;] NF_HOOK include/linux/netfilter.h:317 [inline]
[&lt;ffffffff85af6112&gt;] NF_HOOK include/linux/netfilter.h:311 [inline]
[&lt;ffffffff85af6112&gt;] ipv6_rcv+0x5ae/0x6e0 net/ipv6/ip6_input.c:309
[&lt;ffffffff85087e84&gt;] __netif_receive_skb_one_core+0x106/0x16e net/core/dev.c:5977
[&lt;ffffffff85088104&gt;] __netif_receive_skb+0x2c/0x144 net/core/dev.c:6090
[&lt;ffffffff850883c6&gt;] netif_receive_skb_internal net/core/dev.c:6176 [inline]
[&lt;ffffffff850883c6&gt;] netif_receive_skb+0x1aa/0xbf2 net/core/dev.c:6235
[&lt;ffffffff8328656e&gt;] tun_rx_batched.isra.0+0x430/0x686 drivers/net/tun.c:1485
[&lt;ffffffff8329ed3a&gt;] tun_get_user+0x2952/0x3d6c drivers/net/tun.c:1938
[&lt;ffffffff832a21e0&gt;] tun_chr_write_iter+0xc4/0x21c drivers/net/tun.c:1984
[&lt;ffffffff80b9b9ae&gt;] new_sync_write fs/read_write.c:593 [inline]
[&lt;ffffffff80b9b9ae&gt;] vfs_write+0x56c/0xa9a fs/read_write.c:686
[&lt;ffffffff80b9c2be&gt;] ksys_write+0x126/0x228 fs/read_write.c:738
[&lt;ffffffff80b9c42e&gt;] __do_sys_write fs/read_write.c:749 [inline]
[&lt;ffffffff80b9c42e&gt;] __se_sys_write fs/read_write.c:746 [inline]
[&lt;ffffffff80b9c42e&gt;] __riscv_sys_write+0x6e/0x94 fs/read_write.c:746
[&lt;ffffffff80076912&gt;] syscall_handler+0x94/0x118 arch/riscv/include/asm/syscall.h:112
[&lt;ffffffff8637e31e&gt;] do_trap_ecall_u+0x396/0x530 arch/riscv/kernel/traps.c:341
[&lt;ffffffff863a69e2&gt;] handle_exception+0x146/0x152 arch/riscv/kernel/entry.S:197

Fixes: fa76c1674f2e ("ipv6: Move some validation from ip6_route_info_create() to rtm_to_fib6_config().")
Reported-by: syzbot+4c2358694722d304c44e@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/netdev/6849b8c3.a00a0220.1eb5f5.00f0.GAE@google.com/
Signed-off-by: Kuniyuki Iwashima &lt;kuniyu@google.com&gt;
Reviewed-by: Eric Dumazet &lt;edumazet@google.com&gt;
Link: https://patch.msgid.link/20250611193551.2999991-1-kuni1840@gmail.com
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
syzkaller created an IPv6 route from a malformed packet, which has
a prefix len &gt; 128, triggering the splat below. [0]

This is a similar issue fixed by commit 586ceac9acb7 ("ipv6: Restore
fib6_config validation for SIOCADDRT.").

The cited commit removed fib6_config validation from some callers
of ip6_add_route().

Let's move the validation back to ip6_route_add() and
ip6_route_multipath_add().

[0]:
UBSAN: array-index-out-of-bounds in ./include/net/ipv6.h:616:34
index 20 is out of range for type '__u8 [16]'
CPU: 1 UID: 0 PID: 7444 Comm: syz.0.708 Not tainted 6.16.0-rc1-syzkaller-g19272b37aa4f #0 PREEMPT
Hardware name: riscv-virtio,qemu (DT)
Call Trace:
[&lt;ffffffff80078a80&gt;] dump_backtrace+0x2e/0x3c arch/riscv/kernel/stacktrace.c:132
[&lt;ffffffff8000327a&gt;] show_stack+0x30/0x3c arch/riscv/kernel/stacktrace.c:138
[&lt;ffffffff80061012&gt;] __dump_stack lib/dump_stack.c:94 [inline]
[&lt;ffffffff80061012&gt;] dump_stack_lvl+0x12e/0x1a6 lib/dump_stack.c:120
[&lt;ffffffff800610a6&gt;] dump_stack+0x1c/0x24 lib/dump_stack.c:129
[&lt;ffffffff8001c0ea&gt;] ubsan_epilogue+0x14/0x46 lib/ubsan.c:233
[&lt;ffffffff819ba290&gt;] __ubsan_handle_out_of_bounds+0xf6/0xf8 lib/ubsan.c:455
[&lt;ffffffff85b363a4&gt;] ipv6_addr_prefix include/net/ipv6.h:616 [inline]
[&lt;ffffffff85b363a4&gt;] ip6_route_info_create+0x8f8/0x96e net/ipv6/route.c:3793
[&lt;ffffffff85b635da&gt;] ip6_route_add+0x2a/0x1aa net/ipv6/route.c:3889
[&lt;ffffffff85b02e08&gt;] addrconf_prefix_route+0x2c4/0x4e8 net/ipv6/addrconf.c:2487
[&lt;ffffffff85b23bb2&gt;] addrconf_prefix_rcv+0x1720/0x1e62 net/ipv6/addrconf.c:2878
[&lt;ffffffff85b92664&gt;] ndisc_router_discovery+0x1a06/0x3504 net/ipv6/ndisc.c:1570
[&lt;ffffffff85b99038&gt;] ndisc_rcv+0x500/0x600 net/ipv6/ndisc.c:1874
[&lt;ffffffff85bc2c18&gt;] icmpv6_rcv+0x145e/0x1e0a net/ipv6/icmp.c:988
[&lt;ffffffff85af6798&gt;] ip6_protocol_deliver_rcu+0x18a/0x1976 net/ipv6/ip6_input.c:436
[&lt;ffffffff85af8078&gt;] ip6_input_finish+0xf4/0x174 net/ipv6/ip6_input.c:480
[&lt;ffffffff85af8262&gt;] NF_HOOK include/linux/netfilter.h:317 [inline]
[&lt;ffffffff85af8262&gt;] NF_HOOK include/linux/netfilter.h:311 [inline]
[&lt;ffffffff85af8262&gt;] ip6_input+0x16a/0x70c net/ipv6/ip6_input.c:491
[&lt;ffffffff85af8dcc&gt;] ip6_mc_input+0x5c8/0x1268 net/ipv6/ip6_input.c:588
[&lt;ffffffff85af6112&gt;] dst_input include/net/dst.h:469 [inline]
[&lt;ffffffff85af6112&gt;] ip6_rcv_finish net/ipv6/ip6_input.c:79 [inline]
[&lt;ffffffff85af6112&gt;] NF_HOOK include/linux/netfilter.h:317 [inline]
[&lt;ffffffff85af6112&gt;] NF_HOOK include/linux/netfilter.h:311 [inline]
[&lt;ffffffff85af6112&gt;] ipv6_rcv+0x5ae/0x6e0 net/ipv6/ip6_input.c:309
[&lt;ffffffff85087e84&gt;] __netif_receive_skb_one_core+0x106/0x16e net/core/dev.c:5977
[&lt;ffffffff85088104&gt;] __netif_receive_skb+0x2c/0x144 net/core/dev.c:6090
[&lt;ffffffff850883c6&gt;] netif_receive_skb_internal net/core/dev.c:6176 [inline]
[&lt;ffffffff850883c6&gt;] netif_receive_skb+0x1aa/0xbf2 net/core/dev.c:6235
[&lt;ffffffff8328656e&gt;] tun_rx_batched.isra.0+0x430/0x686 drivers/net/tun.c:1485
[&lt;ffffffff8329ed3a&gt;] tun_get_user+0x2952/0x3d6c drivers/net/tun.c:1938
[&lt;ffffffff832a21e0&gt;] tun_chr_write_iter+0xc4/0x21c drivers/net/tun.c:1984
[&lt;ffffffff80b9b9ae&gt;] new_sync_write fs/read_write.c:593 [inline]
[&lt;ffffffff80b9b9ae&gt;] vfs_write+0x56c/0xa9a fs/read_write.c:686
[&lt;ffffffff80b9c2be&gt;] ksys_write+0x126/0x228 fs/read_write.c:738
[&lt;ffffffff80b9c42e&gt;] __do_sys_write fs/read_write.c:749 [inline]
[&lt;ffffffff80b9c42e&gt;] __se_sys_write fs/read_write.c:746 [inline]
[&lt;ffffffff80b9c42e&gt;] __riscv_sys_write+0x6e/0x94 fs/read_write.c:746
[&lt;ffffffff80076912&gt;] syscall_handler+0x94/0x118 arch/riscv/include/asm/syscall.h:112
[&lt;ffffffff8637e31e&gt;] do_trap_ecall_u+0x396/0x530 arch/riscv/kernel/traps.c:341
[&lt;ffffffff863a69e2&gt;] handle_exception+0x146/0x152 arch/riscv/kernel/entry.S:197

Fixes: fa76c1674f2e ("ipv6: Move some validation from ip6_route_info_create() to rtm_to_fib6_config().")
Reported-by: syzbot+4c2358694722d304c44e@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/netdev/6849b8c3.a00a0220.1eb5f5.00f0.GAE@google.com/
Signed-off-by: Kuniyuki Iwashima &lt;kuniyu@google.com&gt;
Reviewed-by: Eric Dumazet &lt;edumazet@google.com&gt;
Link: https://patch.msgid.link/20250611193551.2999991-1-kuni1840@gmail.com
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net_sched: ets: fix a race in ets_qdisc_change()</title>
<updated>2025-06-12T15:05:50+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2025-06-11T11:15:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=d92adacdd8c2960be856e0b82acc5b7c5395fddb'/>
<id>d92adacdd8c2960be856e0b82acc5b7c5395fddb</id>
<content type='text'>
Gerrard Tai reported a race condition in ETS, whenever SFQ perturb timer
fires at the wrong time.

The race is as follows:

CPU 0                                 CPU 1
[1]: lock root
[2]: qdisc_tree_flush_backlog()
[3]: unlock root
 |
 |                                    [5]: lock root
 |                                    [6]: rehash
 |                                    [7]: qdisc_tree_reduce_backlog()
 |
[4]: qdisc_put()

This can be abused to underflow a parent's qlen.

Calling qdisc_purge_queue() instead of qdisc_tree_flush_backlog()
should fix the race, because all packets will be purged from the qdisc
before releasing the lock.

Fixes: b05972f01e7d ("net: sched: tbf: don't call qdisc_put() while holding tree lock")
Reported-by: Gerrard Tai &lt;gerrard.tai@starlabs.sg&gt;
Suggested-by: Gerrard Tai &lt;gerrard.tai@starlabs.sg&gt;
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Link: https://patch.msgid.link/20250611111515.1983366-5-edumazet@google.com
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Gerrard Tai reported a race condition in ETS, whenever SFQ perturb timer
fires at the wrong time.

The race is as follows:

CPU 0                                 CPU 1
[1]: lock root
[2]: qdisc_tree_flush_backlog()
[3]: unlock root
 |
 |                                    [5]: lock root
 |                                    [6]: rehash
 |                                    [7]: qdisc_tree_reduce_backlog()
 |
[4]: qdisc_put()

This can be abused to underflow a parent's qlen.

Calling qdisc_purge_queue() instead of qdisc_tree_flush_backlog()
should fix the race, because all packets will be purged from the qdisc
before releasing the lock.

Fixes: b05972f01e7d ("net: sched: tbf: don't call qdisc_put() while holding tree lock")
Reported-by: Gerrard Tai &lt;gerrard.tai@starlabs.sg&gt;
Suggested-by: Gerrard Tai &lt;gerrard.tai@starlabs.sg&gt;
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Link: https://patch.msgid.link/20250611111515.1983366-5-edumazet@google.com
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net_sched: tbf: fix a race in tbf_change()</title>
<updated>2025-06-12T15:05:50+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2025-06-11T11:15:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=43eb466041216d25dedaef1c383ad7bd89929cbc'/>
<id>43eb466041216d25dedaef1c383ad7bd89929cbc</id>
<content type='text'>
Gerrard Tai reported a race condition in TBF, whenever SFQ perturb timer
fires at the wrong time.

The race is as follows:

CPU 0                                 CPU 1
[1]: lock root
[2]: qdisc_tree_flush_backlog()
[3]: unlock root
 |
 |                                    [5]: lock root
 |                                    [6]: rehash
 |                                    [7]: qdisc_tree_reduce_backlog()
 |
[4]: qdisc_put()

This can be abused to underflow a parent's qlen.

Calling qdisc_purge_queue() instead of qdisc_tree_flush_backlog()
should fix the race, because all packets will be purged from the qdisc
before releasing the lock.

Fixes: b05972f01e7d ("net: sched: tbf: don't call qdisc_put() while holding tree lock")
Reported-by: Gerrard Tai &lt;gerrard.tai@starlabs.sg&gt;
Suggested-by: Gerrard Tai &lt;gerrard.tai@starlabs.sg&gt;
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Cc: Zhengchao Shao &lt;shaozhengchao@huawei.com&gt;
Link: https://patch.msgid.link/20250611111515.1983366-4-edumazet@google.com
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Gerrard Tai reported a race condition in TBF, whenever SFQ perturb timer
fires at the wrong time.

The race is as follows:

CPU 0                                 CPU 1
[1]: lock root
[2]: qdisc_tree_flush_backlog()
[3]: unlock root
 |
 |                                    [5]: lock root
 |                                    [6]: rehash
 |                                    [7]: qdisc_tree_reduce_backlog()
 |
[4]: qdisc_put()

This can be abused to underflow a parent's qlen.

Calling qdisc_purge_queue() instead of qdisc_tree_flush_backlog()
should fix the race, because all packets will be purged from the qdisc
before releasing the lock.

Fixes: b05972f01e7d ("net: sched: tbf: don't call qdisc_put() while holding tree lock")
Reported-by: Gerrard Tai &lt;gerrard.tai@starlabs.sg&gt;
Suggested-by: Gerrard Tai &lt;gerrard.tai@starlabs.sg&gt;
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Cc: Zhengchao Shao &lt;shaozhengchao@huawei.com&gt;
Link: https://patch.msgid.link/20250611111515.1983366-4-edumazet@google.com
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net_sched: red: fix a race in __red_change()</title>
<updated>2025-06-12T15:05:49+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2025-06-11T11:15:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=85a3e0ede38450ea3053b8c45d28cf55208409b8'/>
<id>85a3e0ede38450ea3053b8c45d28cf55208409b8</id>
<content type='text'>
Gerrard Tai reported a race condition in RED, whenever SFQ perturb timer
fires at the wrong time.

The race is as follows:

CPU 0                                 CPU 1
[1]: lock root
[2]: qdisc_tree_flush_backlog()
[3]: unlock root
 |
 |                                    [5]: lock root
 |                                    [6]: rehash
 |                                    [7]: qdisc_tree_reduce_backlog()
 |
[4]: qdisc_put()

This can be abused to underflow a parent's qlen.

Calling qdisc_purge_queue() instead of qdisc_tree_flush_backlog()
should fix the race, because all packets will be purged from the qdisc
before releasing the lock.

Fixes: 0c8d13ac9607 ("net: sched: red: delay destroying child qdisc on replace")
Reported-by: Gerrard Tai &lt;gerrard.tai@starlabs.sg&gt;
Suggested-by: Gerrard Tai &lt;gerrard.tai@starlabs.sg&gt;
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Link: https://patch.msgid.link/20250611111515.1983366-3-edumazet@google.com
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Gerrard Tai reported a race condition in RED, whenever SFQ perturb timer
fires at the wrong time.

The race is as follows:

CPU 0                                 CPU 1
[1]: lock root
[2]: qdisc_tree_flush_backlog()
[3]: unlock root
 |
 |                                    [5]: lock root
 |                                    [6]: rehash
 |                                    [7]: qdisc_tree_reduce_backlog()
 |
[4]: qdisc_put()

This can be abused to underflow a parent's qlen.

Calling qdisc_purge_queue() instead of qdisc_tree_flush_backlog()
should fix the race, because all packets will be purged from the qdisc
before releasing the lock.

Fixes: 0c8d13ac9607 ("net: sched: red: delay destroying child qdisc on replace")
Reported-by: Gerrard Tai &lt;gerrard.tai@starlabs.sg&gt;
Suggested-by: Gerrard Tai &lt;gerrard.tai@starlabs.sg&gt;
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Link: https://patch.msgid.link/20250611111515.1983366-3-edumazet@google.com
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net_sched: prio: fix a race in prio_tune()</title>
<updated>2025-06-12T15:05:49+00:00</updated>
<author>
<name>Eric Dumazet</name>
<email>edumazet@google.com</email>
</author>
<published>2025-06-11T11:15:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=d35acc1be3480505b5931f17e4ea9b7617fea4d3'/>
<id>d35acc1be3480505b5931f17e4ea9b7617fea4d3</id>
<content type='text'>
Gerrard Tai reported a race condition in PRIO, whenever SFQ perturb timer
fires at the wrong time.

The race is as follows:

CPU 0                                 CPU 1
[1]: lock root
[2]: qdisc_tree_flush_backlog()
[3]: unlock root
 |
 |                                    [5]: lock root
 |                                    [6]: rehash
 |                                    [7]: qdisc_tree_reduce_backlog()
 |
[4]: qdisc_put()

This can be abused to underflow a parent's qlen.

Calling qdisc_purge_queue() instead of qdisc_tree_flush_backlog()
should fix the race, because all packets will be purged from the qdisc
before releasing the lock.

Fixes: 7b8e0b6e6599 ("net: sched: prio: delay destroying child qdiscs on change")
Reported-by: Gerrard Tai &lt;gerrard.tai@starlabs.sg&gt;
Suggested-by: Gerrard Tai &lt;gerrard.tai@starlabs.sg&gt;
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Link: https://patch.msgid.link/20250611111515.1983366-2-edumazet@google.com
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Gerrard Tai reported a race condition in PRIO, whenever SFQ perturb timer
fires at the wrong time.

The race is as follows:

CPU 0                                 CPU 1
[1]: lock root
[2]: qdisc_tree_flush_backlog()
[3]: unlock root
 |
 |                                    [5]: lock root
 |                                    [6]: rehash
 |                                    [7]: qdisc_tree_reduce_backlog()
 |
[4]: qdisc_put()

This can be abused to underflow a parent's qlen.

Calling qdisc_purge_queue() instead of qdisc_tree_flush_backlog()
should fix the race, because all packets will be purged from the qdisc
before releasing the lock.

Fixes: 7b8e0b6e6599 ("net: sched: prio: delay destroying child qdiscs on change")
Reported-by: Gerrard Tai &lt;gerrard.tai@starlabs.sg&gt;
Suggested-by: Gerrard Tai &lt;gerrard.tai@starlabs.sg&gt;
Signed-off-by: Eric Dumazet &lt;edumazet@google.com&gt;
Link: https://patch.msgid.link/20250611111515.1983366-2-edumazet@google.com
Signed-off-by: Jakub Kicinski &lt;kuba@kernel.org&gt;
</pre>
</div>
</content>
</entry>
</feed>
