[<prev] [next>] [day] [month] [year] [list]
Message-ID: <87628dmmph.fsf@rho.meyering.net>
Date: Mon, 20 Aug 2012 20:40:10 +0200
From: Jim Meyering <jim@...ering.net>
To: Bastien ROUCARIES <roucaries.bastien@...il.com>
Cc: linux-cifs@...r.kernel.org, linux-kernel@...r.kernel.org,
samba-technical@...ts.samba.org, Steve French <sfrench@...ba.org>
Subject: Re: [PATCH] cifs: remove misleading strncpy: each name has length < 16
Bastien ROUCARIES wrote:
> Le 20 août 2012 19:29, "Jim Meyering" <jim@...ering.net> a écrit :
>>
>> From: Jim Meyering <meyering@...hat.com>
>>
>> Each of the protocols[i].name strings (statically declared above)
>> has length less than 16, so this use of strncpy is misleading:
>> strncpy(pSMB->DialectsArray+count, protocols[i].name, 16);
>> Besides, if a new name were added with length N >= 16, the existing
>> strncpy-using code would be buggy, creating a ->DialectsArray buffer
>> containing N-16+1 unset bytes where the NUL terminator should have
>> been. Instead, traverse the name only once go get its length,
>> use a BUG_ON assertion to enforce the length restriction
>> and use memcpy to perform the copy.
>
> Could you use ARRAY_SIZE instead of hard coding 16?
Not that I can see: the DialectsArray member is declared like this:
typedef struct negotiate_req {
struct smb_hdr hdr; /* wct = 0 */
__le16 ByteCount;
unsigned char DialectsArray[1];
} __attribute__((packed)) NEGOTIATE_REQ;
...
>> diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c
>> index 074923c..16a9018 100644
>> --- a/fs/cifs/cifssmb.c
>> +++ b/fs/cifs/cifssmb.c
>> @@ -441,8 +441,10 @@ CIFSSMBNegotiate(const unsigned int xid, struct cifs_ses
> *ses)
>>
>> count = 0;
>> for (i = 0; i < CIFS_NUM_PROT; i++) {
>> - strncpy(pSMB->DialectsArray+count, protocols[i].name, 16);
>> - count += strlen(protocols[i].name) + 1;
>> + size_t len = strlen(protocols[i].name);
>> + BUG_ON(len >= 16);
>> + memcpy(pSMB->DialectsArray+count, protocols[i].name, len + 1);
>> + count += len + 1;
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists