Re: [PATCH] can: Use correct type in sizeof() in nla_put()
From: Marek Vasut <marex@denx.de>
Date: 2015-10-30 15:33:21
Also in:
linux-can
On Friday, October 30, 2015 at 03:53:31 PM, Oliver Hartkopp wrote:
On 10/30/2015 03:24 PM, Marek Vasut wrote:quoted
On Friday, October 30, 2015 at 03:17:44 PM, Marc Kleine-Budde wrote:quoted
On 10/30/2015 03:01 PM, Marek Vasut wrote:quoted
Are you absolutelly positive this doesn't break kernel ABI please ? I am a little worried there, since the size of can_clock and can_ctrlmode structures differ.struct can_clock is a u32, see [1] struct can_ctrlmode is 2 x u32. in libsocketcan[2] it's accessed like this:quoted
memcpy(res, RTA_DATA(can_attr[IFLA_CAN_CLOCK]), sizeof(struct can_clock));I think it should be ok.In that case, yes, it's good. Hopefully, noone wrote his own thing.Fortunately ip from iproute2 does it similary: https://git.kernel.org/cgit/linux/kernel/git/shemminger/iproute2.git/tree/i p/iplink_can.c#n338 if (tb[IFLA_CAN_CLOCK]) { struct can_clock *clock = RTA_DATA(tb[IFLA_CAN_CLOCK]); fprintf(f, "\n clock %d", clock->freq); } As the clock is a read-only value kernel->userspace and nla_put creates its own small ID/length information each time we are REALLY LUCKY that this fix doesn't break the ABI in this case. When can_clock would have been greater then can_ctrlmode we really had a problem ... Thanks for caching this!
Yeah, I already had one leg in my asbestos trousers all right. Thanks for double-checking this! Best regards, Marek Vasut