We consider the decoding of regular low density parity-check codes with a Gallager-B message-passing algorithm built exclusively from faulty computing devices. We propose an extension of the Gallager-B algorithm where messages can be repeated to provide increased fault tolerance, and use EXIT functions to derive its average performance. Thresholds are obtained both for the channel quality and the faultiness of the decoder. We argue that decoding complexity is central to the analysis of faulty decoding and compare the complexity of decoding with a faulty decoder instead of a reliable decoder, for a fixed channel condition and residual error rate. Finally, we show that when the message repetitions in the extended Gallager-B algorithm are scheduled optimally, a small complexity overhead with respect to a reliable decoder provides large gains in fault tolerance.