Re: [PATCH] Fix pointer handling in nm_system_set_ip6_route()
- From: Dan Williams <dcbw redhat com>
- To: Tomáš Trnka <tomastrnka gmx com>
- Cc: networkmanager-list gnome org
- Subject: Re: [PATCH] Fix pointer handling in nm_system_set_ip6_route()
- Date: Mon, 13 Feb 2012 13:10:55 -0600
On Sun, 2012-02-12 at 20:25 +0100, Tomáš Trnka wrote:
> Hello,
>
> nm_system_set_ip6_route() incorrectly takes addresses of the two in6_addr
> pointers passed in (ip6_dest and ip6_gateway) and passes that to
> nm_netlink_route_add(). That function takes two void* so the compiler doesn't
> complain at all that in6_addr** is passed in instead of the correct in6_addr*.
> The only symptom of this (except for correct v6 routes not getting added) is
> these two recurring messages:
Ah, good catch. I've pushed a patch that actually makes
nm_netlink_route_add() private, and instead adds two helpers that ensure
we can use compiler type checking so this doesn't happen again. Which
exposed another bug, the add_ip6_route_to_gateway() function was passing
AF_INET instead of AF_INET6, which doesn't seem right.
Thanks!
Dan
> <warn> Failed to add route Netlink Error (errno = No route to host)
> <error> [1328969308.177075] [nm-system.c:595] nm_system_apply_ip6_config():
> (wlan0): failed to set IPv6 route: Netlink Error (errno = No route to host)
>
> (Because nm_netlink_route_add() uses the *value of the pointer*
> ip6_dest/gateway as IPv6 addresses, most often those addresses are
> unreachable. However, I've seen several mystery routes getting added this
> way.)
>
> This is fixed by this one-liner (prepared and tested on the NM 0.9.2.0 in
> Fedora 16; AFAICS the bug is still present in git master):
>
> Signed-off-by: Tomáš Trnka <tomastrnka gmx com>
>
> diff -u -r NetworkManager-0.9.2.0.orig/src/nm-system.c NetworkManager-0.9.2.0/src/nm-system.c
> --- NetworkManager-0.9.2.0.orig/src/nm-system.c 2012-02-11 13:00:11.188000033 +0100
> +++ NetworkManager-0.9.2.0/src/nm-system.c 2012-02-11 14:53:53.231341828 +0100
> @@ -479,7 +479,7 @@
> g_return_val_if_fail (route != NULL, -1);
>
> /* Add the route */
> - err = nm_netlink_route_add(route, AF_INET6, &ip6_dest, ip6_prefix, &ip6_gateway, 0);
> + err = nm_netlink_route_add(route, AF_INET6, ip6_dest, ip6_prefix, ip6_gateway, 0);
> if (err == -NLE_OBJ_NOTFOUND && ip6_gateway) {
> /* Gateway might be over a bridge; try adding a route to gateway first */
> struct rtnl_route *route2;
>
> _______________________________________________
> networkmanager-list mailing list
> networkmanager-list gnome org
> http://mail.gnome.org/mailman/listinfo/networkmanager-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]