LINUX.ORG.RU

История изменений

Исправление ae1234, (текущая версия) :

iptables-1.8.7/iptables/nft-shared.c

void add_addr(struct nftnl_rule *r, enum nft_payload_bases base, int offset,
              void *data, void *mask, size_t len, uint32_t op)
{
        const unsigned char *m = mask;
        bool bitwise = false;
        int i;

        for (i = 0; i < len; i++) {
                if (m[i] != 0xff) {
                        bitwise = m[i] != 0;
                        break;
                }
        }
        
        if (!bitwise)
                len = i;
        
        add_payload(r, offset, len, base);
        
        if (bitwise)
                add_bitwise(r, mask, len);
        
        add_cmp_ptr(r, op, data, len);
}



bitwise = m != 0; вот тут ошибка
она сканирует маску пока не встретиться не FF - но во флаг записывает true только если НЕ 0 - а у меня как раз 0

замена этого на
bitwise = true;
нормализует работу

Исправление ae1234, :

iptables-1.8.7/iptables/nft-shared.c

void add_addr(struct nftnl_rule *r, enum nft_payload_bases base, int offset,
              void *data, void *mask, size_t len, uint32_t op)
{
        const unsigned char *m = mask;
        bool bitwise = false;
        int i;

        for (i = 0; i < len; i++) {
                if (m[i] != 0xff) {
                        bitwise = m[i] != 0;
                        break;
                }
        }
        
        if (!bitwise)
                len = i+1;
        
        add_payload(r, offset, len, base);
        
        if (bitwise)
                add_bitwise(r, mask, len);
        
        add_cmp_ptr(r, op, data, len);
}



bitwise = m != 0; вот тут ошибка
она сканирует маску пока не встретиться не FF - но во флаг записывает true только если НЕ 0 - а у меня как раз 0

замена этого на
bitwise = true;
нормализует работу

Исходная версия ae1234, :

iptables-1.8.7/iptables/nft-shared.c

void add_addr(struct nftnl_rule *r, enum nft_payload_bases base, int offset,
              void *data, void *mask, size_t len, uint32_t op)
{
        const unsigned char *m = mask;
        bool bitwise = false;
        int i;

        for (i = 0; i < len; i++) {
                if (m[i] != 0xff) {
                        bitwise = m[i] != 0;
                        break;
                }
        }
        
        if (!bitwise)
                len = i+1;
        
        add_payload(r, offset, len, base);
        
        if (bitwise)
                add_bitwise(r, mask, len);
        
        add_cmp_ptr(r, op, data, len);
}



bitwise = m != 0; вот тут ошибка