[gnutls-devel] libtasn1 | Reading CHOICE name confuses valgrind (#9)

Development of GNU's TLS library gnutls-devel at lists.gnutls.org
Thu Jul 18 16:34:19 CEST 2019




Daiki Ueno commented on a discussion: https://gitlab.com/gnutls/libtasn1/issues/9#note_193341717

Looks like so and if I replace `strcmp` with a length check + `memcmp` the error is gone.

Here is the disassembly gathered by Mark Wielaard:
```
$ ASN1CHOICE=choice.asn libtool --mode=execute valgrind --vgdb-error=0 ./Test_choice
==18694== Memcheck, a memory error detector
==18694== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==18694== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==18694== Command: ./Test_choice
==18694== 
==18694== (action at startup) vgdb me ... 
==18694== 
==18694== TO DEBUG THIS PROCESS USING GDB: start GDB like this
==18694==   /path/to/gdb ./Test_choice
==18694== and then give GDB the following command
==18694==   target remote | /usr/libexec/valgrind/../../bin/vgdb --pid=18694
==18694== --pid is optional if only one valgrind process is running
==18694== 
==18694== Conditional jump or move depends on uninitialised value(s)
==18694==    at 0x40128D: main (Test_choice.c:122)
==18694== 
==18694== (action on error) vgdb me ... 

...

$ ASN1CHOICE=choice.asn libtool --mode=execute gdb ./Test_choice
[...]
Reading symbols from ./Test_choice...
(gdb) target remote | vgdb
Remote debugging using | vgdb
relaying data between gdb and process 18694
warning: remote target does not support file transfer, attempting to access files from local filesystem.
(gdb) c
Continuing.

Program received signal SIGTRAP, Trace/breakpoint trap.
0x000000000040128d in main (argc=<optimized out>, argv=<optimized out>)
    at Test_choice.c:122
122	  if (strcmp (data, "012345678901234") == 0)
(gdb) disassemble 
Dump of assembler code for function main:
[...]
   0x0000000000401216 <+326>:	mov    0x4(%rsp),%edx
   0x000000000040121a <+330>:	lea    0x20(%rsp),%rcx
   0x000000000040121f <+335>:	lea    0x18(%rsp),%rdi
   0x0000000000401224 <+340>:	lea    0xa0(%rsp),%rsi
   0x000000000040122c <+348>:	callq  0x401080 <asn1_der_decoding at plt>
   0x0000000000401231 <+353>:	test   %eax,%eax
   0x0000000000401233 <+355>:	jne    0x4012ca <main+506>
   0x0000000000401239 <+361>:	mov    0x18(%rsp),%rdi
   0x000000000040123e <+366>:	lea    0x4(%rsp),%rcx
   0x0000000000401243 <+371>:	lea    0xa0(%rsp),%rdx
   0x000000000040124b <+379>:	mov    $0x402030,%esi
   0x0000000000401250 <+384>:	movl   $0x400,0x4(%rsp)
   0x0000000000401258 <+392>:	callq  0x401040 <asn1_read_value at plt>
   0x000000000040125d <+397>:	test   %eax,%eax
   0x000000000040125f <+399>:	jne    0x4012c3 <main+499>
   0x0000000000401261 <+401>:	movabs $0x34333231303938,%rdx
   0x000000000040126b <+411>:	xor    0xa8(%rsp),%rdx
   0x0000000000401273 <+419>:	mov    $0x7c,%esi
   0x0000000000401278 <+424>:	movabs $0x3736353433323130,%rax
   0x0000000000401282 <+434>:	xor    0xa0(%rsp),%rax
   0x000000000040128a <+442>:	or     %rax,%rdx
=> 0x000000000040128d <+445>:	jne    0x4012a5 <main+469>
   0x000000000040128f <+447>:	mov    $0x402024,%edi
   0x0000000000401294 <+452>:	xor    %eax,%eax
   0x0000000000401296 <+454>:	callq  0x401060 <printf at plt>
   0x000000000040129b <+459>:	mov    $0x1,%edi
   0x00000000004012a0 <+464>:	callq  0x4010a0 <exit at plt>

```

-- 
Reply to this email directly or view it on GitLab: https://gitlab.com/gnutls/libtasn1/issues/9#note_193341717
You're receiving this email because of your account on gitlab.com.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.gnupg.org/pipermail/gnutls-devel/attachments/20190718/66407b29/attachment-0001.html>


More information about the Gnutls-devel mailing list