aboutsummaryrefslogtreecommitdiff
path: root/networking/interface.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2006-11-27 23:44:57 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2006-11-27 23:44:57 +0000
commit229b3d207216b23a107e4e1ee5584412f6b9318d (patch)
treed21a19b020f0ff35f7d0fa24f9812d68057ff06a /networking/interface.c
parente2d3ded3549edd58fe3b39f2254c65f0808bcac2 (diff)
downloadbusybox-w32-229b3d207216b23a107e4e1ee5584412f6b9318d.tar.gz
busybox-w32-229b3d207216b23a107e4e1ee5584412f6b9318d.tar.bz2
busybox-w32-229b3d207216b23a107e4e1ee5584412f6b9318d.zip
do not overflow ifr_name. maybe it was safe in some places,
but not everywhere. err to the safe side.
Diffstat (limited to 'networking/interface.c')
-rw-r--r--networking/interface.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/networking/interface.c b/networking/interface.c
index 5f54fd9e5..cabfc063b 100644
--- a/networking/interface.c
+++ b/networking/interface.c
@@ -617,12 +617,12 @@ static int if_fetch(struct interface *ife)
617 int fd; 617 int fd;
618 char *ifname = ife->name; 618 char *ifname = ife->name;
619 619
620 strcpy(ifr.ifr_name, ifname); 620 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
621 if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0) 621 if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0)
622 return -1; 622 return -1;
623 ife->flags = ifr.ifr_flags; 623 ife->flags = ifr.ifr_flags;
624 624
625 strcpy(ifr.ifr_name, ifname); 625 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
626 if (ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0) 626 if (ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0)
627 memset(ife->hwaddr, 0, 32); 627 memset(ife->hwaddr, 0, 32);
628 else 628 else
@@ -630,20 +630,20 @@ static int if_fetch(struct interface *ife)
630 630
631 ife->type = ifr.ifr_hwaddr.sa_family; 631 ife->type = ifr.ifr_hwaddr.sa_family;
632 632
633 strcpy(ifr.ifr_name, ifname); 633 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
634 if (ioctl(skfd, SIOCGIFMETRIC, &ifr) < 0) 634 if (ioctl(skfd, SIOCGIFMETRIC, &ifr) < 0)
635 ife->metric = 0; 635 ife->metric = 0;
636 else 636 else
637 ife->metric = ifr.ifr_metric; 637 ife->metric = ifr.ifr_metric;
638 638
639 strcpy(ifr.ifr_name, ifname); 639 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
640 if (ioctl(skfd, SIOCGIFMTU, &ifr) < 0) 640 if (ioctl(skfd, SIOCGIFMTU, &ifr) < 0)
641 ife->mtu = 0; 641 ife->mtu = 0;
642 else 642 else
643 ife->mtu = ifr.ifr_mtu; 643 ife->mtu = ifr.ifr_mtu;
644 644
645#ifdef SIOCGIFMAP 645#ifdef SIOCGIFMAP
646 strcpy(ifr.ifr_name, ifname); 646 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
647 if (ioctl(skfd, SIOCGIFMAP, &ifr) == 0) 647 if (ioctl(skfd, SIOCGIFMAP, &ifr) == 0)
648 ife->map = ifr.ifr_map; 648 ife->map = ifr.ifr_map;
649 else 649 else
@@ -651,7 +651,7 @@ static int if_fetch(struct interface *ife)
651 memset(&ife->map, 0, sizeof(struct ifmap)); 651 memset(&ife->map, 0, sizeof(struct ifmap));
652 652
653#ifdef HAVE_TXQUEUELEN 653#ifdef HAVE_TXQUEUELEN
654 strcpy(ifr.ifr_name, ifname); 654 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
655 if (ioctl(skfd, SIOCGIFTXQLEN, &ifr) < 0) 655 if (ioctl(skfd, SIOCGIFTXQLEN, &ifr) < 0)
656 ife->tx_queue_len = -1; /* unknown value */ 656 ife->tx_queue_len = -1; /* unknown value */
657 else 657 else
@@ -663,24 +663,24 @@ static int if_fetch(struct interface *ife)
663 /* IPv4 address? */ 663 /* IPv4 address? */
664 fd = get_socket_for_af(AF_INET); 664 fd = get_socket_for_af(AF_INET);
665 if (fd >= 0) { 665 if (fd >= 0) {
666 strcpy(ifr.ifr_name, ifname); 666 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
667 ifr.ifr_addr.sa_family = AF_INET; 667 ifr.ifr_addr.sa_family = AF_INET;
668 if (ioctl(fd, SIOCGIFADDR, &ifr) == 0) { 668 if (ioctl(fd, SIOCGIFADDR, &ifr) == 0) {
669 ife->has_ip = 1; 669 ife->has_ip = 1;
670 ife->addr = ifr.ifr_addr; 670 ife->addr = ifr.ifr_addr;
671 strcpy(ifr.ifr_name, ifname); 671 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
672 if (ioctl(fd, SIOCGIFDSTADDR, &ifr) < 0) 672 if (ioctl(fd, SIOCGIFDSTADDR, &ifr) < 0)
673 memset(&ife->dstaddr, 0, sizeof(struct sockaddr)); 673 memset(&ife->dstaddr, 0, sizeof(struct sockaddr));
674 else 674 else
675 ife->dstaddr = ifr.ifr_dstaddr; 675 ife->dstaddr = ifr.ifr_dstaddr;
676 676
677 strcpy(ifr.ifr_name, ifname); 677 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
678 if (ioctl(fd, SIOCGIFBRDADDR, &ifr) < 0) 678 if (ioctl(fd, SIOCGIFBRDADDR, &ifr) < 0)
679 memset(&ife->broadaddr, 0, sizeof(struct sockaddr)); 679 memset(&ife->broadaddr, 0, sizeof(struct sockaddr));
680 else 680 else
681 ife->broadaddr = ifr.ifr_broadaddr; 681 ife->broadaddr = ifr.ifr_broadaddr;
682 682
683 strcpy(ifr.ifr_name, ifname); 683 strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
684 if (ioctl(fd, SIOCGIFNETMASK, &ifr) < 0) 684 if (ioctl(fd, SIOCGIFNETMASK, &ifr) < 0)
685 memset(&ife->netmask, 0, sizeof(struct sockaddr)); 685 memset(&ife->netmask, 0, sizeof(struct sockaddr));
686 else 686 else