diff options
author | hrs <hrs@FreeBSD.org> | 2013-07-24 04:05:48 +0000 |
---|---|---|
committer | hrs <hrs@FreeBSD.org> | 2013-07-24 04:05:48 +0000 |
commit | 512fdf0a5e5fc67140a2137d3923a289e4a06d1f (patch) | |
tree | 0dbde06da080f9db5eaf6e5dc0bfec7ea819b24d /sbin | |
parent | 565fb1612f8beaf171ecbb895a4096ae097a6a72 (diff) | |
download | FreeBSD-src-512fdf0a5e5fc67140a2137d3923a289e4a06d1f.zip FreeBSD-src-512fdf0a5e5fc67140a2137d3923a289e4a06d1f.tar.gz |
Fix a bug in cp += SA_SIZE() in RTA_* loop. This could prevent
RTA_IFP from displaying correctly in route get subcommand.
Spotted by: dim
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/route/route.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/sbin/route/route.c b/sbin/route/route.c index 6bfca13..ebf95c6 100644 --- a/sbin/route/route.c +++ b/sbin/route/route.c @@ -1699,16 +1699,15 @@ print_getmsg(struct rt_msghdr *rtm, int msglen, int fib) return; } cp = ((char *)(rtm + 1)); - for (i = 0; i < RTAX_MAX; i++) { - if (rtm->rtm_addrs & (1 << i)) + for (i = 0; i < RTAX_MAX; i++) + if (rtm->rtm_addrs & (1 << i)) { sp[i] = (struct sockaddr *)cp; - cp += SA_SIZE((struct sockaddr *)cp); - } - if (rtm->rtm_addrs & RTA_IFP) { - if (sp[RTAX_IFP]->sa_family != AF_LINK || - ((struct sockaddr_dl *)(void *)sp[RTAX_IFP])->sdl_nlen == 0) + cp += SA_SIZE((struct sockaddr *)cp); + } + if ((rtm->rtm_addrs & RTA_IFP) && + (sp[RTAX_IFP]->sa_family != AF_LINK || + ((struct sockaddr_dl *)(void *)sp[RTAX_IFP])->sdl_nlen == 0)) sp[RTAX_IFP] = NULL; - } if (sp[RTAX_DST] && sp[RTAX_NETMASK]) sp[RTAX_NETMASK]->sa_family = sp[RTAX_DST]->sa_family; /* XXX */ if (sp[RTAX_DST]) |