mirror of https://github.com/OISF/suricata
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.remotes/origin/master-1.1.x
parent
cec7ece697
commit
12369b4393
@ -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)
|
Loading…
Reference in New Issue