Accéder au contenu.
Menu Sympa

fr - Re: [sympa-fr] wwsympa et Perl 5.14.2 : « segmentation fault »

Objet : Pour les administrateurs de serveurs de listes utilisant le logiciel Sympa

Archives de la liste

Chronologique Discussions  
  • From: Emmanuel Bouthenot <adresse@cachée>
  • To: adresse@cachée
  • Subject: Re: [sympa-fr] wwsympa et Perl 5.14.2 : « segmentation fault »
  • Date: Sat, 5 May 2012 09:02:41 +0200


On Fri, May 04, 2012 at 09:57:56AM +0200, Eric Duval wrote:
> Effectivement ça a l'air d'être un problème
> lié à la version de Perl.
> Tu as raison le fait d'ajouter du code modifie la pile
> et de fait déplace le problème.
C'est ce que je supposais ayant pas mal joué à emabarquer perl dans des
prog en C et vu la non joie que j'avais avec l'API C de perl, sa pile
interne et la magie autour des macros SV* ...

> Je suis en cours de migration sur :
>
> Debian Squeeze
> sympa 6.1.7
> (perl --version)
> This is perl, v5.10.1 (*) built for x86_64-linux-
> gnu-thread-multi (with 56 registered patches, see perl
> -V for more detail)
> Apache/2.2.16 (Debian)
> mod_fcgid/2.3.6
> mod_perl/2.0.4
> Perl/v5.10.1
>
> Avec cette version de perl pour le moment en phase de tests
> aucun problème.
oui car Perl <= 5.12.4

> as tu la possibilité de faire un test avec cette version de perl ?
En fait, j'ai installé 3 versions de Perl en // depuis les sources:
5.12.4, 5.14.2 et 5.15.9

Pas de pb en 5.12.4 mais ça plantait avec les 2 autres. gdb étant mon
ami, j'ai réussi en apprendre plus sur le segfault, et je suis tombé sur
un thread[1] à propos du même problème dans fedora 16.

http://www.nntp.perl.org/group/perl.perl5.porters/2012/01/msg181404.html

Erik Olson est entré en discussion avec les développeurs Perl et ils ont
investigué tant bien que mal sans trouver le problème de fond. Mais le
thread est très intéressant car j'en ai appris un peu plus sur pourquoi
le pb existait chez moi avec fastcgi mais pas en ligne de commande.

C'est à cause du 'tainted mode' (une sorte de mode de sécurité renforcé)
de perl (options -t ou -T) qui s'il est actif affiche tout un tas de
warnings à propos d'éventuelles failles.

Le truc c'est que le cgi de sympa (wwsympa.fcgi) est activé avec
l'option -U (dans le shebang) qui active de fait le tainted mode.

Finalement la correction est triviale :
- Il faut supprimer le -U du shebang de wwsympa.fcgi
- Modifier le wrapper en C pour qu'il change l'effective user/group en
amont de l'exécution du cgi

Pour ceux qui souhaite essayer de tester la correction:

(en admettant que le le cgi et le wrapper se trouve dans
/usr/lib/cgi-bin/sympa/, sinon il faut adapter chemin selon votre
installation)

Créer un fichier avec /tmp/wwsympa-wrapper.fcgi.c avec le contenu suivant :

--8<-----------------------------------
#include <unistd.h>

int main(int argn, char **argv, char **envp) {
setreuid(geteuid(),geteuid());
setregid(getegid(),getegid());
argv[0] = "/usr/lib/cgi-bin/sympa/wwsympa.fcgi";
execve("/usr/lib/cgi-bin/sympa/wwsympa.fcgi",argv,envp);
}
----------------------------------->8--

(j'ai juste ajouté les lignes setre*id())

# gcc -Wall /tmp/wwsympa-wrapper.fcgi.c -o
/usr/lib/cgi-bin/sympa/wwsympa-wrapper.fcgi
# chown sympa:sympa /usr/lib/cgi-bin/sympa/wwsympa-wrapper.fcgi
# chmod ug+s /usr/lib/cgi-bin/sympa/wwsympa-wrapper.fcgi

Restart de apache ou de votre web server préféré au besoin:
# invoke-rc.d apache2 restart

Par effet de bord cette correction supprime également toutes les erreurs du
type '*Insecure dependency in*' qui sont affiché sur la sortie erreur par perl
et qui se retrouve dans les logs erreurs du serveur web.

> Sur quel distribution tu travailles ?
Debian unstable.


Ceci étant dit le bug perl est bien réél mais s'il est assez compliqué a
tracer, si j'ai un peu de temps j'essayerais de fournir un chroot minimal au
dev perl pour qu'ils puissent reproduire et investigué le pb.


David, si tu nous lis et si la correction te va, ce serait jouable de l'avoir
dans la 6.1.10 ? Je crois que pas mal de distro seraient intéressées par la
correction de ce pb :)


Merci.

M.

--
Emmanuel Bouthenot
mail: kolter@{openics,debian}.org gpg: 4096R/0x929D42C3
xmpp: adresse@cachée irc: kolter@{freenode,oftc}




Archives gérées par MHonArc 2.6.19+.

Haut de le page