]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
net: arcnet: com20020-pci: fix support for 2.5Mbit cards
authorEthan Nelson-Moore <enelsonmoore@gmail.com>
Fri, 13 Feb 2026 04:55:09 +0000 (20:55 -0800)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 17 Feb 2026 11:14:21 +0000 (12:14 +0100)
Commit 8c14f9c70327 ("ARCNET: add com20020 PCI IDs with metadata")
converted the com20020-pci driver to use a card info structure instead
of a single flag mask in driver_data. However, it failed to take into
account that in the original code, driver_data of 0 indicates a card
with no special flags, not a card that should not have any card info
structure. This introduced a null pointer dereference when cards with
no flags were probed.

Commit bd6f1fd5d33d ("net: arcnet: com20020: Fix null-ptr-deref in
com20020pci_probe()") then papered over this issue by rejecting cards
with no driver_data instead of resolving the problem at its source.

Fix the original issue by introducing a new card info structure for
2.5Mbit cards that does not set any flags and using it if no
driver_data is present.

Fixes: 8c14f9c70327 ("ARCNET: add com20020 PCI IDs with metadata")
Fixes: bd6f1fd5d33d ("net: arcnet: com20020: Fix null-ptr-deref in com20020pci_probe()")
Cc: stable@vger.kernel.org
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Ethan Nelson-Moore <enelsonmoore@gmail.com>
Link: https://patch.msgid.link/20260213045510.32368-1-enelsonmoore@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/arcnet/com20020-pci.c

index 19e411b2e3a775729beb297be10d15232f22fa08..dbadda08dce2355cde38653dee51f7bdaaf6d778 100644 (file)
@@ -115,6 +115,8 @@ static const struct attribute_group com20020_state_group = {
        .attrs = com20020_state_attrs,
 };
 
+static struct com20020_pci_card_info card_info_2p5mbit;
+
 static void com20020pci_remove(struct pci_dev *pdev);
 
 static int com20020pci_probe(struct pci_dev *pdev,
@@ -140,7 +142,7 @@ static int com20020pci_probe(struct pci_dev *pdev,
 
        ci = (struct com20020_pci_card_info *)id->driver_data;
        if (!ci)
-               return -EINVAL;
+               ci = &card_info_2p5mbit;
 
        priv->ci = ci;
        mm = &ci->misc_map;
@@ -347,6 +349,18 @@ static struct com20020_pci_card_info card_info_5mbit = {
        .flags = ARC_IS_5MBIT,
 };
 
+static struct com20020_pci_card_info card_info_2p5mbit = {
+       .name = "ARC-PCI",
+       .devcount = 1,
+       .chan_map_tbl = {
+               {
+                       .bar = 2,
+                       .offset = 0x00,
+                       .size = 0x08,
+               },
+       },
+};
+
 static struct com20020_pci_card_info card_info_sohard = {
        .name = "SOHARD SH ARC-PCI",
        .devcount = 1,