[PATCH] iproute: ensure scope is correctly initialised

Natanael Copa ncopa at alpinelinux.org
Sat Aug 6 10:56:05 UTC 2016


On Fri, 05 Aug 2016 19:39:31 +0100
Ron Yorston <rmy at pobox.com> wrote:

> Code in iproute.c attempted to avoid assigning values to structure
> elements which were know to be zero unless the value to be assigned
> was non-zero.
> 
> Commit ce4bc1ed added some more such cases.  However, the treatment
> of req.r.rtm_scope was incorrect.  Although this saved a few bytes it
> resulted in incorrect behaviour like:
> 
>    $ sudo busybox ip route add 192.168.0.0/24 via 10.98.106.9 dev wlan0
>    ip: RTNETLINK answers: Invalid argument
> 
> In practice this attempt at optimisation results in no saving, so
> remove it.
> 
> Reported-by: Natanael Copa <ncopa at alpinelinux.org>
> Signed-off-by: Ron Yorston <rmy at pobox.com>

Acked-by: Natanael Copa <ncopa at alpinelinux.org>

We now use this in alpine linux and it works.

Thanks!

> ---
>  networking/libiproute/iproute.c | 15 +++++----------
>  1 file changed, 5 insertions(+), 10 deletions(-)
> 
> diff --git a/networking/libiproute/iproute.c b/networking/libiproute/iproute.c
> index e674e9a..8db9aef 100644
> --- a/networking/libiproute/iproute.c
> +++ b/networking/libiproute/iproute.c
> @@ -356,18 +356,13 @@ IF_FEATURE_IP_RULE(ARG_table,)
>  	req.n.nlmsg_flags = NLM_F_REQUEST | flags;
>  	req.n.nlmsg_type = cmd;
>  	req.r.rtm_family = preferred_family;
> -	if (RT_TABLE_MAIN != 0) /* if it is zero, memset already did it */
> -		req.r.rtm_table = RT_TABLE_MAIN;
> -	if (RT_SCOPE_NOWHERE != 0)
> -		req.r.rtm_scope = RT_SCOPE_NOWHERE;
> +	req.r.rtm_table = RT_TABLE_MAIN;
> +	req.r.rtm_scope = RT_SCOPE_NOWHERE;
>  
>  	if (cmd != RTM_DELROUTE) {
> -		if (RTPROT_BOOT != 0)
> -			req.r.rtm_protocol = RTPROT_BOOT;
> -		if (RT_SCOPE_UNIVERSE != 0)
> -			req.r.rtm_scope = RT_SCOPE_UNIVERSE;
> -		if (RTN_UNICAST != 0)
> -			req.r.rtm_type = RTN_UNICAST;
> +		req.r.rtm_protocol = RTPROT_BOOT;
> +		req.r.rtm_scope = RT_SCOPE_UNIVERSE;
> +		req.r.rtm_type = RTN_UNICAST;
>  	}
>  
>  	mxrta->rta_type = RTA_METRICS;



More information about the busybox mailing list