Skip to content

Commit 1499b89

Browse files
sknseankuba-moo
authored andcommitted
net: dsa: microchip: provide a list of valid protocols for xmit handler
Provide a list of valid protocols for which the driver will provide it's deferred xmit handler. When using DSA_TAG_PROTO_KSZ8795 protocol, it does not provide a "connect" method, therefor ksz_connect() is not allocating ksz_tagger_data. This avoids the following null pointer dereference: ksz_connect_tag_protocol from dsa_register_switch+0x9ac/0xee0 dsa_register_switch from ksz_switch_register+0x65c/0x828 ksz_switch_register from ksz_spi_probe+0x11c/0x168 ksz_spi_probe from spi_probe+0x84/0xa8 spi_probe from really_probe+0xc8/0x2d8 Fixes: ab32f56 ("net: dsa: microchip: ptp: add packet transmission timestamping") Signed-off-by: Sean Nyekjaer <[email protected]> Reviewed-by: Florian Fainelli <[email protected]> Reviewed-by: Vladimir Oltean <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent a041ade commit 1499b89

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

drivers/net/dsa/microchip/ksz_common.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2713,10 +2713,18 @@ static int ksz_connect_tag_protocol(struct dsa_switch *ds,
27132713
{
27142714
struct ksz_tagger_data *tagger_data;
27152715

2716-
tagger_data = ksz_tagger_data(ds);
2717-
tagger_data->xmit_work_fn = ksz_port_deferred_xmit;
2718-
2719-
return 0;
2716+
switch (proto) {
2717+
case DSA_TAG_PROTO_KSZ8795:
2718+
return 0;
2719+
case DSA_TAG_PROTO_KSZ9893:
2720+
case DSA_TAG_PROTO_KSZ9477:
2721+
case DSA_TAG_PROTO_LAN937X:
2722+
tagger_data = ksz_tagger_data(ds);
2723+
tagger_data->xmit_work_fn = ksz_port_deferred_xmit;
2724+
return 0;
2725+
default:
2726+
return -EPROTONOSUPPORT;
2727+
}
27202728
}
27212729

27222730
static int ksz_port_vlan_filtering(struct dsa_switch *ds, int port,

0 commit comments

Comments
 (0)