On 10/03/2017 12:12 AM, Thierry Vignaud wrote:
On 2 October 2017 at 23:06, Thierry Vignaud <thierry.vign...@gmail.com> wrote:
Also this new rpm introduced segfault regressions in both RPM4 & urpmi
testsuites
See attached gdb traces in BUG*.txt
valgrind seems to hint about invalid writes/reads
See you
The urpmi issue is when checking bogus pkgs.
The RPM4 issue is when traversing the transaction (not the rpmdb)
Attached are the valgrind outputs
So we have stuff like
==14087== Invalid write of size 4
==14087== at 0x103AA6DD: headerUnlink (header.c:188)
==14087== by 0x103AA6DD: headerFree (header.c:194)
==14087== by 0xFF69314: XS_RPM4__Header_DESTROY (RPM4.xs:890)
==14087== by 0x3F512E2C40: Perl_pp_entersub (pp_hot.c:4231)
==14087== by 0x3F5125551E: Perl_call_sv (perl.c:2848)
==14087== by 0x3F512E7C09: S_curse (sv.c:6987)
==14087== by 0x3F512E84F7: Perl_sv_clear (sv.c:6591)
==14087== by 0x3F512E898D: Perl_sv_free2 (sv.c:7088)
==14087== by 0x3F513182E6: UnknownInlinedFun (inline.h:200)
==14087== by 0x3F513182E6: Perl_free_tmps (scope.c:212)
==14087== by 0x3F512DAD74: Perl_pp_nextstate (pp_hot.c:52)
==14087== by 0x3F512DAA55: Perl_runops_standard (run.c:41)
==14087== by 0x3F5125D236: S_run_body (perl.c:2524)
==14087== by 0x3F5125D236: perl_run (perl.c:2447)
==14087== by 0x400C79: main (perlmain.c:123)
==14087== Address 0xffeffef8c is on thread 1's stack
==14087== 396 bytes below stack pointer
...and all the failures are around headerFree(), but none of the traces
go into rpm itself, so I dont really know what does "traversing the
transaction" actually mean. But the problem is simply with perl-RPM4 and
urpmi passing uninitialized variables to headerFree().
What changed in rpm is that rpmReadPackageFile() no longer does this as
the first thing:
if (hdrp)
*hdrp = NULL;
Ie if you pass an uninitialized pointer as hdrp, it remains
uninitialized unless rpmReadPackageFile() returns with a success code.
Which is how I think it should be, but it does deserve a release note on
the changed API.
So the moral of the story is basically: if you depend on your variables
being initialized, initialize them by yourself. It's a good practise anyway.
- Panu -
_______________________________________________
Rpm-maint mailing list
Rpm-maint@lists.rpm.org
http://lists.rpm.org/mailman/listinfo/rpm-maint