staging: for dgrp, let nd_ps_desc always NUL terminated string within MAX_DESC_LEN...
authorChen Gang <gang.chen@asianux.com>
Thu, 2 May 2013 09:05:28 +0000 (17:05 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 13 May 2013 22:08:16 +0000 (18:08 -0400)
Use strlcpy instead of strncpy to let nd_ps_desc always NUL terminated.

Change nd_ps_desc in nd_struct struct to MAX_DESC_LEN to avoid the
confusion (the related length checking also need be changed to
MAX_DESC_LEN - 1).

Signed-off-by: Chen Gang <gang.chen@asianux.com>
Acked-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/dgrp/dgrp_dpa_ops.c
drivers/staging/dgrp/dgrp_net_ops.c
drivers/staging/dgrp/drp.h

index 114799c..69bfe30 100644 (file)
@@ -392,7 +392,7 @@ static long dgrp_dpa_ioctl(struct file *file, unsigned int cmd,
                getnode.nd_rx_byte = nd->nd_rx_byte;
 
                memset(&getnode.nd_ps_desc, 0, MAX_DESC_LEN);
-               strncpy(getnode.nd_ps_desc, nd->nd_ps_desc, MAX_DESC_LEN);
+               strlcpy(getnode.nd_ps_desc, nd->nd_ps_desc, MAX_DESC_LEN);
 
                if (copy_to_user(uarg, &getnode, sizeof(struct digi_node)))
                        return -EFAULT;
index 6cf7672..7a0d72d 100644 (file)
@@ -3083,7 +3083,7 @@ check_query:
                                                nd->nd_hw_ver = (b[8] << 8) | b[9];
                                                nd->nd_sw_ver = (b[10] << 8) | b[11];
                                                nd->nd_hw_id = b[6];
-                                               desclen = ((plen - 12) > MAX_DESC_LEN) ? MAX_DESC_LEN :
+                                               desclen = (plen - 12 > MAX_DESC_LEN - 1) ? MAX_DESC_LEN - 1 :
                                                        plen - 12;
 
                                                if (desclen <= 0) {
index 84a1e7b..4024b48 100644 (file)
@@ -674,7 +674,7 @@ struct nd_struct {
        ushort       nd_hw_ver;           /* HW version returned from PS   */
        ushort       nd_sw_ver;           /* SW version returned from PS   */
        uint         nd_hw_id;            /* HW ID returned from PS        */
-       u8        nd_ps_desc[MAX_DESC_LEN+1];  /* Description from PS   */
+       u8        nd_ps_desc[MAX_DESC_LEN];  /* Description from PS     */
        uint         nd_vpd_len;                /* VPD len, if any */
        u8           nd_vpd[VPDSIZE];           /* VPD, if any */