EN JP CN

SV.RVT.RETVAL_NOTTESTED

SV.RVT.RETVAL_NOTTESTED

戻り値の無視

戻り値をチェックして、関数が正常に実行されたことを確認することが重要です。 これは、例外とエラー状況を無視すると、予期しない動作を攻撃者がもたらす可能性があるからです。SV.RVT.RETVAL_NOTTESTED チェッカーは、次の関数について無視された戻り値コードを報告します。

functionチェック対象の戻り値
socket-1、0
recv0、-1
pthread_mutex_destroy0
pthread_mutex_lock0
pthread_mutex_trylock0
pthread_mutex_unlock0
pthread_mutex_timedlock0
pthread_mutex_getprioceiling0
pthread_mutex_setprioceiling0
pthread_cond_init0
pthread_cond_destroy0
pthread_cond_wait0
pthread_cond_timedwait0
pthread_cond_broadcast0
pthread_rwlock_init0
pthread_rwlock_destroy0
pthread_rwlock_rdlock0
pthread_rwlock_tryrdlock0
pthread_rwlock_timedrdlock0
pthread_rwlock_wrlock0
pthread_rwlock_trywrlock0
pthread_rwlock_timedwrlock0
pthread_rwlock_unlock0
pthread_rwlockattr_init0
pthread_rwlockattr_destroy0
pthread_spin_init0
pthread_spin_destroy0
pthread_spin_lock0
pthread_spin_trylock0
pthread_spin_unlock0
pthread_barrier_init0
pthread_barrier_destroy0

脆弱性とリスク

これらの脆弱性は通常、頻繁には発生しないと思われる異常または例外的状況がないかをソフトウェアがチェックしないときに発生します。ところが、攻撃者はこれらの状況を利用して異常なアクションを引き起こし、不安定性、異常な動作、または脆弱性をもたらします。攻撃がない場合でも、戻り値がチェックされないと、操作で不良データが使用される可能性があります。 その結果、不正確なプログラムフロー、データ整合性違反、またはアプリケーション障害につながる可能性が高くなります。

軽減と防止

戻り値検証と例外ケースを処理するコードを追加して、異常または例外的状況をチェックし処理する仕組みを確保してください。例外がコードによって確実に処理されるようにするため、エラー状況を特定してください。 そのためには、プログラムを低メモリ状況または権限が不十分な状況で実行するか、トランザクションを中断するか、ネットワークサービスへの接続を無効にします。

脆弱コード例

1  #include <pthread.h>
2  
3  int foo() {
4      pthread_cond_t cond;
5      int res;
6      res = pthread_cond_init(&cond, NULL);
7      return 0;
8  }

Klocwork は 6 行目で指摘レポートを生成し、'pthread_cond_init' の戻り値が 0 と比較されないことを示します。戻り値がチェックされないと、予期しないプログラム動作が発生する可能性があります。

修正コード例

1  #include <pthread.h>
2  
3  int foo() {
4      pthread_cond_t cond;
5      int res;
6      res = pthread_cond_init(&cond, NULL);
7      if (res != 0) return 1;
8      return 0;
9  }

修正された例では、7 行目で戻り値のチェックが行われます。