[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