Pergunta

Estou executando o valgrind da seguinte forma: -

/ usr / local / bin / valgrind "process_name"

Depois de excecution sua me dando seguinte erro

==21731==
==21731== Warning: Can't execute setuid/setgid executable: 
==21731== Possible workaround: remove --trace-children=yes, if in effect
==21731==
valgrind: "process name": Permission denied

Meu permissão valgrind é a seguinte: - -r-sr-xr-x / usr / local / bin / valgrind

Meu permissão processo é o seguinte: - -r-sr-xr-x "process_name"

Plataforma: Linux VMLINUX3 2.6.9-78.0.22.ELsmp (RHEL)

Versão Valgrind: valgrind-3.5.0

Qualquer ajuda sobre este será apreciado

Foi útil?

Solução

Este é um problema permanente para as pessoas que desenvolvem sistemas de arquivos FUSE. este link pode ajudar (é literalmente demais para consolidar em uma única resposta). A solução alternativa envolve uma substituição just-in-time de fusermount, e (dependendo), algumas opções adicionais para Valgrind para evitar que as crianças de rastreamento.

Na verdade, se você executar meus FS sob valgrind, você recebe essa saída (sim, muita gente teve esse problema que eu realmente detectado valgrind no arranque e exibido link):

root@tower:~ # valgrind xsfs /xs
==9479== Memcheck, a memory error detector.
==9479== Copyright (C) 2002-2008, and GNU GPL'd, by Julian Seward et al.
==9479== Using LibVEX rev 1884, a library for dynamic binary translation.
==9479== Copyright (C) 2004-2008, and GNU GPL'd, by OpenWorks LLP.
==9479== Using valgrind-3.4.1, a dynamic binary instrumentation framework.
==9479== Copyright (C) 2000-2008, and GNU GPL'd, by Julian Seward et al.
==9479== For more details, rerun with: -v
==9479==
******** Valgrind has been detected by xsfs
******** If you have difficulties getting xsfs to work under Valgrind,
******** see the following thread:
******** http://www.nabble.com/valgrind-and-fuse-file-systems-td13112112.html
******** Sleeping for 5 seconds so this doesn't fly by ....

O mais fácil coisa a fazer é toda a sua depuração em uma VM descartável executado como root, onde você pode simplesmente abandonar o bit setuid, e ser feito com ele. Certifique-se de teste de o código para não ter quaisquer vazamentos ou violações, o suficiente fácil de testar qualquer código da biblioteca ligado não usando fusível. Distribua a sua construção off 'valgrind-limpa' e nota que você fez até na documentação.

Em seguida, pegue alguns pedaços de valgrind/valgrind.h de detectá-lo, e mostrar uma mensagem curta para aqueles que ir em frente e executá-lo de qualquer maneira. Hacks Para contornar isso requer a cooperação de raiz, e, francamente, são muito mais fácil feito em uma caixa de areia tão bem.

Também é fácil o suficiente para se recusar a executar sob valgrind com o bit setuid em, mostrando uma mensagem útil para pessoas para transformá-lo off , se eles realmente querem fazê-lo.

Outras dicas

Suponho resposta mais simples seria a de remover o bit setuid / setgid durante a depuração. É claro que se o programa realmente precisa de privilégios de root você terá que valgrind provavelmente executado como root ou desde valgrind em si parece ser setuid apenas chown para root: root. Se você executar valgrind depois que ele terá privilégios de root (e assim também infantil - processos depurados).

Você deve então ser capaz de executar valgrind sobre esse pedido.

Basta ter cuidado, porque você vai ser a introdução de um grande buraco de segurança no seu sistema. solução mais segura seria a criação de grupo especial apenas para os usuários que devem ser capazes de executar (setuid) valgrind e de lá ir ...

Eu estou supondo que você tentou executá-lo com --trace-children = não? Se você tiver acesso root, parece haver uma solução alternativa aqui .

Isso acontece mesmo quando as coisas foram executados como usuário root :) A melhor maneira é alterar as perms para remover "s", e executar

Executar o comando valgrind como root (ou quem quer que o usuário set-uid é), então o programa não terá que fazer uso de definir o uid.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top