Skip to content

Commit 7d5d8d7

Browse files
namjaejeonsmfrench
authored andcommitted
ksmbd: fix __write_overflow warning in ndr_read_string
Dan reported __write_overflow warning in ndr_read_string. CC [M] fs/ksmbd/ndr.o In file included from ./include/linux/string.h:253, from ./include/linux/bitmap.h:11, from ./include/linux/cpumask.h:12, from ./arch/x86/include/asm/cpumask.h:5, from ./arch/x86/include/asm/msr.h:11, from ./arch/x86/include/asm/processor.h:22, from ./arch/x86/include/asm/cpufeature.h:5, from ./arch/x86/include/asm/thread_info.h:53, from ./include/linux/thread_info.h:60, from ./arch/x86/include/asm/preempt.h:7, from ./include/linux/preempt.h:78, from ./include/linux/spinlock.h:55, from ./include/linux/wait.h:9, from ./include/linux/wait_bit.h:8, from ./include/linux/fs.h:6, from fs/ksmbd/ndr.c:7: In function memcpy, inlined from ndr_read_string at fs/ksmbd/ndr.c:86:2, inlined from ndr_decode_dos_attr at fs/ksmbd/ndr.c:167:2: ./include/linux/fortify-string.h:219:4: error: call to __write_overflow declared with attribute error: detected write beyond size of object __write_overflow(); ^~~~~~~~~~~~~~~~~~ This seems to be a false alarm because hex_attr size is always smaller than n->length. This patch fix this warning by allocation hex_attr with n->length. Reported-by: Dan Carpenter <[email protected]> Signed-off-by: Namjae Jeon <[email protected]> Signed-off-by: Steve French <[email protected]>
1 parent 32e19d1 commit 7d5d8d7

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

fs/ksmbd/ndr.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,11 +160,16 @@ int ndr_encode_dos_attr(struct ndr *n, struct xattr_dos_attrib *da)
160160

161161
int ndr_decode_dos_attr(struct ndr *n, struct xattr_dos_attrib *da)
162162
{
163-
char hex_attr[12] = {0};
163+
char *hex_attr;
164164
int version2;
165165

166+
hex_attr = kzalloc(n->length, GFP_KERNEL);
167+
if (!hex_attr)
168+
return -ENOMEM;
169+
166170
n->offset = 0;
167-
ndr_read_string(n, hex_attr, n->length - n->offset);
171+
ndr_read_string(n, hex_attr, n->length);
172+
kfree(hex_attr);
168173
da->version = ndr_read_int16(n);
169174

170175
if (da->version != 3 && da->version != 4) {

0 commit comments

Comments
 (0)