Hello Atul Gupta,
The patch a08943947873: "crypto: chtls - Register chtls with net tls"
from Mar 31, 2018, leads to the following static checker warning:
drivers/crypto/chelsio/chtls/chtls_main.c:352 chtls_recv_packet()
error: double free of 'skb'
drivers/crypto/chelsio/chtls/chtls_main.c
337 static int chtls_recv_packet(struct chtls_dev *cdev,
338 const struct pkt_gl *gl, const __be64 *rsp)
339 {
340 unsigned int opcode = *(u8 *)rsp;
341 struct sk_buff *skb;
342 int ret;
343
344 skb = copy_gl_to_skb_pkt(gl, rsp, cdev->lldi->sge_pktshift);
345 if (!skb)
346 return -ENOMEM;
347
348 ret = chtls_handlers[opcode](cdev, skb);
349 if (ret & CPL_RET_BUF_DONE)
350 kfree_skb(skb);
This is a false positive because Smatch doesn't parse the test for
CPL_RET_BUF_DONE set correctly. It's not that complicated for me to fix
that in Smatch so I will eventually. But really this is risky code.
A bunch of these handler functions return -EINVAL. If they return an
odd numbered error code instead then we free skb which is pretty
subtle so far as APIs are concerned.
Looking at it now, I think we probably should be freeing skb on those
paths. The current code looks leaky to me.
351
352 return 0;
353 }
regards,
dan carpenter