enic: Use offsetof macro in vic tlv length calculation
authorRoopa Prabhu <roprabhu@cisco.com>
Tue, 10 Aug 2010 18:55:10 +0000 (18:55 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 17 Aug 2010 09:32:58 +0000 (02:32 -0700)
Signed-off-by: Scott Feldman <scofeldm@cisco.com>
Signed-off-by: Roopa Prabhu <roprabhu@cisco.com>
Signed-off-by: Vasanthy Kolluri <vkolluri@cisco.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/enic/vnic_vic.c

index 197c9d2..4725b79 100644 (file)
@@ -54,8 +54,8 @@ int vic_provinfo_add_tlv(struct vic_provinfo *vp, u16 type, u16 length,
        if (!vp || !value)
                return -EINVAL;
 
-       if (ntohl(vp->length) + sizeof(*tlv) + length >
-               VIC_PROVINFO_MAX_TLV_DATA)
+       if (ntohl(vp->length) + offsetof(struct vic_provinfo_tlv, value) +
+               length > VIC_PROVINFO_MAX_TLV_DATA)
                return -ENOMEM;
 
        tlv = (struct vic_provinfo_tlv *)((u8 *)vp->tlv +
@@ -66,7 +66,8 @@ int vic_provinfo_add_tlv(struct vic_provinfo *vp, u16 type, u16 length,
        memcpy(tlv->value, value, length);
 
        vp->num_tlvs = htonl(ntohl(vp->num_tlvs) + 1);
-       vp->length = htonl(ntohl(vp->length) + sizeof(*tlv) + length);
+       vp->length = htonl(ntohl(vp->length) +
+               offsetof(struct vic_provinfo_tlv, value) + length);
 
        return 0;
 }