gluon-radv-filterd: Fix bug in BPF router lifetime filter

The router lifetime field actually is 2 bytes long, but we only checked
the first one, thus falsely discarding RAs with router lifetime < 256
seconds.
This commit is contained in:
Jan-Philipp Litza 2017-05-26 23:16:24 +02:00
parent 31660c7402
commit 5b34931a97
No known key found for this signature in database
GPG Key ID: 1FB658053CE27196

View File

@ -192,7 +192,7 @@ static int init_packet_socket(unsigned int ifindex) {
BPF_STMT(BPF_LD|BPF_B|BPF_ABS, sizeof(struct ip6_hdr) + offsetof(struct nd_router_advert, nd_ra_code)), BPF_STMT(BPF_LD|BPF_B|BPF_ABS, sizeof(struct ip6_hdr) + offsetof(struct nd_router_advert, nd_ra_code)),
BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 0, 0, 3), BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 0, 0, 3),
// check that this is a default route (lifetime > 0) // check that this is a default route (lifetime > 0)
BPF_STMT(BPF_LD|BPF_B|BPF_ABS, sizeof(struct ip6_hdr) + offsetof(struct nd_router_advert, nd_ra_router_lifetime)), BPF_STMT(BPF_LD|BPF_H|BPF_ABS, sizeof(struct ip6_hdr) + offsetof(struct nd_router_advert, nd_ra_router_lifetime)),
BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 0, 1, 0), BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 0, 1, 0),
// return true // return true
BPF_STMT(BPF_RET|BPF_K, 0xffffffff), BPF_STMT(BPF_RET|BPF_K, 0xffffffff),