Hi Andrej, On Thu, Oct 17, 2024 at 9:47 AM Andrej Shadura <andrew.shadura@xxxxxxxxxxxxxxx> wrote: > > On 09/10/2024 14:14, Andrej Shadura wrote: > > Commit 9bf4e919ccad worked around an issue introduced after an > > innocuous optimisation change in LLVM main: > > > >> len is defined as an 'int' because it is assigned from > >> '__user int *optlen'. However, it is clamped against the result of > >> sizeof(), which has a type of 'size_t' ('unsigned long' for 64-bit > >> platforms). This is done with min_t() because min() requires > >> compatible types, which results in both len and the result of > >> sizeof() being casted to 'unsigned int', meaning len changes signs > >> and the result of sizeof() is truncated. From there, len is passed > >> to copy_to_user(), which has a third parameter type of 'unsigned > >> long', so it is widened and changes signs again. This excessive > >> casting in combination with the KCSAN instrumentation causes LLVM to > >> fail to eliminate the __bad_copy_from() call, failing the build. > > > > The same issue occurs in rfcomm in functions rfcomm_sock_getsockopt > > and rfcomm_sock_getsockopt_old. > > > > Change the type of len to size_t in both rfcomm_sock_getsockopt and > > rfcomm_sock_getsockopt_old and replace min_t() with min(). > > Any more reviews please? It would be great to have this fix merged :) I was waiting to see if David had any more feedback, but if he doesn't I'm happy to merge this later today. > Thanks in advance. > > -- > Cheers, > Andrej > -- Luiz Augusto von Dentz