ksmbd: fix -Wstringop-truncation warnings

Kernel test bot reports the following warnings:

   In function 'ndr_write_string',
       inlined from 'ndr_encode_dos_attr' at fs/ksmbd/ndr.c:136:3:
>> fs/ksmbd/ndr.c:70:2: warning: 'strncpy' destination unchanged after
copying no bytes [-Wstringop-truncation]
      70 |  strncpy(PAYLOAD_HEAD(n), value, sz);
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   In function 'ndr_write_string',
       inlined from 'ndr_encode_dos_attr' at fs/ksmbd/ndr.c:134:3:
>> fs/ksmbd/ndr.c:70:2: warning: 'strncpy' output truncated before
terminating nul copying as many bytes from a string as its length
[-Wstringop-truncation]
      70 |  strncpy(PAYLOAD_HEAD(n), value, sz);
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   fs/ksmbd/ndr.c: In function 'ndr_encode_dos_attr':
   fs/ksmbd/ndr.c:134:3: note: length computed here
     134 |   ndr_write_string(n, hex_attr, strlen(hex_attr));
         |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
Hyunchul Lee 2021-07-23 13:01:06 +09:00 коммит произвёл Namjae Jeon
Родитель 654c8876f9
Коммит 1d904eaf3f
1 изменённых файлов: 7 добавлений и 5 удалений

Просмотреть файл

@ -65,13 +65,15 @@ static int ndr_write_bytes(struct ndr *n, void *value, size_t sz)
return 0; return 0;
} }
static int ndr_write_string(struct ndr *n, void *value, size_t sz) static int ndr_write_string(struct ndr *n, char *value)
{ {
size_t sz;
sz = strlen(value) + 1;
if (n->length <= n->offset + sz) if (n->length <= n->offset + sz)
try_to_realloc_ndr_blob(n, sz); try_to_realloc_ndr_blob(n, sz);
strncpy(ndr_get_field(n), value, sz); memcpy(ndr_get_field(n), value, sz);
sz++;
n->offset += sz; n->offset += sz;
n->offset = ALIGN(n->offset, 2); n->offset = ALIGN(n->offset, 2);
return 0; return 0;
@ -134,9 +136,9 @@ int ndr_encode_dos_attr(struct ndr *n, struct xattr_dos_attrib *da)
if (da->version == 3) { if (da->version == 3) {
snprintf(hex_attr, 10, "0x%x", da->attr); snprintf(hex_attr, 10, "0x%x", da->attr);
ndr_write_string(n, hex_attr, strlen(hex_attr)); ndr_write_string(n, hex_attr);
} else { } else {
ndr_write_string(n, "", strlen("")); ndr_write_string(n, "");
} }
ndr_write_int16(n, da->version); ndr_write_int16(n, da->version);
ndr_write_int32(n, da->version); ndr_write_int32(n, da->version);