Patchwork can: dev: fix nlmsg size calculation in can_get_size()

login
register
mail settings
Submitter Marc Kleine-Budde
Date Oct. 5, 2013, 7:25 p.m.
Message ID <1381001117-19624-1-git-send-email-mkl@pengutronix.de>
Download mbox | patch
Permalink /patch/280787/
State Accepted
Delegated to: David Miller
Headers show

Comments

Marc Kleine-Budde - Oct. 5, 2013, 7:25 p.m.
This patch fixes the calculation of the nlmsg size, by adding the missing
nla_total_size().

Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
Hello,

this patch touches the rtnl_link_ops get_size() callback:

    static struct rtnl_link_ops can_link_ops __read_mostly = {
    ...
    	.get_size	= can_get_size,
    ...
    };

By looking at other nlmsg size calculation I think a nla_total_size() for all
contributers is needed. Am I correct?

regards,
Marc

 drivers/net/can/dev.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
Wolfgang Grandegger - Oct. 5, 2013, 8:50 p.m.
On 10/05/2013 09:25 PM, Marc Kleine-Budde wrote:
> This patch fixes the calculation of the nlmsg size, by adding the missing
> nla_total_size().
> 
> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
> ---
> Hello,
> 
> this patch touches the rtnl_link_ops get_size() callback:
> 
>     static struct rtnl_link_ops can_link_ops __read_mostly = {
>     ...
>     	.get_size	= can_get_size,
>     ...
>     };
> 
> By looking at other nlmsg size calculation I think a nla_total_size() for all
> contributers is needed. Am I correct?

Yes, seems so, nla_put() calls this code:

  http://lxr.free-electrons.com/source/lib/nlattr.c#L328

Wolfgang.

> regards,
> Marc
> 
>  drivers/net/can/dev.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
> index f9cba41..1870c47 100644
> --- a/drivers/net/can/dev.c
> +++ b/drivers/net/can/dev.c
> @@ -705,14 +705,14 @@ static size_t can_get_size(const struct net_device *dev)
>  	size_t size;
>  
>  	size = nla_total_size(sizeof(u32));   /* IFLA_CAN_STATE */
> -	size += sizeof(struct can_ctrlmode);  /* IFLA_CAN_CTRLMODE */
> +	size += nla_total_size(sizeof(struct can_ctrlmode));  /* IFLA_CAN_CTRLMODE */
>  	size += nla_total_size(sizeof(u32));  /* IFLA_CAN_RESTART_MS */
> -	size += sizeof(struct can_bittiming); /* IFLA_CAN_BITTIMING */
> -	size += sizeof(struct can_clock);     /* IFLA_CAN_CLOCK */
> +	size += nla_total_size(sizeof(struct can_bittiming)); /* IFLA_CAN_BITTIMING */
> +	size += nla_total_size(sizeof(struct can_clock));     /* IFLA_CAN_CLOCK */
>  	if (priv->do_get_berr_counter)        /* IFLA_CAN_BERR_COUNTER */
> -		size += sizeof(struct can_berr_counter);
> +		size += nla_total_size(sizeof(struct can_berr_counter));
>  	if (priv->bittiming_const)	      /* IFLA_CAN_BITTIMING_CONST */
> -		size += sizeof(struct can_bittiming_const);
> +		size += nla_total_size(sizeof(struct can_bittiming_const));
>  
>  	return size;
>  }
> 

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Marc Kleine-Budde - Oct. 7, 2013, 2:14 p.m.
On 10/05/2013 10:50 PM, Wolfgang Grandegger wrote:
> On 10/05/2013 09:25 PM, Marc Kleine-Budde wrote:
>> This patch fixes the calculation of the nlmsg size, by adding the missing
>> nla_total_size().
>>
>> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
>> ---
>> Hello,
>>
>> this patch touches the rtnl_link_ops get_size() callback:
>>
>>     static struct rtnl_link_ops can_link_ops __read_mostly = {
>>     ...
>>     	.get_size	= can_get_size,
>>     ...
>>     };
>>
>> By looking at other nlmsg size calculation I think a nla_total_size() for all
>> contributers is needed. Am I correct?
> 
> Yes, seems so, nla_put() calls this code:
> 
>   http://lxr.free-electrons.com/source/lib/nlattr.c#L328

Is this an Acked-by? :)

Marc
Wolfgang Grandegger - Oct. 7, 2013, 2:24 p.m.
On Mon, 07 Oct 2013 16:14:36 +0200, Marc Kleine-Budde <mkl@pengutronix.de>
wrote:
> On 10/05/2013 10:50 PM, Wolfgang Grandegger wrote:
>> On 10/05/2013 09:25 PM, Marc Kleine-Budde wrote:
>>> This patch fixes the calculation of the nlmsg size, by adding the
>>> missing
>>> nla_total_size().
>>>
>>> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
>>> ---
>>> Hello,
>>>
>>> this patch touches the rtnl_link_ops get_size() callback:
>>>
>>>     static struct rtnl_link_ops can_link_ops __read_mostly = {
>>>     ...
>>>     	.get_size	= can_get_size,
>>>     ...
>>>     };
>>>
>>> By looking at other nlmsg size calculation I think a nla_total_size()
>>> for all
>>> contributers is needed. Am I correct?
>> 
>> Yes, seems so, nla_put() calls this code:
>> 
>>   http://lxr.free-electrons.com/source/lib/nlattr.c#L328
> 
> Is this an Acked-by? :)

Yep, obviously a long time ago that I did something for Linux-CAN :(.

Wolfgang.

> 
> Marc
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Marc Kleine-Budde - Oct. 7, 2013, 2:26 p.m.
On 10/07/2013 04:24 PM, Wolfgang Grandegger wrote:

>> Is this an Acked-by? :)
> Yep, obviously a long time ago that I did something for Linux-CAN :(.

Thx, there are some netlink related patches coming soon :)

Marc
David Miller - Oct. 7, 2013, 7:56 p.m.
From: Marc Kleine-Budde <mkl@pengutronix.de>
Date: Sat,  5 Oct 2013 21:25:17 +0200

> This patch fixes the calculation of the nlmsg size, by adding the missing
> nla_total_size().
> 
> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>

Applied and queued up for -stable, thanks.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
index f9cba41..1870c47 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
@@ -705,14 +705,14 @@  static size_t can_get_size(const struct net_device *dev)
 	size_t size;
 
 	size = nla_total_size(sizeof(u32));   /* IFLA_CAN_STATE */
-	size += sizeof(struct can_ctrlmode);  /* IFLA_CAN_CTRLMODE */
+	size += nla_total_size(sizeof(struct can_ctrlmode));  /* IFLA_CAN_CTRLMODE */
 	size += nla_total_size(sizeof(u32));  /* IFLA_CAN_RESTART_MS */
-	size += sizeof(struct can_bittiming); /* IFLA_CAN_BITTIMING */
-	size += sizeof(struct can_clock);     /* IFLA_CAN_CLOCK */
+	size += nla_total_size(sizeof(struct can_bittiming)); /* IFLA_CAN_BITTIMING */
+	size += nla_total_size(sizeof(struct can_clock));     /* IFLA_CAN_CLOCK */
 	if (priv->do_get_berr_counter)        /* IFLA_CAN_BERR_COUNTER */
-		size += sizeof(struct can_berr_counter);
+		size += nla_total_size(sizeof(struct can_berr_counter));
 	if (priv->bittiming_const)	      /* IFLA_CAN_BITTIMING_CONST */
-		size += sizeof(struct can_bittiming_const);
+		size += nla_total_size(sizeof(struct can_bittiming_const));
 
 	return size;
 }