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