[lkml]   [2021]   [Feb]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRE: [PATCH] can: ucan: fix alignment constraints
From: Marc Kleine-Budde
> Sent: 08 February 2021 13:16
> On 04.02.2021 17:26:13, Arnd Bergmann wrote:
> > From: Arnd Bergmann <>
> >
> > struct ucan_message_in contains member with 4-byte alignment
> > but is itself marked as unaligned, which triggers a warning:
> >
> > drivers/net/can/usb/ucan.c:249:1: warning: alignment 1 of 'struct ucan_message_in' is less than 4 [-
> Wpacked-not-aligned]
> >
> > Mark the outer structure to have the same alignment as the inner
> > one.
> >
> > Signed-off-by: Arnd Bergmann <>
> Applied to linux-can-next/testing.

I've just had a look at that file.

Are any of the __packed or __aligned actually required at all.

AFAICT there is one structure that would have end-padding.
But I didn't actually spot anything validating it's length.
Which may well mean that it is possible to read off the end
of the USB receive buffer - plausibly into unmapped addresses.

I looked because all the patches to 'fix' the compiler warning
are dubious.
Once you've changed the outer alignment (eg of a union) then
the compiler will assume that any pointer to that union is aligned.
So any _packed() attributes that are required for mis-aligned
accesses get ignored - because the compiler knows the pointer
must be aligned.

So while the changes remove the warning, they may be removing
support for misaligned addresses.


Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)
 \ /
  Last update: 2021-02-09 11:46    [W:0.082 / U:1.620 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site