Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Apr 2010 12:28:22 -0700
From:      Xin LI <delphij@delphij.net>
To:        freebsd-net@freebsd.org
Cc:        John Baldwin <jhb@freebsd.org>, bschmidt@FreeBSD.ORG
Subject:   [PATCH FOR REVIEW] Fix SIOCGIFDESCR when buffer is too small
Message-ID:  <4BC4C5D6.9040605@delphij.net>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------070803070007030308020202
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

Here is a patch that addressed the issue, where when SIOCGIFDESCR is fed
with a smaller buffer.  As reported by Bernhard, this would cause an
infinite loop in ifconfig(8).

The previous implementation claims that the 'length' field would be set
to the number of length returned, and an error is returned.  However,
our ioctl(2) system call will not do copyout if there is errno being
set, as discussed on -arch@ and thus the API needs to be tweaked.

To minimize impact on ABI I have choose to use buffer as an indicator
that the buffer length from userland is not sufficient, instead of
returning ENAMETOOLONG.

I'll also submit a patch for libpcap if this proposed change is
considered be a good one.  The libpcap in contrib/libpcap is not
affected since it doesn't support dynamic length description.

Cheers,
- -- 
Xin LI <delphij@delphij.net>	http://www.delphij.net/
FreeBSD - The Power to Serve!	       Live free or die
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.14 (FreeBSD)

iQEcBAEBAgAGBQJLxMXWAAoJEATO+BI/yjfBWc4H/jO7i2Rm+GqeYXX2eNWUjE2W
5dpNFq0kxqQWpLTr8qPskQ7o/ZDIl8ASbNJPdr/G+U1mYGVwNWVa6z0TR3huZZCB
gPnR+84a+C/8rwtJjhOuyFKt/fdZfD4kI+rnWB+9Cq/uLX4aqziY1YO7SIAtb/1b
RrjyM6rgYsMcnrqJKrmAQQEU1k6Yqkcy5PEEzU6MTSsHYL4wuKujZzmIYdZRg4rI
OLSdLQEWq+u4PuOnrRMrvrrZZCObOURCWpjnJiP1yyMBE/ZW6itfMp6BE6k29vUz
vZcDtqUFj3j1tVvaA4MzuX+isMUqnO8DvcnIawjwefs9Rq0mWY796kGSEjZYxuQ=
=lyPJ
-----END PGP SIGNATURE-----

--------------070803070007030308020202
Content-Type: text/plain;
 name="ifdescr.diff"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="ifdescr.diff"

SW5kZXg6IHNiaW4vaWZjb25maWcvaWZjb25maWcuYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzYmlu
L2lmY29uZmlnL2lmY29uZmlnLmMJKHJldmlzaW9uIDIwNjU1OCkKKysrIHNiaW4vaWZjb25m
aWcvaWZjb25maWcuYwkod29ya2luZyBjb3B5KQpAQCAtOTIyLDE5ICs5MjIsMjEgQEAKIAkJ
CWlmci5pZnJfYnVmZmVyLmJ1ZmZlciA9IGRlc2NyOwogCQkJaWZyLmlmcl9idWZmZXIubGVu
Z3RoID0gZGVzY3JsZW47CiAJCQlpZiAoaW9jdGwocywgU0lPQ0dJRkRFU0NSLCAmaWZyKSA9
PSAwKSB7Ci0JCQkJaWYgKHN0cmxlbihkZXNjcikgPiAwKQotCQkJCQlwcmludGYoIlx0ZGVz
Y3JpcHRpb246ICVzXG4iLCBkZXNjcik7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgaWYgKGVy
cm5vID09IEVOQU1FVE9PTE9ORykKLQkJCQlkZXNjcmxlbiA9IGlmci5pZnJfYnVmZmVyLmxl
bmd0aDsKLQkJCWVsc2UKLQkJCQlicmVhazsKLQkJfSBlbHNlIHsKKwkJCQlpZiAoaWZyLmlm
cl9idWZmZXIuYnVmZmVyID09IGRlc2NyKSB7CisJCQkJCWlmIChzdHJsZW4oZGVzY3IpID4g
MCkKKwkJCQkJCXByaW50ZigiXHRkZXNjcmlwdGlvbjogJXNcbiIsCisJCQkJCQkgICAgZGVz
Y3IpOworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgaWYgKGlmci5pZnJfYnVmZmVyLmxlbmd0
aCA+IGRlc2NybGVuKSB7CisJCQkJCWRlc2NybGVuID0gaWZyLmlmcl9idWZmZXIubGVuZ3Ro
OworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZQogCQkJd2FybigidW5h
YmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgaW50ZXJmYWNlIgogCQkJICAgICJkZXNjcmlw
dGlvbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQl9OworCQlicmVhazsKKwl9CiAKIAlpZiAoaW9j
dGwocywgU0lPQ0dJRkNBUCwgKGNhZGRyX3QpJmlmcikgPT0gMCkgewogCQlpZiAoaWZyLmlm
cl9jdXJjYXAgIT0gMCkgewpJbmRleDogc2hhcmUvbWFuL21hbjQvbmV0aW50cm8uNAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBzaGFyZS9tYW4vbWFuNC9uZXRpbnRyby40CShyZXZpc2lvbiAyMDY1
NTgpCisrKyBzaGFyZS9tYW4vbWFuNC9uZXRpbnRyby40CSh3b3JraW5nIGNvcHkpCkBAIC0y
OTIsOCArMjkyLDExIEBACiBzdHJ1Y3QgcGFzc2VkIGluIGFzIHBhcmFtZXRlciwgYW5kIHRo
ZSBsZW5ndGggd291bGQgaW5jbHVkZQogdGhlIHRlcm1pbmF0aW5nIG51bCBjaGFyYWN0ZXIu
CiBJZiB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIHRvIGhvbGQgdGhlIGludGVyZmFjZSBs
ZW5ndGgsCi1ubyBjb3B5IHdvdWxkIGJlIGRvbmUgYW5kIGFuCi1lcnJvciB3b3VsZCBiZSBy
ZXR1cm5lZC4KK25vIGNvcHkgd291bGQgYmUgZG9uZSBhbmQgdGhlCisuVmEgYnVmZmVyCitm
aWVsZCBvZgorLlZhIGlmcnVfYnVmZmVyCit3b3VsZCBiZSBzZXQgdG8gTlVMTC4KIFRoZSBr
ZXJuZWwgd2lsbCBzdG9yZSB0aGUgYnVmZmVyIGxlbmd0aCBpbiB0aGUKIC5WYSBsZW5ndGgK
IGZpZWxkIHVwb24gcmV0dXJuLCByZWdhcmRsZXNzIHdoZXRoZXIgdGhlIGJ1ZmZlciBpdHNl
bGYgaXMKSW5kZXg6IHN5cy9uZXQvaWYuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0L2lm
LmMJKHJldmlzaW9uIDIwNjU1OCkKKysrIHN5cy9uZXQvaWYuYwkod29ya2luZyBjb3B5KQpA
QCAtMjA0OSwxNCArMjA0OSwxMyBAQAogCWNhc2UgU0lPQ0dJRkRFU0NSOgogCQllcnJvciA9
IDA7CiAJCXN4X3Nsb2NrKCZpZmRlc2NyX3N4KTsKLQkJaWYgKGlmcC0+aWZfZGVzY3JpcHRp
b24gPT0gTlVMTCkgewotCQkJaWZyLT5pZnJfYnVmZmVyLmxlbmd0aCA9IDA7CisJCWlmIChp
ZnAtPmlmX2Rlc2NyaXB0aW9uID09IE5VTEwpCiAJCQllcnJvciA9IEVOT01TRzsKLQkJfSBl
bHNlIHsKKwkJZWxzZSB7CiAJCQkvKiBzcGFjZSBmb3IgdGVybWluYXRpbmcgbnVsICovCiAJ
CQlkZXNjcmxlbiA9IHN0cmxlbihpZnAtPmlmX2Rlc2NyaXB0aW9uKSArIDE7CiAJCQlpZiAo
aWZyLT5pZnJfYnVmZmVyLmxlbmd0aCA8IGRlc2NybGVuKQotCQkJCWVycm9yID0gRU5BTUVU
T09MT05HOworCQkJCWlmci0+aWZyX2J1ZmZlci5idWZmZXIgPSBOVUxMOwogCQkJZWxzZQog
CQkJCWVycm9yID0gY29weW91dChpZnAtPmlmX2Rlc2NyaXB0aW9uLAogCQkJCSAgICBpZnIt
Pmlmcl9idWZmZXIuYnVmZmVyLCBkZXNjcmxlbik7Cg==
--------------070803070007030308020202--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4BC4C5D6.9040605>