diff options
author | ajs <ajs> | 2005-04-02 22:50:38 +0000 |
---|---|---|
committer | ajs <ajs> | 2005-04-02 22:50:38 +0000 |
commit | a349198fd3e4e5692cdc91223f8153cb53c086ce (patch) | |
tree | e5b366a8ab7ab9ed1c9670faf1f18eef26877ade /zebra | |
parent | f695b01ff8e9aebc46bdf41f104ad4abbb0ef59e (diff) |
2005-04-02 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* if.h: (if_lookup_by_name_len, if_get_by_name_len) New functions.
* if.c: (if_lookup_by_name_len, if_get_by_name_len) New functions.
(if_get_by_name) Tighten up code.
(interface) Use new function if_get_by_name_len.
* zclient.c: (zebra_interface_add_read) Use new if_get_by_name_len
function.
(zebra_interface_state_read) Use new if_lookup_by_name_len function.
* kernel_socket.c: (ifm_read) Use new if_lookup_by_name_len function
to save a memcpy.
* if_ioctl_solaris.c: (interface_list_ioctl) Fix subtle bug with new
if_get_by_name_len function.
* ospf_interface.c: (ospf_vl_new) Use strnlen to fix call to if_create.
Diffstat (limited to 'zebra')
-rw-r--r-- | zebra/ChangeLog | 7 | ||||
-rw-r--r-- | zebra/if_ioctl_solaris.c | 4 | ||||
-rw-r--r-- | zebra/kernel_socket.c | 8 |
3 files changed, 14 insertions, 5 deletions
diff --git a/zebra/ChangeLog b/zebra/ChangeLog index 572d2687..924f0f0a 100644 --- a/zebra/ChangeLog +++ b/zebra/ChangeLog @@ -1,5 +1,12 @@ 2005-04-02 Andrew J. Schorr <ajschorr@alumni.princeton.edu> + * kernel_socket.c: (ifm_read) Use new if_lookup_by_name_len function + to save a memcpy. + * if_ioctl_solaris.c: (interface_list_ioctl) Fix subtle bug with new + if_get_by_name_len function. + +2005-04-02 Andrew J. Schorr <ajschorr@alumni.princeton.edu> + * interface.c: (if_new_intern_ifindex) Remove obsolete function. (if_delete_update) After distributing the interface deletion message, set ifp->ifindex to IFINDEX_INTERNAL. diff --git a/zebra/if_ioctl_solaris.c b/zebra/if_ioctl_solaris.c index 38ac5a71..aa01b073 100644 --- a/zebra/if_ioctl_solaris.c +++ b/zebra/if_ioctl_solaris.c @@ -138,7 +138,9 @@ calculate_lifc_len: /* must hold privileges to enter here */ for (n = 0; n < lifconf.lifc_len; n += sizeof (struct lifreq)) { - ifp = if_get_by_name (lifreq->lifr_name); + ifp = if_get_by_name_len(lifreq->lifr_name, + strnlen(lifreq->lifr_name, + sizeof(lifreq->lifr_name))); if (lifreq->lifr_addr.ss_family == AF_INET) ifp->flags |= IFF_IPV4; diff --git a/zebra/kernel_socket.c b/zebra/kernel_socket.c index cdc6822c..12125630 100644 --- a/zebra/kernel_socket.c +++ b/zebra/kernel_socket.c @@ -235,7 +235,6 @@ ifm_read (struct if_msghdr *ifm) struct sockaddr_dl *sdl = NULL; void *cp; unsigned int i; - char ifname[IFNAMSIZ]; /* paranoia: sanity check structure */ if (ifm->ifm_msglen < sizeof(struct if_msghdr)) @@ -309,6 +308,9 @@ ifm_read (struct if_msghdr *ifm) /* * paranoia: sanity check name length. nlen does not include * trailing zero, but IFNAMSIZ max length does. + * + * XXX Is this test correct? Should it be '>=' or '>'? And is it even + * necessary now that we are using if_lookup_by_name_len? */ if (sdl->sdl_nlen >= IFNAMSIZ) { @@ -316,9 +318,7 @@ ifm_read (struct if_msghdr *ifm) return -1; } - memcpy (ifname, sdl->sdl_data, sdl->sdl_nlen); - ifname[sdl->sdl_nlen] = '\0'; - ifp = if_lookup_by_name (ifname); + ifp = if_lookup_by_name_len (sdl->sdl_data, sdl->sdl_nlen); } /* |