Bug 751: file handle leaks can add up until available filehandles for the process are exhausted.
This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)
No binary (build failed)
—
(log yok)
| @@ -177,24 +177,30 @@ int kernel_packet(struct dhcpMessage *payload, uint32_t source_ip, int source_po | |
| if ((fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) | |
| return -1; | |
| - | if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *) &n, sizeof(n)) == -1) |
| + | if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *) &n, sizeof(n)) == -1) { |
| + | close(fd); |
| return -1; | |
| + | } |
| memset(&client, 0, sizeof(client)); | |
| client.sin_family = AF_INET; | |
| client.sin_port = htons(source_port); | |
| client.sin_addr.s_addr = source_ip; | |
| - | if (bind(fd, (struct sockaddr *)&client, sizeof(struct sockaddr)) == -1) |
| + | if (bind(fd, (struct sockaddr *)&client, sizeof(struct sockaddr)) == -1) { |
| + | close(fd); |
| return -1; | |
| + | } |
| memset(&client, 0, sizeof(client)); | |
| client.sin_family = AF_INET; | |
| client.sin_port = htons(dest_port); | |
| client.sin_addr.s_addr = dest_ip; | |
| - | if (connect(fd, (struct sockaddr *)&client, sizeof(struct sockaddr)) == -1) |
| + | if (connect(fd, (struct sockaddr *)&client, sizeof(struct sockaddr)) == -1) { |
| + | close(fd); |
| return -1; | |
| + | } |
| result = write(fd, payload, sizeof(struct dhcpMessage)); | |
| close(fd); | |
| @@ -62,6 +62,7 @@ int read_interface(char *interface, int *ifindex, uint32_t *addr, uint8_t *arp) | |
| DEBUG(LOG_INFO, "%s (our ip) = %s", ifr.ifr_name, inet_ntoa(our_ip->sin_addr)); | |
| } else { | |
| LOG(LOG_ERR, "SIOCGIFADDR failed, is the interface up and configured?: %m"); | |
| + | close(fd); |
| return -1; | |
| } | |
| } | |
| @@ -71,6 +72,7 @@ int read_interface(char *interface, int *ifindex, uint32_t *addr, uint8_t *arp) | |
| *ifindex = ifr.ifr_ifindex; | |
| } else { | |
| LOG(LOG_ERR, "SIOCGIFINDEX failed!: %m"); | |
| + | close(fd); |
| return -1; | |
| } | |
| if (ioctl(fd, SIOCGIFHWADDR, &ifr) == 0) { | |
| @@ -79,6 +81,7 @@ int read_interface(char *interface, int *ifindex, uint32_t *addr, uint8_t *arp) | |
| arp[0], arp[1], arp[2], arp[3], arp[4], arp[5]); | |
| } else { | |
| LOG(LOG_ERR, "SIOCGIFHWADDR failed!: %m"); | |
| + | close(fd); |
| return -1; | |
| } | |
| } else { | |