ifplugd: more robust interface name match check

function                                             old     new   delta
check_existence_through_netlink                      278     308     +30

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2010-04-02 07:04:44 +02:00
parent b38af7bd31
commit 37201213ca

View File

@ -485,8 +485,10 @@ static smallint detect_link(void)
static NOINLINE int check_existence_through_netlink(void) static NOINLINE int check_existence_through_netlink(void)
{ {
int iface_len;
char replybuf[1024]; char replybuf[1024];
iface_len = strlen(G.iface);
while (1) { while (1) {
struct nlmsghdr *mhdr; struct nlmsghdr *mhdr;
ssize_t bytes; ssize_t bytes;
@ -526,8 +528,9 @@ static NOINLINE int check_existence_through_netlink(void)
int len = RTA_PAYLOAD(attr); int len = RTA_PAYLOAD(attr);
if (len > IFNAMSIZ) if (len > IFNAMSIZ)
len = IFNAMSIZ; len = IFNAMSIZ;
if (iface_len <= len
if (strncmp(G.iface, RTA_DATA(attr), len) == 0) { && strncmp(G.iface, RTA_DATA(attr), len) == 0
) {
G.iface_exists = (mhdr->nlmsg_type == RTM_NEWLINK); G.iface_exists = (mhdr->nlmsg_type == RTM_NEWLINK);
} }
} }