QtCreator: ptrace operation not permittedQtCreator: ptrace operation not permitted

Vor Kurzem habe ich meine Qt Entwicklungsumgebung unter Ubuntu reaktiviert. Während ich an meinem neuesten Projekt QtDropbox (bisher habe ich nichts dazu geschrieben, aber werde es bald) arbeitete kam es schließlich zu einer unausweichlichen Situation: Ich wollte meinen Code wegen eines merkwürdigen Absturz in einer der Routinen debuggen.

Vielleicht hat es jemand von euch schon selbst erlebt. Wenn man den Debugger aus QtCreator heraus starten möchte kommt es zu folgender Fehlermeldung:

ptrace mag das nicht :)

Den Fehler beheben

Es gibt eine temporäre und eine permanente Lösung für dieses Problem. Für beide werden root Rechte benötigt. Hier die temporäre Lösung zuerst. Einfach folgendes in der Command Line ausführen:

sudo echo 0 > /proc/sys/kernel/yama/ptrace_scope

Hiermit wird das debuggen für die aktuelle Session ermöglicht – allerdings wird diese Einstellung zurückgesetzt sobald der Computer neu gestartet wird. Für eine längerfristige Lösung muss die Datei /etc/sysctl.d/10-ptrace.conf editiert und folgender Eintrag gesetzt werden:

kernel.yama.ptrace_scope = 0

Wenn es euch reicht diesen Fehler zu beheben war`s das. Wer an weiteren Details interessiert ist, sollte weiter lesen.

Warum tritt dieser Fehler auf?

Mit Ubuntu 11.04 (“Natty Narwhal”) wurde ein Security Feature names ptrace scope implementiert. Dieses Feature verbietet normalen Benutzern den Zugriff auf den Speicher gerade laufender Prozesse – und verursacht damit auch diesen Fehler. Warum wurde so etwas eingebaut? Könnte jeder Benutzer den Speicher einer gerade laufenden Anwendung auslesen, wäre es möglich ein Programm zu schreiben, das sich an einen Prozess (SSH, GPG Agenten,…) anhängt und dessen Speicher ausliest. Wenn wir es nun mit einem gerissenen (und bösartigen) Programmierer zu tun haben, könnte dieser dadurch sensible Daten auslesen und verwenden. Hier gibt es Genaueres dazu.

Recently I reactivated my development environment for Qt in my Ubuntu. I started to work on QtDropbox (I did not write about that one, but will soon) and eventually there was a situation that I wanted to investigate further – some strange crash in one of the routines, but that’s not the actual topic I want to share with you.

Maybe you encountered it your self. If you start the Debugger  you receive this error message. I got that one by using QtCreator but I assume there are many more possibilites to get it.

ptrace does not permit this :)

Fixing it

There is a temporary and a permanent fix for this. You’ll require root access rights for both. The temporary solution first. Just run this in your command line:

sudo echo 0 > /proc/sys/kernel/yama/ptrace_scope

This will allow you to run the debugger for your current session – but it will be reset as soon as you restart your computer. For a more permanent solution edit /etc/sysctl.d/10-ptrace.conf and set

kernel.yama.ptrace_scope = 0

That’s all if you only want it to work. Read on if you are interested in the reasons for this error :)

Why does the error occur?

Since Ubuntu 11.04 (“Natty Narwhal”) a security feature named ptrace scope was implemented. This feature prevents users from accessing memory and states of currently running processes – and thus caused that error. Why was such a feature implemented? Because if any user can access the memory it is possible to write software that attaches to a currently running process (like SSH or any GPG agent or anything else) and read the memory of that application. If you are a crafty (and evil minded) programmer you could exploit that to find out sensitive data this process contains. See here for details.

12 comments

  1. Enrique says:

    Hi Daniel,

    I’ve found this article looking for a solution to the same problem. After trying your fix and verifying that it actually works, I’ve realized that the problem only happens when running the program in a terminal. If you disable the “Run in terminal” switch in the project configuration, the error does not happen at all.

  2. Sergiu Bivol says:

    Because ‘sudo’ applies only to the command following it (‘echo’ in this case), the correct command for the temporary fix is:
    echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

    Thank you for the solution and the explanation!

  3. Alexey says:

    Daniel, thanks a lot for this fix! I used the permanent one. And thanks a lot to Mahmoud for the reboot question. :D

Leave a Reply