irda: validate peer name and attribute lengths
Subsystems (2)
PATCH 1/1 irda: validate peer name and attribute lengths
Length fields provided by a peer for names and attributes may be longer than the destination array sizes. Validate lengths to prevent stack buffer overflows.
--- net/irda/iriap.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-)
net/irda/iriap.c +6 -0
@@ -656,10 +656,16 @@ static void iriap_getvaluebyclass_indication(struct iriap_cb *self, n =1 ; name_len = fp[n++]; + + IRDA_ASSERT(name_len < IAS_MAX_CLASSNAME + 1, return;); +memcpy (name, fp+n, name_len); n+=name_len; name[name_len] ='\0' ; attr_len = fp[n++]; + + IRDA_ASSERT(attr_len < IAS_MAX_ATTRIBNAME + 1, return;); +memcpy (attr, fp+n, attr_len); n+=attr_len; attr[attr_len] ='\0' ;
Quoted 4 lines · Dan Rosenberg
Length fields provided by a peer for names and attributes may be longer than the destination array sizes. Validate lengths to prevent stack buffer overflows.
While this is the most serious bug I see, this function also seems to lack any validation against skb->len. If someone wants to take care of this, by all means...if not, I'll post a follow-up patch in the next day or so.
-Dan
Quoted 28 lines
Signed-off-by Dan Rosenberg <[email protected]>--- net/irda/iriap.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-)net/irda/iriap.c +6
-0@@ -656,10 +656,16 @@ static void iriap_getvaluebyclass_indication(struct iriap_cb *self, n =1 ; name_len = fp[n++]; + + IRDA_ASSERT(name_len < IAS_MAX_CLASSNAME + 1, return;); +memcpy (name, fp+n, name_len); n+=name_len; name[name_len] ='\0' ; attr_len = fp[n++]; + + IRDA_ASSERT(attr_len < IAS_MAX_ATTRIBNAME + 1, return;); +memcpy (attr, fp+n, attr_len); n+=attr_len; attr[attr_len] ='\0' ;
From: Dan Rosenberg <[email protected]>
Date: Sun, 20 Mar 2011 21:32:06 -0400
Quoted 6 lines
Length fields provided by a peer for names and attributes may be longer than the destination array sizes. Validate lengths to prevent stack buffer overflows.
Signed-off-by Dan Rosenberg <[email protected]>
Applied.