]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
caif-hsi: HSI Fix uninitialized data in HSI header
authorsjur.brandeland@stericsson.com <sjur.brandeland@stericsson.com>
Thu, 13 Oct 2011 11:29:22 +0000 (11:29 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 19 Oct 2011 07:25:40 +0000 (03:25 -0400)
CAIF HSI header may be uninitialized and cause last message to
be repeated if transmit size is ~86 bytes long.

Signed-off-by: Sjur Brændeland <sjur.brandeland@stericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/caif/caif_hsi.c

index 2fcabba56087294118636cc5ae52d01e7b6396da..193781389f736aed8db4d443cc254c4125ad02b0 100644 (file)
@@ -178,6 +178,9 @@ static int cfhsi_tx_frm(struct cfhsi_desc *desc, struct cfhsi *cfhsi)
        if (!skb)
                return 0;
 
+       /* Clear offset. */
+       desc->offset = 0;
+
        /* Check if we can embed a CAIF frame. */
        if (skb->len < CFHSI_MAX_EMB_FRM_SZ) {
                struct caif_payload_info *info;
@@ -206,9 +209,7 @@ static int cfhsi_tx_frm(struct cfhsi_desc *desc, struct cfhsi *cfhsi)
                        consume_skb(skb);
                        skb = NULL;
                }
-       } else
-               /* Clear offset. */
-               desc->offset = 0;
+       }
 
        /* Create payload CAIF frames. */
        pfrm = desc->emb_frm + CFHSI_MAX_EMB_FRM_SZ;
@@ -990,6 +991,8 @@ int cfhsi_probe(struct platform_device *pdev)
        /* Set up the driver. */
        cfhsi->drv.tx_done_cb = cfhsi_tx_done_cb;
        cfhsi->drv.rx_done_cb = cfhsi_rx_done_cb;
+       cfhsi->drv.wake_up_cb = cfhsi_wake_up_cb;
+       cfhsi->drv.wake_down_cb = cfhsi_wake_down_cb;
 
        /* Initialize the work queues. */
        INIT_WORK(&cfhsi->wake_up_work, cfhsi_wake_up);
@@ -1045,9 +1048,6 @@ int cfhsi_probe(struct platform_device *pdev)
                goto err_net_reg;
        }
 
-       cfhsi->drv.wake_up_cb = cfhsi_wake_up_cb;
-       cfhsi->drv.wake_down_cb = cfhsi_wake_down_cb;
-
        /* Register network device. */
        res = register_netdev(ndev);
        if (res) {