From 12369b43931e0b7c593adc8e1684d6d82b97de76 Mon Sep 17 00:00:00 2001 From: Eric Leblond Date: Thu, 3 Feb 2011 20:05:39 +0100 Subject: [PATCH] Coccinelle: test invalid Packet usage This coccinelle patches is checking that there is no direct use of p->pkt or p->pktlen in the code. This variable must be acceded via GET_PKT_* macros. --- qa/coccinelle/access-pkt-packet.cocci | 55 +++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 qa/coccinelle/access-pkt-packet.cocci diff --git a/qa/coccinelle/access-pkt-packet.cocci b/qa/coccinelle/access-pkt-packet.cocci new file mode 100644 index 0000000000..3654a54419 --- /dev/null +++ b/qa/coccinelle/access-pkt-packet.cocci @@ -0,0 +1,55 @@ +@init@ +typedef Packet; +Packet *p; +expression E; +statement S; +@@ + +( +memset(p, ...); +p->pkt = E; +| +p = SCCalloc(...); +S +p->pkt = E; +) + +@pktfield depends on !init@ +identifier func !~= "^PacketCopyDataOffset$"; +Packet *p; +position p1; +@@ + +func(...) { +<... +p->pkt@p1 +...> +} + +@ script:python @ +p1 << pktfield.p1; +@@ + +print "Invalid Packet->pkt usage, GET_PKT_DATA macro must be used at %s:%s" % (p1[0].file, p1[0].line) +import sys +sys.exit(1) + +@pktlenfield@ +identifier func !~= "^PacketCopyDataOffset$"; +Packet *p; +position p1; +@@ + +func(...) { +<... +p->pktlen@p1 +...> +} + +@ script:python @ +p1 << pktlenfield.p1; +@@ + +print "Invalid Packet->pktlen usage, GET_PKT_LEN macro must be used at %s:%s" % (p1[0].file, p1[0].line) +import sys +sys.exit(1)