Re: [nft] segfault bug in simple ruleset, regression?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Sep 09, 2015 at 01:28:38PM +0200, Arturo Borrero Gonzalez wrote:
> Hi,
> 
> with current HEAD of nftables [0663bfe ("mnl: rework netlink socket
> receive path for events")] and with current nf-next HEAD kernel
> [851345c ("netfilter: reduce sparse warnings")] i'm hitting a
> segfault.
> There seem to be a strcmp over a NULL string.
> 
> Unfortunately I can't try to solve this myself right now.
> 
> It can be reproduced with this simple file:
> 
> ========== 8< ==========
> flush ruleset
> table inet filter {
>         chain test0 {
>         }
> 
>         chain test1 {
>         }
> 
>         chain test2 {
>         }
> 
>         chain test {
>                 oif vmap {
>                         eth0 : jump test0,
>                         eth1 : jump test1,
>                         eth2 : jump test2
>                 }
>         }
> }
> ========== 8< ==========
> 
> loaded with:
>  % nft -f file

I cannot reproduce this here using this:

table inet filter {
        chain test0 {
        }

        chain test1 {
        }

        chain test2 {
        }

        chain test {
                oif vmap {
                        eth0 : jump test0,
                        wlan0 : jump test1,
                        lo : jump test2
                }
        }
}


See file attached. Are you sure you're using latest nft?
# valgrind nft -f file
==4151== Memcheck, a memory error detector
==4151== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==4151== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==4151== Command: nft -f l
==4151== 
==4151== Conditional jump or move depends on uninitialised value(s)
==4151==    at 0x4017741: index (strchr.S:40)
==4151==    by 0x40073DD: expand_dynamic_string_token (dl-load.c:425)
==4151==    by 0x400756B: fillin_rpath (dl-load.c:495)
==4151==    by 0x4007CF9: _dl_init_paths (dl-load.c:872)
==4151==    by 0x4002BC9: dl_main (rtld.c:1348)
==4151==    by 0x40152B4: _dl_sysdep_start (dl-sysdep.c:249)
==4151==    by 0x4004A15: _dl_start (rtld.c:331)
==4151==    by 0x4001197: ??? (in /lib/x86_64-linux-gnu/ld-2.19.so)
==4151==    by 0x2: ???
==4151==    by 0x7FF0006FE: ???
==4151==    by 0x7FF000702: ???
==4151==    by 0x7FF000705: ???
==4151== 
==4151== Use of uninitialised value of size 8
==4151==    at 0x401774F: index (strchr.S:47)
==4151==    by 0x40073DD: expand_dynamic_string_token (dl-load.c:425)
==4151==    by 0x400756B: fillin_rpath (dl-load.c:495)
==4151==    by 0x4007CF9: _dl_init_paths (dl-load.c:872)
==4151==    by 0x4002BC9: dl_main (rtld.c:1348)
==4151==    by 0x40152B4: _dl_sysdep_start (dl-sysdep.c:249)
==4151==    by 0x4004A15: _dl_start (rtld.c:331)
==4151==    by 0x4001197: ??? (in /lib/x86_64-linux-gnu/ld-2.19.so)
==4151==    by 0x2: ???
==4151==    by 0x7FF0006FE: ???
==4151==    by 0x7FF000702: ???
==4151==    by 0x7FF000705: ???
==4151== 
==4151== Conditional jump or move depends on uninitialised value(s)
==4151==    at 0x40177B4: index (strchr.S:77)
==4151==    by 0x40073DD: expand_dynamic_string_token (dl-load.c:425)
==4151==    by 0x400800D: _dl_map_object (dl-load.c:2538)
==4151==    by 0x400137D: map_doit (rtld.c:626)
==4151==    by 0x400E8B3: _dl_catch_error (dl-error.c:187)
==4151==    by 0x4000B2E: do_preload (rtld.c:815)
==4151==    by 0x4004127: dl_main (rtld.c:1634)
==4151==    by 0x40152B4: _dl_sysdep_start (dl-sysdep.c:249)
==4151==    by 0x4004A15: _dl_start (rtld.c:331)
==4151==    by 0x4001197: ??? (in /lib/x86_64-linux-gnu/ld-2.19.so)
==4151==    by 0x2: ???
==4151==    by 0x7FF0006FE: ???
==4151== 
==4151== Use of uninitialised value of size 8
==4151==    at 0x401786D: index (strchr.S:135)
==4151==    by 0x40073DD: expand_dynamic_string_token (dl-load.c:425)
==4151==    by 0x400800D: _dl_map_object (dl-load.c:2538)
==4151==    by 0x400137D: map_doit (rtld.c:626)
==4151==    by 0x400E8B3: _dl_catch_error (dl-error.c:187)
==4151==    by 0x4000B2E: do_preload (rtld.c:815)
==4151==    by 0x4004127: dl_main (rtld.c:1634)
==4151==    by 0x40152B4: _dl_sysdep_start (dl-sysdep.c:249)
==4151==    by 0x4004A15: _dl_start (rtld.c:331)
==4151==    by 0x4001197: ??? (in /lib/x86_64-linux-gnu/ld-2.19.so)
==4151==    by 0x2: ???
==4151==    by 0x7FF0006FE: ???
==4151== 
==4151== Syscall param socketcall.sendmsg(msg.msg_iov[i]) points to uninitialised byte(s)
==4151==    at 0x58080B0: __sendmsg_nocancel (syscall-template.S:81)
==4151==    by 0x41A027: mnl_batch_talk (mnl.c:241)
==4151==    by 0x4064E7: nft_run (main.c:203)
==4151==    by 0x40601C: main (main.c:357)
==4151==  Address 0x5cfac27 is 71 bytes inside a block of size 200,703 alloc'd
==4151==    at 0x4C29BED: malloc (vg_replace_malloc.c:263)
==4151==    by 0x503F171: nftnl_batch_page_alloc.isra.0 (batch.c:36)
==4151==    by 0x503F1FF: nft_batch_alloc (batch.c:73)
==4151==    by 0x419D98: mnl_batch_init (mnl.c:135)
==4151==    by 0x4063EE: nft_run (main.c:185)
==4151==    by 0x40601C: main (main.c:357)
==4151== 
==4151== 
==4151== HEAP SUMMARY:
==4151==     in use at exit: 834 bytes in 3 blocks
==4151==   total heap usage: 123 allocs, 120 frees, 227,812 bytes allocated
==4151== 
==4151== LEAK SUMMARY:
==4151==    definitely lost: 2 bytes in 1 blocks
==4151==    indirectly lost: 0 bytes in 0 blocks
==4151==      possibly lost: 0 bytes in 0 blocks
==4151==    still reachable: 832 bytes in 2 blocks
==4151==         suppressed: 0 bytes in 0 blocks
==4151== Rerun with --leak-check=full to see details of leaked memory
==4151== 
==4151== For counts of detected and suppressed errors, rerun with: -v
==4151== Use --track-origins=yes to see where uninitialised values come from
==4151== ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 0 from 0)

# valgrind nft -f file
==4154== Memcheck, a memory error detector
==4154== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==4154== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==4154== Command: nft -f l
==4154== 
==4154== Conditional jump or move depends on uninitialised value(s)
==4154==    at 0x4017741: index (strchr.S:40)
==4154==    by 0x40073DD: expand_dynamic_string_token (dl-load.c:425)
==4154==    by 0x400756B: fillin_rpath (dl-load.c:495)
==4154==    by 0x4007CF9: _dl_init_paths (dl-load.c:872)
==4154==    by 0x4002BC9: dl_main (rtld.c:1348)
==4154==    by 0x40152B4: _dl_sysdep_start (dl-sysdep.c:249)
==4154==    by 0x4004A15: _dl_start (rtld.c:331)
==4154==    by 0x4001197: ??? (in /lib/x86_64-linux-gnu/ld-2.19.so)
==4154==    by 0x2: ???
==4154==    by 0x7FF0006FE: ???
==4154==    by 0x7FF000702: ???
==4154==    by 0x7FF000705: ???
==4154== 
==4154== Use of uninitialised value of size 8
==4154==    at 0x401774F: index (strchr.S:47)
==4154==    by 0x40073DD: expand_dynamic_string_token (dl-load.c:425)
==4154==    by 0x400756B: fillin_rpath (dl-load.c:495)
==4154==    by 0x4007CF9: _dl_init_paths (dl-load.c:872)
==4154==    by 0x4002BC9: dl_main (rtld.c:1348)
==4154==    by 0x40152B4: _dl_sysdep_start (dl-sysdep.c:249)
==4154==    by 0x4004A15: _dl_start (rtld.c:331)
==4154==    by 0x4001197: ??? (in /lib/x86_64-linux-gnu/ld-2.19.so)
==4154==    by 0x2: ???
==4154==    by 0x7FF0006FE: ???
==4154==    by 0x7FF000702: ???
==4154==    by 0x7FF000705: ???
==4154== 
==4154== Conditional jump or move depends on uninitialised value(s)
==4154==    at 0x40177B4: index (strchr.S:77)
==4154==    by 0x40073DD: expand_dynamic_string_token (dl-load.c:425)
==4154==    by 0x400800D: _dl_map_object (dl-load.c:2538)
==4154==    by 0x400137D: map_doit (rtld.c:626)
==4154==    by 0x400E8B3: _dl_catch_error (dl-error.c:187)
==4154==    by 0x4000B2E: do_preload (rtld.c:815)
==4154==    by 0x4004127: dl_main (rtld.c:1634)
==4154==    by 0x40152B4: _dl_sysdep_start (dl-sysdep.c:249)
==4154==    by 0x4004A15: _dl_start (rtld.c:331)
==4154==    by 0x4001197: ??? (in /lib/x86_64-linux-gnu/ld-2.19.so)
==4154==    by 0x2: ???
==4154==    by 0x7FF0006FE: ???
==4154== 
==4154== Use of uninitialised value of size 8
==4154==    at 0x401786D: index (strchr.S:135)
==4154==    by 0x40073DD: expand_dynamic_string_token (dl-load.c:425)
==4154==    by 0x400800D: _dl_map_object (dl-load.c:2538)
==4154==    by 0x400137D: map_doit (rtld.c:626)
==4154==    by 0x400E8B3: _dl_catch_error (dl-error.c:187)
==4154==    by 0x4000B2E: do_preload (rtld.c:815)
==4154==    by 0x4004127: dl_main (rtld.c:1634)
==4154==    by 0x40152B4: _dl_sysdep_start (dl-sysdep.c:249)
==4154==    by 0x4004A15: _dl_start (rtld.c:331)
==4154==    by 0x4001197: ??? (in /lib/x86_64-linux-gnu/ld-2.19.so)
==4154==    by 0x2: ???
==4154==    by 0x7FF0006FE: ???
==4154== 
==4154== Syscall param socketcall.sendto(msg) points to uninitialised byte(s)
==4154==    at 0x5808113: __sendto_nocancel (syscall-template.S:81)
==4154==    by 0x4198B2: nft_mnl_talk (mnl.c:80)
==4154==    by 0x41AED3: mnl_nft_set_dump (mnl.c:772)
==4154==    by 0x41322B: netlink_list_sets (netlink.c:1248)
==4154==    by 0x407647: cache_update (rule.c:79)
==4154==    by 0x40E759: cmd_evaluate (evaluate.c:2081)
==4154==    by 0x424E05: nft_parse (parser_bison.y:566)
==4154==    by 0x4063AC: nft_run (main.c:231)
==4154==    by 0x40601C: main (main.c:357)
==4154==  Address 0x7feff956f is on thread 1's stack
==4154== 
==4154== Syscall param socketcall.sendto(msg) points to uninitialised byte(s)
==4154==    at 0x5808113: __sendto_nocancel (syscall-template.S:81)
==4154==    by 0x4198B2: nft_mnl_talk (mnl.c:80)
==4154==    by 0x41B2C2: mnl_nft_setelem_get (mnl.c:904)
==4154==    by 0x41356A: netlink_get_setelems (netlink.c:1512)
==4154==    by 0x4076AC: cache_update (rule.c:87)
==4154==    by 0x40E759: cmd_evaluate (evaluate.c:2081)
==4154==    by 0x424E05: nft_parse (parser_bison.y:566)
==4154==    by 0x4063AC: nft_run (main.c:231)
==4154==    by 0x40601C: main (main.c:357)
==4154==  Address 0x7feff955f is on thread 1's stack
==4154== 
==4154== Syscall param socketcall.sendmsg(msg.msg_iov[i]) points to uninitialised byte(s)
==4154==    at 0x58080B0: __sendmsg_nocancel (syscall-template.S:81)
==4154==    by 0x41A027: mnl_batch_talk (mnl.c:241)
==4154==    by 0x4064E7: nft_run (main.c:203)
==4154==    by 0x40601C: main (main.c:357)
==4154==  Address 0x5cfd047 is 71 bytes inside a block of size 200,703 alloc'd
==4154==    at 0x4C29BED: malloc (vg_replace_malloc.c:263)
==4154==    by 0x503F171: nftnl_batch_page_alloc.isra.0 (batch.c:36)
==4154==    by 0x503F1FF: nft_batch_alloc (batch.c:73)
==4154==    by 0x419D98: mnl_batch_init (mnl.c:135)
==4154==    by 0x4063EE: nft_run (main.c:185)
==4154==    by 0x40601C: main (main.c:357)
==4154== 
==4154== 
==4154== HEAP SUMMARY:
==4154==     in use at exit: 834 bytes in 3 blocks
==4154==   total heap usage: 189 allocs, 186 frees, 232,448 bytes allocated
==4154== 
==4154== LEAK SUMMARY:
==4154==    definitely lost: 2 bytes in 1 blocks
==4154==    indirectly lost: 0 bytes in 0 blocks
==4154==      possibly lost: 0 bytes in 0 blocks
==4154==    still reachable: 832 bytes in 2 blocks
==4154==         suppressed: 0 bytes in 0 blocks
==4154== Rerun with --leak-check=full to see details of leaked memory
==4154== 
==4154== For counts of detected and suppressed errors, rerun with: -v
==4154== Use --track-origins=yes to see where uninitialised values come from
==4154== ERROR SUMMARY: 7 errors from 7 contexts (suppressed: 0 from 0)

[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux