0

I am testing a small issue with a daemon here (written in linux). I want to know whether what is done is right or not.

The daemon loads a shared object file (.so) using dlopen call. The the shared object receives some buffers from clients over the network. It uses the following call to read the buffer:

read_buffer(something, length of buffer read, buffer contents);

The read_buffer function copies the buffer of length specified in the second parameter, to another location using memcpy

On the client side, the following is done:

write_buffer(something, length of buffer, buffer contents);

The problem is that if we send an invalid length parameter (not matching the real length of what is copied in the third parameter), from the client side, there is a segfault in the server side in the memcpy location

I am not sure how to input-validate the parameters that are passed to memcpy function

Request you to please help me out understand what is possible solution

4

2 に答える 2

2

C/C++ コードのメモリ割り当て/アクセスのエラーをチェックするには、Valgrindを使用します。サーバー側には、渡されたパラメーターが有効かどうかを判断する方法がありません (私が知っていることです)。それが C/C++ の信条です。セーフティネットはありません。

于 2012-06-18T07:34:38.067 に答える
1

バッファの先頭にバッファの長さを追加できます。
-------------------------------------------------- -----------
| バッファーの固定長 - n バイト | バッファ
-------------------------------------------------- ------------

サーバー側でそれを読み取るたびに、最初に長さを含む「n」バイト(長さを格納するために予約されています)を読み取ります。データが到着したら、比較length of bufferfirst n bytesて検証することができます。お役に立てれば。

于 2012-06-18T08:19:02.650 に答える