diff --git a/driver/quectel_MHI/src/core/mhi_init.c b/driver/quectel_MHI/src/core/mhi_init.c index bd8c2675..1436838a 100644 --- a/driver/quectel_MHI/src/core/mhi_init.c +++ b/driver/quectel_MHI/src/core/mhi_init.c @@ -93,7 +93,8 @@ struct mhi_bus mhi_bus; const char *to_mhi_pm_state_str(enum MHI_PM_STATE state) { - int index = find_last_bit((unsigned long *)&state, 32); + unsigned long value = state; + int index = find_last_bit(&value, 32); if (index >= ARRAY_SIZE(mhi_pm_state_str)) return "Invalid State"; diff --git a/driver/quectel_MHI/src/devices/mhi_netdev_quectel.c b/driver/quectel_MHI/src/devices/mhi_netdev_quectel.c index 8ecd2c99..a9108626 100644 --- a/driver/quectel_MHI/src/devices/mhi_netdev_quectel.c +++ b/driver/quectel_MHI/src/devices/mhi_netdev_quectel.c @@ -1137,10 +1137,24 @@ static netdev_tx_t rmnet_vnd_start_xmit(struct sk_buff *skb, } else { if (priv->qmap_version == 5) { - add_qhdr(skb, priv->mux_id); + struct sk_buff *new_skb = add_qhdr(skb, priv->mux_id); + if (!new_skb) { + // print error + printk(KERN_ERR"add_qhdr failed, drop skb\n"); + dev_kfree_skb_any(skb); + return NETDEV_TX_OK; + } + skb = new_skb; } else if (priv->qmap_version == 9) { - add_qhdr_v5(skb, priv->mux_id); + struct sk_buff *new_skb = add_qhdr_v5(skb, priv->mux_id); + if (!new_skb) { + // print error + printk(KERN_ERR"add_qhdr_v5 failed, drop skb\n"); + dev_kfree_skb_any(skb); + return NETDEV_TX_OK; + } + skb = new_skb; } else { dev_kfree_skb_any (skb); @@ -2419,10 +2433,24 @@ static netdev_tx_t mhi_netdev_xmit(struct sk_buff *skb, struct net_device *dev) } else if (mhi_netdev->net_type == MHI_NET_RMNET) { if (mhi_netdev->qmap_version == 5) { - add_qhdr(skb, QUECTEL_QMAP_MUX_ID); + struct sk_buff *new_skb = add_qhdr(skb, QUECTEL_QMAP_MUX_ID); + if (!new_skb) { + // print error + printk("add_qhdr failed, drop skb, mode MHI_NET_RMNET\n"); + dev_kfree_skb_any(skb); + return NETDEV_TX_OK; + } + skb = new_skb; } else if (mhi_netdev->qmap_version == 9) { - add_qhdr_v5(skb, QUECTEL_QMAP_MUX_ID); + struct sk_buff *new_skb = add_qhdr_v5(skb, QUECTEL_QMAP_MUX_ID); + if (!new_skb) { + // print error + printk("add_qhdr_v5 failed, drop skb, mode MHI_NET_RMNET\n"); + dev_kfree_skb_any(skb); + return NETDEV_TX_OK; + } + skb = new_skb; } else { dev_kfree_skb_any (skb);