Strange, on atrey ioctl() does not fill structure, and bird segfaults
on it. Now we "only" die().
This commit is contained in:
parent
21580e304f
commit
fdf33cde1c
1 changed files with 4 additions and 1 deletions
|
@ -140,7 +140,7 @@ scan_if(timer *t)
|
||||||
ic.ifc_ifcu.ifcu_req = r;
|
ic.ifc_ifcu.ifcu_req = r;
|
||||||
ic.ifc_len = last_ifbuf_size;
|
ic.ifc_len = last_ifbuf_size;
|
||||||
res = ioctl(if_scan_sock, SIOCGIFCONF, &ic);
|
res = ioctl(if_scan_sock, SIOCGIFCONF, &ic);
|
||||||
if (res < 0 && errno != EFAULT)
|
if (res < 0 && errno != EFAULT) /* FIXME: I would sigsegv you if I were kernel at this point */
|
||||||
die("SIOCCGIFCONF: %m");
|
die("SIOCCGIFCONF: %m");
|
||||||
if (res < last_ifbuf_size)
|
if (res < last_ifbuf_size)
|
||||||
{
|
{
|
||||||
|
@ -149,8 +149,11 @@ scan_if(timer *t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ic.ifc_ifcu.ifcu_req = NULL;
|
ic.ifc_ifcu.ifcu_req = NULL;
|
||||||
|
ic.ifc_len = 999999999;
|
||||||
if (ioctl(if_scan_sock, SIOCGIFCONF, &ic) < 0)
|
if (ioctl(if_scan_sock, SIOCGIFCONF, &ic) < 0)
|
||||||
die("SIOCIFCONF: %m");
|
die("SIOCIFCONF: %m");
|
||||||
|
if (ic.ifc_len > 100*1024)
|
||||||
|
die("Buf size MUCH too big: %d\n", ic.ifc_len);
|
||||||
ic.ifc_len += sizeof(struct ifreq);
|
ic.ifc_len += sizeof(struct ifreq);
|
||||||
if (last_ifbuf_size < ic.ifc_len)
|
if (last_ifbuf_size < ic.ifc_len)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue