Commit c7d9be66 authored by Ethan Nelson-Moore's avatar Ethan Nelson-Moore Committed by Paolo Abeni
Browse files

net: arcnet: com20020-pci: fix support for 2.5Mbit cards



Commit 8c14f9c7 ("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 bd6f1fd5 ("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: 8c14f9c7 ("ARCNET: add com20020 PCI IDs with metadata")
Fixes: bd6f1fd5 ("net: arcnet: com20020: Fix null-ptr-deref in com20020pci_probe()")
Cc: stable@vger.kernel.org
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Signed-off-by: default avatarEthan Nelson-Moore <enelsonmoore@gmail.com>
Link: https://patch.msgid.link/20260213045510.32368-1-enelsonmoore@gmail.com


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent da29e453
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -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,