net: hsr: prevent NULL pointer dereference in hsr_proxy_announce()
authorJeongjun Park <aha310510@gmail.com>
Sat, 7 Sep 2024 19:03:41 +0000 (04:03 +0900)
committerJakub Kicinski <kuba@kernel.org>
Wed, 11 Sep 2024 22:49:41 +0000 (15:49 -0700)
In the function hsr_proxy_annouance() added in the previous commit
5f703ce5c981 ("net: hsr: Send supervisory frames to HSR network
with ProxyNodeTable data"), the return value of the hsr_port_get_hsr()
function is not checked to be a NULL pointer, which causes a NULL
pointer dereference.

To solve this, we need to add code to check whether the return value
of hsr_port_get_hsr() is NULL.

Reported-by: syzbot+02a42d9b1bd395cbcab4@syzkaller.appspotmail.com
Fixes: 5f703ce5c981 ("net: hsr: Send supervisory frames to HSR network with ProxyNodeTable data")
Signed-off-by: Jeongjun Park <aha310510@gmail.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Acked-by: Lukasz Majewski <lukma@denx.de>
Link: https://patch.msgid.link/20240907190341.162289-1-aha310510@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/hsr/hsr_device.c

index ac56784c327c0293fef13e3ecfa9fc32ca1ab839..049e22bdaafb74ab486ca8bf2ed8e5100e64273b 100644 (file)
@@ -414,6 +414,9 @@ static void hsr_proxy_announce(struct timer_list *t)
         * of SAN nodes stored in ProxyNodeTable.
         */
        interlink = hsr_port_get_hsr(hsr, HSR_PT_INTERLINK);
+       if (!interlink)
+               goto done;
+
        list_for_each_entry_rcu(node, &hsr->proxy_node_db, mac_list) {
                if (hsr_addr_is_redbox(hsr, node->macaddress_A))
                        continue;
@@ -428,6 +431,7 @@ static void hsr_proxy_announce(struct timer_list *t)
                mod_timer(&hsr->announce_proxy_timer, jiffies + interval);
        }
 
+done:
        rcu_read_unlock();
 }