From: Jeremie Courreges-Anglas <j...@wxcvbn.org>
Date: Thu, 07 May 2020 14:12:08 +0200

> On Thu, May 07 2020, Masato Asou <a...@soum.co.jp> wrote:
>> hi,
>>
>> Valgrind reports the correct wirte as an invalid write. It is
>> occurring at /usr/libexec/ld.so.
>>
>> I run following program.
>>
>> $ cat main.c
>> #include <stdio.h>
>>
>> int
>> main(int argc, char *argv[])
>> {
>>         printf("Hello, world\n");
>>         return (0);
>> }
>> $ cc -g main.c
>> $ valgrind ./a.out
>> ==46291== Memcheck, a memory error detector
>> ==46291== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
>> ==46291== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
>> ==46291== Command: /home/asou/tmp/a.out
>> ==46291==
>> ==46291== Invalid write of size 1
>> ==46291==    at 0x410730C: ???
>> ==46291==    by 0x4103CC8: ???
>> ==46291==    by 0x41032EE: ???
>> ==46291==    by 0x4102605: ???
>> ==46291==  Address 0x40052d0 is not stack'd, malloc'd or (recently) free'd
>> ==46291==
>> ==46291== Invalid write of size 1
>> ==46291==    at 0x410730E: ???
>> ==46291==    by 0x4103CC8: ???
>> ==46291==    by 0x41032EE: ???
>> ==46291==    by 0x4102605: ???
>> ==46291==  Address 0x40052d1 is not stack'd, malloc'd or (recently) free'd
>> ==46291==
>>
>> </snip>
>>
>> ==46291== For counts of detected and suppressed errors, rerun with: -v
>> ==46291== Use --track-origins=yes to see where uninitialised values come from
>> ==46291== ERROR SUMMARY: 3209 errors from 357 contexts (suppressed: 0 from 0)
>> $ 
>>
>> I got 3209 errors.
>>
>> However, when the following patch was applied, the error was reduced
>> to four as below:
> 
> Hah, that look much better.
> 
>> $ valgrind ./a.out
>> ==7449== Memcheck, a memory error detector
>> ==7449== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
>> ==7449== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
>> ==7449== Command: /home/asou/tmp/a.out
>> ==7449==
>> ==7449== Use of uninitialised value of size 8
>> ==7449==    at 0x4ACB969: write (sys/w_write.c:26)
>> ==7449==    by 0x4AB60DF: __sflush (stdio/fflush.c:80)
>> ==7449==    by 0x4A491F1: __sfvwrite (stdio/fvwrite.c:191)
>> ==7449==    by 0x4A62F62: __sprint (stdio/vfprintf.c:108)
>> ==7449==    by 0x4A62F62: __vfprintf (stdio/vfprintf.c:1067)
>> ==7449==    by 0x4A5F151: vfprintf (stdio/vfprintf.c:263)
>> ==7449==    by 0x4A43DB0: printf (stdio/printf.c:44)
>> ==7449==    by 0x109374: main (main.c:6)
>> ==7449==
>> ==7449== Use of uninitialised value of size 8
>> ==7449==    at 0x4ACB97A: write (sys/w_write.c:26)
>> ==7449==    by 0x4AB60DF: __sflush (stdio/fflush.c:80)
>> ==7449==    by 0x4A491F1: __sfvwrite (stdio/fvwrite.c:191)
>> ==7449==    by 0x4A62F62: __sprint (stdio/vfprintf.c:108)
>> ==7449==    by 0x4A62F62: __vfprintf (stdio/vfprintf.c:1067)
>> ==7449==    by 0x4A5F151: vfprintf (stdio/vfprintf.c:263)
>> ==7449==    by 0x4A43DB0: printf (stdio/printf.c:44)
>> ==7449==    by 0x109374: main (main.c:6)
>> ==7449==
>> Hello, world
>> ==7449== Use of uninitialised value of size 8
>> ==7449==    at 0x4ACB98E: write (sys/w_write.c:28)
>> ==7449==    by 0x4AB60DF: __sflush (stdio/fflush.c:80)
>> ==7449==    by 0x4A491F1: __sfvwrite (stdio/fvwrite.c:191)
>> ==7449==    by 0x4A62F62: __sprint (stdio/vfprintf.c:108)
>> ==7449==    by 0x4A62F62: __vfprintf (stdio/vfprintf.c:1067)
>> ==7449==    by 0x4A5F151: vfprintf (stdio/vfprintf.c:263)
>> ==7449==    by 0x4A43DB0: printf (stdio/printf.c:44)
>> ==7449==    by 0x109374: main (main.c:6)
>> ==7449==
>> ==7449== Use of uninitialised value of size 8
>> ==7449==    at 0x4ACC31C: _thread_finalize (stdlib/atexit.c:131)
>> ==7449==    by 0x4ACC31C: __cxa_finalize (stdlib/atexit.c:153)
>> ==7449==    by 0x4AD13C0: exit (stdlib/exit.c:54)
>> ==7449==    by 0x109141: ___start (in /home/asou/tmp/a.out)
>> ==7449==
>> ==7449==
>> ==7449== FILE DESCRIPTORS: 3 open at exit.
>> ==7449== Open file descriptor 2:
>> ==7449==    <inherited from parent>
>> ==7449==
>> ==7449== Open file descriptor 1:
>> ==7449==    <inherited from parent>
>> ==7449==
>> ==7449== Open file descriptor 0:
>> ==7449==    <inherited from parent>
>> ==7449==
>> ==7449==
>> ==7449== HEAP SUMMARY:
>> ==7449==     in use at exit: 65,536 bytes in 1 blocks
>> ==7449==   total heap usage: 1 allocs, 0 frees, 65,536 bytes allocated
>> ==7449==
>> ==7449== LEAK SUMMARY:
>> ==7449==    definitely lost: 0 bytes in 0 blocks
>> ==7449==    indirectly lost: 0 bytes in 0 blocks
>> ==7449==      possibly lost: 0 bytes in 0 blocks
>> ==7449==    still reachable: 65,536 bytes in 1 blocks
>> ==7449==         suppressed: 0 bytes in 0 blocks
>> ==7449== Rerun with --leak-check=full to see details of leaked memory
>> ==7449==
>> ==7449== For counts of detected and suppressed errors, rerun with: -v
>> ==7449== Use --track-origins=yes to see where uninitialised values come from
>> ==7449== ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0)
>> $ 
>>
>>
>> The patch to Makefile is a temporary. Because, my previous patch
>> https://marc.info/?l=openbsd-ports&m=158624064212984&w=2
>> does not get OK.
> 
> I did take a look at that one but got lost in a maze.  Will get back to
> it when time permits.

I hope to have a reply from you.

>> ok?
> 
> Diff looks good, lightly tested with a few base executables.
> ok jca@ but please wait for tree unlock.

I will commit after unlock.

> Thanks for caring about this port!

You are welcome.
--
ASOU Masato

Reply via email to