这篇文章上次修改于 256 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

当前stackplz加入了bx/bufhex的过滤支持,即对buf参数的前几个字节可以进行比较,相等的就记录

然而在测试过程中,突然发现一个偶发的奇怪现象,即输出说命中了规则,但是输出内容却不是以规则开头的数据

经过多轮分析排查之后,最终发现是这些情况均出现在要读取的数据为MAX_BYTES_ARR_SIZE的时候

数据真正要读的大小,计算方法是size & (MAX_BYTES_ARR_SIZE - 1),但size等于MAX_BYTES_ARR_SIZE时,这个计算结果是0

这个时候之前的缓冲区没有清理,于是最终结果输出的与实际的不匹配...

这个地方的计算是为了让eBPF验证器知道读取的size是有明确上限的,但是这种写法不能读取大小刚好是MAX_BYTES_ARR_SIZE的情况

修复方法则是单独判断一下