diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-11-27 23:44:57 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-11-27 23:44:57 +0000 |
commit | 229b3d207216b23a107e4e1ee5584412f6b9318d (patch) | |
tree | d21a19b020f0ff35f7d0fa24f9812d68057ff06a /networking/interface.c | |
parent | e2d3ded3549edd58fe3b39f2254c65f0808bcac2 (diff) | |
download | busybox-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.c | 20 |
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 |