On 2/14/22 10:26, David Laight wrote: > From: David Laight >> Sent: 14 February 2022 09:12 >> >> From: Helge Deller >>> Sent: 13 February 2022 22:10 >>> >>> The put_user(val,ptr) macro wants a pointer in the second parameter, but in >>> fat_ioctl_filldir() the d_name field references a whole "array of chars". >>> Usually the compiler automatically converts it and uses a pointer to that >>> array, but it's more clean to explicitly give the real pointer to where someting >>> is put, which is in this case the first character of the d_name[] array. >> >> That just isn't true. >> >> In C both x->char_array and &x->char_array[0] have the same type >> 'char *'. >> >> The 'bug' is caused by put_user() trying to do: >> __typeof__(ptr) __ptr = ptr; >> where __typeof__ is returning char[n] not char *. >> >> I've tried a few things but can't get __typeof__ to >> generate a suitable type for both a simple type and array. > > Actually the issue is that put_user() writes a single variable > and needs a pointer to one. > So changing to: > put_user(0, &array[0]); > is probably fine. Ok. > But the description is all wrong. I agree it can be improved. Would you mind proposing a better description? Helge