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>