Hi Slava,

On to, 2015-04-02 at 12:20 +0300, Slava Monich wrote:
> On 02/04/15 09:14, Patrik Flykt wrote:
> > @@ -634,17 +634,15 @@ int connman_inet_add_ipv6_network_route(int index, 
> > const char *host,
> >  
> >     rt.rtmsg_dst_len = prefix_len;
> >  
> > -   if (inet_pton(AF_INET6, host, &rt.rtmsg_dst) < 0) {
> > +   if (inet_pton(AF_INET6, host, &rt.rtmsg_dst) < 1) {
> >             err = -errno;
> >             goto out;
> >     }
> >  
> >     rt.rtmsg_flags = RTF_UP | RTF_HOST;
> >  
> > -   if (gateway) {
> > +   if (gateway && inet_pton(AF_INET6, gateway, &rt.rtmsg_gateway) > 0)
> >             rt.rtmsg_flags |= RTF_GATEWAY;
> > -           inet_pton(AF_INET6, gateway, &rt.rtmsg_gateway);
> > -   }
> > At this point if inet_pton fails, why are we continuing with the
> > rt.rtmsg? Apparently there was a gateway with an unusable IPv6 address
> > so shouldn't we return error instead?
> 
> 
> In cases where it does happen in reality, even if we return an error,
> the caller (add_nameserver_route) would call
> connman_inet_add_ipv6_network_route again with NULL gateway. This code
> is doing it in one shot but it does make an assumption about what the
> caller actually means by providing an invalid gateway address.
> 
> In any case it's better than using bogus gateway address.

As Patrik mentioned, why not just do

        if (gateway) {
                if (inet_pton(AF_INET6, gateway, &rt.rtmsg_gateway) < 1)
                        return -EINVAL;

                rt.rtmsg_flags |= RTF_GATEWAY;
        }

and let caller decide what to do next if gateway address was bogus.


Cheers,
Jukka


_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman

Reply via email to