gpg: Limit the size of key packets to a sensible value.
authorWerner Koch <wk@gnupg.org>
Thu, 12 Feb 2015 17:45:08 +0000 (18:45 +0100)
committerWerner Koch <wk@gnupg.org>
Thu, 12 Feb 2015 17:45:08 +0000 (18:45 +0100)
commit2b2adb85948ce2c7db727ebc0c99e8ad2c29bf5f
tree87e09b18e3b2b9021b751195a92da009211aafe6
parentf256bab03e2f191bc2e97fd2cc579d82c440b996
gpg: Limit the size of key packets to a sensible value.

* g10/parse-packet.c (MAX_KEY_PACKET_LENGTH): New.
(MAX_UID_PACKET_LENGTH): New.
(MAX_COMMENT_PACKET_LENGTH): New.
(MAX_ATTR_PACKET_LENGTH): New.
(parse_key): Limit the size of a key packet to 256k.
(parse_user_id): Use macro for the packet size limit.
(parse_attribute): Ditto.
(parse_comment): Ditto.
--

Without that it is possible to force gpg to allocate large amounts of
memory by using a bad encoded MPI.  This would be an too easy DoS.
Another way to mitigate would be to change the MPI read function to
allocate memory dynamically while reading the MPI.  However, that
complicates and possibly slows down the code.  A too large key packet
is in any case a sign for broken data and thus gpg should not use it.

Reported-by: Hanno Böck
GnuPG-bug-id: 1823
Signed-off-by: Werner Koch <wk@gnupg.org>
(back ported from commit 382ba4b137b42d5f25a7e256bb7c053ee5ac7b64)
g10/parse-packet.c