Commit bbd20c93 authored by Aditya Pakki's avatar Aditya Pakki Committed by David S. Miller
Browse files

fore200e: Fix incorrect checks of NULL pointer dereference



In fore200e_send and fore200e_close, the pointers from the arguments
are dereferenced in the variable declaration block and then checked
for NULL. The patch fixes these issues by avoiding NULL pointer
dereferences.

Signed-off-by: default avatarAditya Pakki <pakki001@umn.edu>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 03d51c4f
Loading
Loading
Loading
Loading
+18 −7
Original line number Diff line number Diff line
@@ -1414,12 +1414,14 @@ fore200e_open(struct atm_vcc *vcc)
static void
fore200e_close(struct atm_vcc* vcc)
{
    struct fore200e*        fore200e = FORE200E_DEV(vcc->dev);
    struct fore200e_vcc*    fore200e_vcc;
    struct fore200e*        fore200e;
    struct fore200e_vc_map* vc_map;
    unsigned long           flags;

    ASSERT(vcc);
    fore200e = FORE200E_DEV(vcc->dev);

    ASSERT((vcc->vpi >= 0) && (vcc->vpi < 1<<FORE200E_VPI_BITS));
    ASSERT((vcc->vci >= 0) && (vcc->vci < 1<<FORE200E_VCI_BITS));

@@ -1464,10 +1466,10 @@ fore200e_close(struct atm_vcc* vcc)
static int
fore200e_send(struct atm_vcc *vcc, struct sk_buff *skb)
{
    struct fore200e*        fore200e     = FORE200E_DEV(vcc->dev);
    struct fore200e_vcc*    fore200e_vcc = FORE200E_VCC(vcc);
    struct fore200e*        fore200e;
    struct fore200e_vcc*    fore200e_vcc;
    struct fore200e_vc_map* vc_map;
    struct host_txq*        txq          = &fore200e->host_txq;
    struct host_txq*        txq;
    struct host_txq_entry*  entry;
    struct tpd*             tpd;
    struct tpd_haddr        tpd_haddr;
@@ -1480,9 +1482,18 @@ fore200e_send(struct atm_vcc *vcc, struct sk_buff *skb)
    unsigned char*          data;
    unsigned long           flags;

    ASSERT(vcc);
    ASSERT(fore200e);
    ASSERT(fore200e_vcc);
    if (!vcc)
        return -EINVAL;

    fore200e = FORE200E_DEV(vcc->dev);
    fore200e_vcc = FORE200E_VCC(vcc);

    if (!fore200e)
        return -EINVAL;

    txq = &fore200e->host_txq;
    if (!fore200e_vcc)
        return -EINVAL;

    if (!test_bit(ATM_VF_READY, &vcc->flags)) {
	DPRINTK(1, "VC %d.%d.%d not ready for tx\n", vcc->itf, vcc->vpi, vcc->vpi);