ICMP (Internet Control Message Protocol) is a protocol which makes it possible to manage information relating to errors on networked machines. Considering the few controls that IP protocol carries out, it not only allows errors to be corrected but also informs the protocols of neighboring layers of these errors. So, ICMP protocol is used by all routers, who use it to indicate an error (called a Delivery Problem).
ICMP error messages are sent over the network in datagram form, like any other data. So, the error messages themselves can be subject to errors.
However, in the event of an error on a datagram carrying an ICMP message, no error message is delivered in order to avoid a "snowball" effect in the event of an incident on the network.
Here is what an ICMP message encapsulated in an IP datagram resembles:
For more information on ICMP protocol, please refer to RFC792 which explains the protocol in detail: