setuid または setgid ビットのどちらかが設定されたプロセスを execve(2) システムコールで実行した (そして結果として追加の特権が与えられた) 場合、 あるいはプロセスの実ユーザ ID、実効ユーザ ID、退避ユーザ ID、 もしくは実グループ ID、実効グループ ID、退避グループ ID のいずれかが 実行後に変更された場合、そのプロセスは汚染されていると見なされます。
このシステムコールは、ユーザから得られた情報を使用するのが 安全かどうかをライブラリルーチン (たとえば libc や libtermcap) が 信頼性を持って判定できるようにするために存在します。 特に getenv(3) からの結果を、オペレーションの制御のために使用する場合には 疑いを持って見る必要があります。
``汚染された'' 状態は、 fork(2) システムコール (あるいは popen(3) のような fork を呼び出す他のライブラリコード) の結果として、 子プロセスに継承されます。
別のプログラムを実行する準備をするときにすべての特権を クリアするプログラムは、環境もリセットすると想定されます。 したがって ``汚染された'' 状態は引き渡されません。 setuid を開始するけれども汚染されていないプロセスを作成できる必要のある su(1) のようなプログラムにはこれは重要です。