Bug#786438: libmp3lame0: general protection error in libmp3lame.so.0.0.0

Bernhard Übelacker bernhardu at vr-web.de
Sat Jun 6 12:59:16 UTC 2015


Hello Fabian,
after some more searching and testing here is my "opinion" on this issue:


- OCaml versions 4.01 (used in Jessie) and before are not doing stack
  alignment on 16 byte boundaries [1].

- GCC does 16 byte stack alignment (at least when using SSE instructions)
  at compile time.

- Now when calling libmp3lame0 from lame executable (gcc) this works just fine.
  But calling from liquidsoap (ocaml) we end up calling libmp3lame0 with a unaligned
  stack therefore getting the SIGSEGV on the "movaps %xmm0,0x20(%esp)".
  (See the second stack and the address of vec_xrpow_max in [2].)


But until now I could not fully proove my theory because:
- OCaml version 4.02 is just in experimental. Using this version would need to
  compile also all the packages depending on ocaml.
- Just using this patch in [1] is also not binary compatible with the packages
  depending on ocaml, therefore needing them all to recompile too.

For this reason chances for such a change to OCaml to enter Jessie are low?


One thing did avoid the crash, that was adding "__attribute__((aligned(0x20)))"
to the vecfloat_union used inside libmp3lame0 [3].
Requesting an alignment of 0x10 seems without effect.
(Probably because GCC does this already and is therefore removed.)


Options we have, if above could be proven right:
- change libmp3lame0 [3] (at least for stable), even when it is not guilty
- test rebuilding OCaml and all dependents with the patch in [1]
- wait if problem vanishes when OCaml 4.02 enters unstable/testing.
- get someone from debian-ocaml-maint involved.


[1] http://caml.inria.fr/mantis/view.php?id=6038#c11630
[2] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=786438#22
[3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=786438#87


Kind regards,
Bernhard



More information about the pkg-multimedia-maintainers mailing list