atm: idt77252: fix build broken on amd64
authorTong Zhang <ztong0001@gmail.com>
Sun, 14 Feb 2021 23:43:08 +0000 (18:43 -0500)
committerDavid S. Miller <davem@davemloft.net>
Mon, 15 Feb 2021 20:36:27 +0000 (12:36 -0800)
idt77252 is broken and wont load on amd64 systems
  modprobe idt77252 shows the following

    idt77252_init: skb->cb is too small (48 < 56)

  Add packed attribute to struct idt77252_skb_prv and struct atm_skb_data
  so that the total size can be <= sizeof(skb->cb)
  Also convert runtime size check to buildtime size check in
  idt77252_init()

Signed-off-by: Tong Zhang <ztong0001@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/atm/idt77252.c
drivers/atm/idt77252.h
include/linux/atmdev.h

index 5f0472c18bcbd791bbc74a5aff8fe79ff2a76fd1..0c13cac903deac7d43baf18c716bd699608dac87 100644 (file)
@@ -3743,16 +3743,7 @@ static int __init idt77252_init(void)
        struct sk_buff *skb;
 
        printk("%s: at %p\n", __func__, idt77252_init);
-
-       if (sizeof(skb->cb) < sizeof(struct atm_skb_data) +
-                             sizeof(struct idt77252_skb_prv)) {
-               printk(KERN_ERR "%s: skb->cb is too small (%lu < %lu)\n",
-                      __func__, (unsigned long) sizeof(skb->cb),
-                      (unsigned long) sizeof(struct atm_skb_data) +
-                                      sizeof(struct idt77252_skb_prv));
-               return -EIO;
-       }
-
+       BUILD_BUG_ON(sizeof(skb->cb) < sizeof(struct idt77252_skb_prv) + sizeof(struct atm_skb_data));
        return pci_register_driver(&idt77252_driver);
 }
 
index 9339197d701c4591dd5653ab9fcb3c327758ac76..b059d31364ddfab4c61e5b6b3ed2de0b9895246b 100644 (file)
@@ -789,7 +789,7 @@ struct idt77252_skb_prv {
        struct scqe     tbd;    /* Transmit Buffer Descriptor */
        dma_addr_t      paddr;  /* DMA handle */
        u32             pool;   /* sb_pool handle */
-};
+} __packed;
 
 #define IDT77252_PRV_TBD(skb)  \
        (((struct idt77252_skb_prv *)(ATM_SKB(skb)+1))->tbd)
index d7493016cd466cac916372a550ccad42ed8a2173..60cd25c0461b873c959c49523b5563e2685d3205 100644 (file)
@@ -207,7 +207,7 @@ struct atm_skb_data {
        struct atm_vcc  *vcc;           /* ATM VCC */
        unsigned long   atm_options;    /* ATM layer options */
        unsigned int    acct_truesize;  /* truesize accounted to vcc */
-};
+} __packed;
 
 #define VCC_HTABLE_SIZE 32