[Olsr-users] Compiler warning on 0.5.6 branch tip release candidate
Eric Malkowski
(spam-protected)
Thu Oct 1 02:19:38 CEST 2009
Guys-
I got a single compiler warning when building linux/kernel_routes.c which I
think is the new netlink notifier stuff that just went in that should probably
be fixed before 0.5.6-r6 release IMHO:
line 104 variable iface could be used uninitialized and the compiler is right:
The code that says:
iface = if_ifwithindex(ifi->ifi_index);
Should probably be moved up to the start of the function.
This is so the two OLSR_PRINTF calls that reference iface won't use iface
unitialized.
I don't know if iface can end up NULL when the above mentioned line that assigns
it runs, but defensive code never hurts.
The netlink_process_link() function might be better like this with iface getting
assigned first and tests for NULL to avoid NULL pointer dereferences:
static void netlink_process_link(struct nlmsghdr *h)
{
struct ifinfomsg *ifi = (struct ifinfomsg *) NLMSG_DATA(h);
struct interface *iface;
//all IFF flags:
LOOPBACK,BROADCAST;POINTOPOINT;MULTICAST;NOARP;ALLMULTI;PROMISC;MASTER;SLAVE;DEBUG;DYNAMIC;AUTOMEDIA;PORTSEL;NOTRAILERS;UP;LOWER_UP;DORMANT
iface = if_ifwithindex(ifi->ifi_index);
/* check if interface is up and running? (a not running interface keeps its
routes, so better not react like on ifdown!!??) */
if (ifi->ifi_flags&IFF_UP) {
if(iface != NULL)
OLSR_PRINTF(3,"interface %s changed but is still up! ", iface->int_name);
return; //we are currently only interested in interfaces that are/go down
} else {
if(iface != NULL)
OLSR_PRINTF(1,"interface %s is down! ", iface->int_name);
}
//only for still configured interfaces (ifup has to be detected with regular
interface polling)
if ( iface != NULL ) {
struct olsr_if *tmp_if;
for (tmp_if = olsr_cnf->interfaces; tmp_if != NULL; tmp_if = tmp_if->next) {
if (tmp_if->interf==iface) {
OLSR_PRINTF(1,"-> removing %s from olsr config! ", iface->int_name);
RemoveInterface(tmp_if,true);
break;
}
}
}
}
More information about the Olsr-users
mailing list