staging: dgrp: fix potential call to strncpy with a negative number
authorBill Pemberton <wfp5p@virginia.edu>
Mon, 24 Sep 2012 21:02:08 +0000 (17:02 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 25 Sep 2012 22:42:38 +0000 (15:42 -0700)
In dgrp_receive() there is:

   desclen = ((plen - 12) > MAX_DESC_LEN) ? MAX_DESC_LEN :
                     plen - 12;
   strncpy(nd->nd_ps_desc, b + 12, desclen);

However, it's possible for plen to be <= 12 here so we'd be passing a
negative number into the strncpy().  Fix this to not make the strncpy
call and report an error if desclen is <= 0

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Bill Pemberton <wfp5p@virginia.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/dgrp/dgrp_net_ops.c

index d9d6b6709e4ee22625c643e46d112aae8a201540..ab839ea3b44cb2f4e69186f82b6efe537cbe2f25 100644 (file)
@@ -3156,6 +3156,12 @@ check_query:
                                                nd->nd_hw_id = b[6];
                                                desclen = ((plen - 12) > MAX_DESC_LEN) ? MAX_DESC_LEN :
                                                        plen - 12;
+
+                                               if (desclen <= 0) {
+                                                       error = "Response Packet desclen error";
+                                                       goto prot_error;
+                                               }
+
                                                strncpy(nd->nd_ps_desc, b + 12, desclen);
                                                nd->nd_ps_desc[desclen] = 0;
                                        }