ATM: solos-pci, remove use after free
Stanse found we do in console_show: kfree_skb(skb); return skb->len; which is not good. Fix that by remembering the len and use it in the function instead. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Cc: Chas Williams <chas@cmf.nrl.navy.mil> Acked-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
03c698c93f
commit
f1ee89d5b0
1 changed files with 5 additions and 3 deletions
|
@ -444,6 +444,7 @@ static ssize_t console_show(struct device *dev, struct device_attribute *attr,
|
|||
struct atm_dev *atmdev = container_of(dev, struct atm_dev, class_dev);
|
||||
struct solos_card *card = atmdev->dev_data;
|
||||
struct sk_buff *skb;
|
||||
unsigned int len;
|
||||
|
||||
spin_lock(&card->cli_queue_lock);
|
||||
skb = skb_dequeue(&card->cli_queue[SOLOS_CHAN(atmdev)]);
|
||||
|
@ -451,11 +452,12 @@ static ssize_t console_show(struct device *dev, struct device_attribute *attr,
|
|||
if(skb == NULL)
|
||||
return sprintf(buf, "No data.\n");
|
||||
|
||||
memcpy(buf, skb->data, skb->len);
|
||||
dev_dbg(&card->dev->dev, "len: %d\n", skb->len);
|
||||
len = skb->len;
|
||||
memcpy(buf, skb->data, len);
|
||||
dev_dbg(&card->dev->dev, "len: %d\n", len);
|
||||
|
||||
kfree_skb(skb);
|
||||
return skb->len;
|
||||
return len;
|
||||
}
|
||||
|
||||
static int send_command(struct solos_card *card, int dev, const char *buf, size_t size)
|
||||
|
|
Loading…
Reference in a new issue