我运行valgrind如下: –
/ usr / local / bin / valgrind“process_name”
在执行之后,给我下面的错误
==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
我的valgrind权限如下: – -r-sr-xr-x / usr / local / bin / valgrind
我的进程权限如下所示: – -r-sr-xr-x“process_name”
平台:Linux VMLINUX3 2.6.9-78.0.22.ELsmp(RHEL)
Valgrind版本:valgrind-3.5.0
任何帮助,将不胜感激
对于开发FUSE文件系统的人来说,这是一个永恒的问题。 这个链接可能会有帮助 (在一个单一的答案中,合并起来确实太多了)。 解决方法是及时更换fusermount,以及(取决于)valgrind的一些附加选项,以防止其追踪儿童。
事实上,如果你在valgrind下运行我的FS,你会得到这个输出(是的,有足够的人有这个问题,我实际上检测valgrind启动并显示链接):
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 ....
最简单的事情就是在一个一次性虚拟机上以root身份运行所有的调试,在那里你可以抛开setuid位,并且完成它。 确保你测试你的代码没有任何泄漏或违规,它足够容易测试任何链接库代码不使用保险丝。 把你的构建关闭“valgrind-clean”,注意你已经在文档中这样做了。
然后,从valgrind/valgrind.h
获取一些位来检测它,并为那些继续运行的人显示一条短消息。 要想解决这个问题,需要开展合作,坦率地说,在沙盒中也是如此。
用setuid位拒绝在valgrind下运行也是很容易的,如果他们真的想要这样做的话,显示一个有用的信息让人们关掉它。
我想最简单的答案是在调试时删除setuid / setgid位。 当然,如果程序确实需要root权限,那么你将不得不以root身份运行valgrind,或者因为valgrind本身似乎是setuid,只是将它们命名为root:root。 如果在此之后执行valgrind,它将具有root权限(并且它也是子进程 – 调试进程)。
你应该能够在该应用程序上运行valgrind。
只是要小心,因为你会在你的系统中引入一个大的安全漏洞。 更安全的解决方案将创建特殊的组只能为应该能够运行(setuid)valgrind并从那里去的用户…
我假设你尝试使用–trace-children = no来运行它? 如果你有root权限,这里似乎有一个解决办法。
即使事情以root用户身份运行,也会发生这种情况:)最好的方法是更改perms以删除“s”,然后运行
以root用户身份运行valgrind命令(或任何set-uid用户),那么程序将不必使用设置uid。