DhcpClient: guard against failure to parse packets

DhcpPacket.decodeFullPacket() is not exception safe and can throw
various runtime exceptions when trying to parse malicious or malformed
packets.

This patch adds a generic catch-all-exception in DhcpClient to avoid
propagating the exception and killing the framework process on reception
of such malformed packets.

Bug: 31850211
Change-Id: I2e723a792ff067ada2834da875700d4df16c5159
This commit is contained in:
Hugo Benichi
2016-10-11 11:39:39 +09:00
parent 5d1bfd9d5f
commit 89aa6fb4d8

View File

@@ -43,6 +43,7 @@ import android.os.SystemClock;
import android.system.ErrnoException;
import android.system.Os;
import android.system.PacketSocketAddress;
import android.util.EventLog;
import android.util.Log;
import android.util.TimeUtils;
@@ -359,6 +360,14 @@ public class DhcpClient extends BaseDhcpStateMachine {
if (!stopped) {
Log.e(TAG, "Read error", e);
}
} catch (Exception e) {
// SafetyNet logging for b/31850211
int snetTagId = 0x534e4554;
String bugId = "31850211";
int uid = -1;
String data = e.getClass().getName();
EventLog.writeEvent(snetTagId, bugId, uid, data);
Log.e(TAG, "Failed to parse DHCP packet", e);
}
}
maybeLog("Receive thread stopped");