Re: invalid read in

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

 



Hi,

On Mon, Feb 03, 2020 at 01:54:31PM +0000, dyslexicatheist wrote:
> I've written a filter to parse out punicode from DNS payloads and rewrite the packet in case it contains any IDN (xn--) marker unless the IDN is on a whitelist. Valgrind reports that nfq_create_queue() returns uninitialized
> bytes resulting in thiserror:
> 
> 
> sudo valgrind --tool=memcheck --leak-check=yes --show-reachable=yes \
>            --num-callers=20 --track-fds=yes --track-origins=yes -s \
>             ./nfq --syslog --facility LOG_LOCAL0 --log-level info \
>                   --port 53  --renice -20 --rewrite-answer
>       ==714384==
>       ==714384== Syscall param socketcall.sendto(msg) points to uninitialised byte(s)
>       ==714384==    at 0x4B977C7: sendto (sendto.c:27)
>       ==714384==    by 0x486BE02: nfnl_send (in /usr/lib/x86_64-linux-gnu/libnfnetlink.so.0.2.0)
>       ==714384==    by 0x486DBD2: nfnl_query (in /usr/lib/x86_64-linux-gnu/libnfnetlink.so.0.2.0)
>       ==714384==    by 0x4A73995: nfq_set_mode (libnetfilter_queue.c:639)
>       ==714384==    by 0x10B247: start_nfqueue_processing (nfq.c:532)
>       ==714384==    by 0x10C289: main (nfq.c:987)
>       ==714384==  Address 0x1ffefefbfd is on thread 1's stack
>       ==714384==  in frame #3, created by nfq_set_mode (libnetfilter_queue.c:623)
>       ==714384==  Uninitialised value was created by a stack allocation
>       ==714384==    at 0x10A1B0: ??? (in /src/nfq/src/nfq)
> 
> After searching on this list archive, I found 1 question but without a follow-up answer:
> https://marc.info/?l=netfilter-devel&m=137132916826745&w=4
> 
> Having already spent over a day chasing this. Not having come across other cases on github except this person self reporting[1] made me think it must be indeed something in my code that I'm missing and that could have triggered this. Or is it really rare (harmless) bug in libnetfilter?

I guess this is the typical "problem" situation in which userspace uses
a non-zeroed buffer to feed into sendto() and due to padding not
every byte was written to. So basically userspace "leaks" garbage to
kernel, which is something I'd consider harmless and merely a minor
inconvenience when analyzing with valgrind. I usually suffer from this
as well since libmnl()'s allocation routines don't zero the buffer
either.

In your case, I'd say the error message disappears if you add
'memset(&u, 0, sizeof(u))' to the beginning of nfq_set_mode().

Cheers, Phil



[Index of Archives]     [Netfitler Users]     [Berkeley Packet Filter]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux