]> git.baikalelectronics.ru Git - kernel.git/commitdiff
net: sparx5: Fix return type of sparx5_port_xmit_impl
authorNathan Huckleberry <nhuck@google.com>
Thu, 29 Sep 2022 18:19:47 +0000 (11:19 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 3 Oct 2022 07:07:40 +0000 (08:07 +0100)
The ndo_start_xmit field in net_device_ops is expected to be of type
netdev_tx_t (*ndo_start_xmit)(struct sk_buff *skb, struct net_device *dev).

The mismatched return type breaks forward edge kCFI since the underlying
function definition does not match the function hook definition.

The return type of sparx5_port_xmit_impl should be changed from int to
netdev_tx_t.

Reported-by: Dan Carpenter <error27@gmail.com>
Link: https://github.com/ClangBuiltLinux/linux/issues/1703
Cc: llvm@lists.linux.dev
Signed-off-by: Nathan Huckleberry <nhuck@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c

index b197129044b526f486dd085e93b746c41f9db8dd..c9a77a14d3d79e8da4d8d40abfd50a07deef4a1f 100644 (file)
@@ -291,7 +291,7 @@ struct frame_info {
 void sparx5_xtr_flush(struct sparx5 *sparx5, u8 grp);
 void sparx5_ifh_parse(u32 *ifh, struct frame_info *info);
 irqreturn_t sparx5_xtr_handler(int irq, void *_priv);
-int sparx5_port_xmit_impl(struct sk_buff *skb, struct net_device *dev);
+netdev_tx_t sparx5_port_xmit_impl(struct sk_buff *skb, struct net_device *dev);
 int sparx5_manual_injection_mode(struct sparx5 *sparx5);
 void sparx5_port_inj_timer_setup(struct sparx5_port *port);
 
index 21844beba72dfe7eec295e0ed254dfabf6a9a3d6..83c16ca5b30f08722ebc69a2e470e811a509b687 100644 (file)
@@ -222,13 +222,13 @@ static int sparx5_inject(struct sparx5 *sparx5,
        return NETDEV_TX_OK;
 }
 
-int sparx5_port_xmit_impl(struct sk_buff *skb, struct net_device *dev)
+netdev_tx_t sparx5_port_xmit_impl(struct sk_buff *skb, struct net_device *dev)
 {
        struct net_device_stats *stats = &dev->stats;
        struct sparx5_port *port = netdev_priv(dev);
        struct sparx5 *sparx5 = port->sparx5;
        u32 ifh[IFH_LEN];
-       int ret;
+       netdev_tx_t ret;
 
        memset(ifh, 0, IFH_LEN * 4);
        sparx5_set_port_ifh(ifh, port->portno);