kern/128260: [ipfw] [patch] ipfw_divert damages IPv6 packets
Sergey Matveychuk
sem33 at yandex-team.ru
Fri Feb 25 17:40:03 UTC 2011
The following reply was made to PR kern/128260; it has been noted by GNATS.
From: Sergey Matveychuk <sem33 at yandex-team.ru>
To: bug-followup at FreeBSD.org, dan at obluda.cz
Cc: Julian Elischer <julian at freebsd.org>
Subject: Re: kern/128260: [ipfw] [patch] ipfw_divert damages IPv6 packets
Date: Fri, 25 Feb 2011 20:14:50 +0300
This is a multi-part message in MIME format.
--------------080106090909020900000003
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Here is my patch for IPv6 divert. It works for me, but it should be
reviewed and may be improved.
I've touched nd6.c to prevent looping packet to local address (loopback).
Any questions are welcome.
--------------080106090909020900000003
Content-Type: text/plain;
name="divert-ipv6.diff.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="divert-ipv6.diff.txt"
LS0tIHN5cy9uZXRpbmV0L2lwZncvaXBfZndfcGZpbC5jLm9yaWcJMjAxMS0wMi0yNSAxNzo0
OToxNS4wMDAwMDAwMDAgKzAzMDAKKysrIHN5cy9uZXRpbmV0L2lwZncvaXBfZndfcGZpbC5j
CTIwMTEtMDItMjUgMTc6NDk6MjcuMDAwMDAwMDAwICswMzAwCkBAIC0yODksNyArMjg5LDcg
QEAKIAkgKiB3ZSBjYW4gZG8gaXQgYmVmb3JlIGEgJ3RlZScuCiAJICovCiAJaXAgPSBtdG9k
KGNsb25lLCBzdHJ1Y3QgaXAgKik7Ci0JaWYgKCF0ZWUgJiYgbnRvaHMoaXAtPmlwX29mZikg
JiAoSVBfTUYgfCBJUF9PRkZNQVNLKSkgeworCWlmIChpcC0+aXBfdiA9PSA0ICYmICF0ZWUg
JiYgbnRvaHMoaXAtPmlwX29mZikgJiAoSVBfTUYgfCBJUF9PRkZNQVNLKSkgewogCQlpbnQg
aGxlbjsKIAkJc3RydWN0IG1idWYgKnJlYXNzOwogCi0tLSBzeXMvbmV0aW5ldC9pcF9kaXZl
cnQuYy5vcmlnCTIwMTEtMDItMjUgMTc6NDk6MDQuMDAwMDAwMDAwICswMzAwCisrKyBzeXMv
bmV0aW5ldC9pcF9kaXZlcnQuYwkyMDExLTAyLTI1IDE3OjQ5OjM2LjAwMDAwMDAwMCArMDMw
MApAQCAtNjksNiArNjksOCBAQAogI2luY2x1ZGUgPG5ldGluZXQvaW5fdmFyLmg+CiAjaW5j
bHVkZSA8bmV0aW5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjaW5j
bHVkZSA8bmV0aW5ldC9pcDYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0Ni9pcDZfdmFyLmg+CiAj
aWZkZWYgU0NUUAogI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jcmMzMi5oPgogI2VuZGlmCkBA
IC0zODksNzEgKzM5MSw3OCBAQAogCS8qIFJlaW5qZWN0IHBhY2tldCBpbnRvIHRoZSBzeXN0
ZW0gYXMgaW5jb21pbmcgb3Igb3V0Z29pbmcgKi8KIAlpZiAoIXNpbiB8fCBzaW4tPnNpbl9h
ZGRyLnNfYWRkciA9PSAwKSB7CiAJCXN0cnVjdCBpcCAqY29uc3QgaXAgPSBtdG9kKG0sIHN0
cnVjdCBpcCAqKTsKKyNpZmRlZiBJTkVUNgorCQlzdHJ1Y3QgaXA2X2hkciAqY29uc3QgaXA2
ID0gbXRvZChtLCBzdHJ1Y3QgaXA2X2hkciAqKTsKKyNlbmRpZgogCQlzdHJ1Y3QgaW5wY2Ig
KmlucDsKIAogCQlkdC0+aW5mbyB8PSBJUEZXX0lTX0RJVkVSVCB8IElQRldfSU5GT19PVVQ7
CiAJCWlucCA9IHNvdG9pbnBjYihzbyk7CiAJCUlOUF9STE9DSyhpbnApOwotCQkvKgotCQkg
KiBEb24ndCBhbGxvdyBib3RoIHVzZXIgc3BlY2lmaWVkIGFuZCBzZXRzb2Nrb3B0IG9wdGlv
bnMsCi0JCSAqIGFuZCBkb24ndCBhbGxvdyBwYWNrZXQgbGVuZ3RoIHNpemVzIHRoYXQgd2ls
bCBjcmFzaAotCQkgKi8KLQkJaWYgKCgoaXAtPmlwX2hsICE9IChzaXplb2YgKCppcCkgPj4g
MikpICYmIGlucC0+aW5wX29wdGlvbnMpIHx8Ci0JCSAgICAgKCh1X3Nob3J0KW50b2hzKGlw
LT5pcF9sZW4pID4gbS0+bV9wa3RoZHIubGVuKSkgewotCQkJZXJyb3IgPSBFSU5WQUw7Ci0J
CQlJTlBfUlVOTE9DSyhpbnApOwotCQkJbV9mcmVlbShtKTsKLQkJfSBlbHNlIHsKKworCQlp
ZihpcC0+aXBfdiA9PSA0KSB7CiAJCQkvKiBDb252ZXJ0IGZpZWxkcyB0byBob3N0IG9yZGVy
IGZvciBpcF9vdXRwdXQoKSAqLwogCQkJaXAtPmlwX2xlbiA9IG50b2hzKGlwLT5pcF9sZW4p
OwogCQkJaXAtPmlwX29mZiA9IG50b2hzKGlwLT5pcF9vZmYpOworCQl9CisjaWZkZWYgSU5F
VDYJCQorCQllbHNlCisJCQlpcDYtPmlwNl9wbGVuID0gbnRvaHMoaXA2LT5pcDZfcGxlbik7
CisjZW5kaWYKIAotCQkJLyogU2VuZCBwYWNrZXQgdG8gb3V0cHV0IHByb2Nlc3NpbmcgKi8K
LQkJCUtNT0RfSVBTVEFUX0lOQyhpcHNfcmF3b3V0KTsJCS8qIFhYWCAqLworCQkvKiBTZW5k
IHBhY2tldCB0byBvdXRwdXQgcHJvY2Vzc2luZyAqLworCQlLTU9EX0lQU1RBVF9JTkMoaXBz
X3Jhd291dCk7CQkvKiBYWFggKi8KIAogI2lmZGVmIE1BQwotCQkJbWFjX2lucGNiX2NyZWF0
ZV9tYnVmKGlucCwgbSk7CisJCW1hY19pbnBjYl9jcmVhdGVfbWJ1ZihpbnAsIG0pOwogI2Vu
ZGlmCi0JCQkvKgotCQkJICogR2V0IHJlYWR5IHRvIGluamVjdCB0aGUgcGFja2V0IGludG8g
aXBfb3V0cHV0KCkuCi0JCQkgKiBKdXN0IGluIGNhc2Ugc29ja2V0IG9wdGlvbnMgd2VyZSBz
cGVjaWZpZWQgb24gdGhlCi0JCQkgKiBkaXZlcnQgc29ja2V0LCB3ZSBkdXBsaWNhdGUgdGhl
bS4gIFRoaXMgaXMgZG9uZQotCQkJICogdG8gYXZvaWQgaGF2aW5nIHRvIGhvbGQgdGhlIFBD
QiBsb2NrcyBvdmVyIHRoZSBjYWxsCi0JCQkgKiB0byBpcF9vdXRwdXQoKSwgYXMgZG9pbmcg
dGhpcyByZXN1bHRzIGluIGEgbnVtYmVyIG9mCi0JCQkgKiBsb2NrIG9yZGVyaW5nIGNvbXBs
ZXhpdGllcy4KLQkJCSAqCi0JCQkgKiBOb3RlIHRoYXQgd2Ugc2V0IHRoZSBtdWx0aWNhc3Qg
b3B0aW9ucyBhcmd1bWVudCBmb3IKLQkJCSAqIGlwX291dHB1dCgpIHRvIE5VTEwgc2luY2Ug
aXQgc2hvdWxkIGJlIGludmFyaWFudCB0aGF0Ci0JCQkgKiB0aGV5IGFyZSBub3QgcHJlc2Vu
dC4KLQkJCSAqLwotCQkJS0FTU0VSVChpbnAtPmlucF9tb3B0aW9ucyA9PSBOVUxMLAotCQkJ
ICAgICgibXVsdGljYXN0IG9wdGlvbnMgc2V0IG9uIGEgZGl2ZXJ0IHNvY2tldCIpKTsKLQkJ
CW9wdGlvbnMgPSBOVUxMOwotCQkJLyoKLQkJCSAqIFhYWENTSlA6IEl0IGlzIHVuY2xlYXIg
dG8gbWUgd2hldGhlciBvciBub3QgaXQgbWFrZXMKLQkJCSAqIHNlbnNlIGZvciBkaXZlcnQg
c29ja2V0cyB0byBoYXZlIG9wdGlvbnMuICBIb3dldmVyLAotCQkJICogZm9yIG5vdyB3ZSB3
aWxsIGR1cGxpY2F0ZSB0aGVtIHdpdGggdGhlIElOUCBsb2NrcwotCQkJICogaGVsZCBzbyB3
ZSBjYW4gdXNlIHRoZW0gaW4gaXBfb3V0cHV0KCkgd2l0aG91dAotCQkJICogcmVxdXJpbmcg
YSByZWZlcmVuY2UgdG8gdGhlIHBjYi4KLQkJCSAqLwotCQkJaWYgKGlucC0+aW5wX29wdGlv
bnMgIT0gTlVMTCkgewotCQkJCW9wdGlvbnMgPSBtX2R1cChpbnAtPmlucF9vcHRpb25zLCBN
X0RPTlRXQUlUKTsKLQkJCQlpZiAob3B0aW9ucyA9PSBOVUxMKQotCQkJCQllcnJvciA9IEVO
T0JVRlM7Ci0JCQl9Ci0JCQlJTlBfUlVOTE9DSyhpbnApOwotCQkJaWYgKGVycm9yID09IEVO
T0JVRlMpIHsKLQkJCQltX2ZyZWVtKG0pOwotCQkJCXJldHVybiAoZXJyb3IpOwotCQkJfQot
CQkJZXJyb3IgPSBpcF9vdXRwdXQobSwgb3B0aW9ucywgTlVMTCwKLQkJCSAgICAoKHNvLT5z
b19vcHRpb25zICYgU09fRE9OVFJPVVRFKSA/Ci0JCQkgICAgSVBfUk9VVEVUT0lGIDogMCkg
fCBJUF9BTExPV0JST0FEQ0FTVCB8Ci0JCQkgICAgSVBfUkFXT1VUUFVULCBOVUxMLCBOVUxM
KTsKLQkJCWlmIChvcHRpb25zICE9IE5VTEwpCi0JCQkJbV9mcmVlbShvcHRpb25zKTsKKwkJ
LyoKKwkJICogR2V0IHJlYWR5IHRvIGluamVjdCB0aGUgcGFja2V0IGludG8gaXBfb3V0cHV0
KCkuCisJCSAqIEp1c3QgaW4gY2FzZSBzb2NrZXQgb3B0aW9ucyB3ZXJlIHNwZWNpZmllZCBv
biB0aGUKKwkJICogZGl2ZXJ0IHNvY2tldCwgd2UgZHVwbGljYXRlIHRoZW0uICBUaGlzIGlz
IGRvbmUKKwkJICogdG8gYXZvaWQgaGF2aW5nIHRvIGhvbGQgdGhlIFBDQiBsb2NrcyBvdmVy
IHRoZSBjYWxsCisJCSAqIHRvIGlwX291dHB1dCgpLCBhcyBkb2luZyB0aGlzIHJlc3VsdHMg
aW4gYSBudW1iZXIgb2YKKwkJICogbG9jayBvcmRlcmluZyBjb21wbGV4aXRpZXMuCisJCSAq
CisJCSAqIE5vdGUgdGhhdCB3ZSBzZXQgdGhlIG11bHRpY2FzdCBvcHRpb25zIGFyZ3VtZW50
IGZvcgorCQkgKiBpcF9vdXRwdXQoKSB0byBOVUxMIHNpbmNlIGl0IHNob3VsZCBiZSBpbnZh
cmlhbnQgdGhhdAorCQkgKiB0aGV5IGFyZSBub3QgcHJlc2VudC4KKwkJICovCisJCUtBU1NF
UlQoaW5wLT5pbnBfbW9wdGlvbnMgPT0gTlVMTCwKKwkJICAgICgibXVsdGljYXN0IG9wdGlv
bnMgc2V0IG9uIGEgZGl2ZXJ0IHNvY2tldCIpKTsKKwkJb3B0aW9ucyA9IE5VTEw7CisJCS8q
CisJCSAqIFhYWENTSlA6IEl0IGlzIHVuY2xlYXIgdG8gbWUgd2hldGhlciBvciBub3QgaXQg
bWFrZXMKKwkJICogc2Vuc2UgZm9yIGRpdmVydCBzb2NrZXRzIHRvIGhhdmUgb3B0aW9ucy4g
IEhvd2V2ZXIsCisJCSAqIGZvciBub3cgd2Ugd2lsbCBkdXBsaWNhdGUgdGhlbSB3aXRoIHRo
ZSBJTlAgbG9ja3MKKwkJICogaGVsZCBzbyB3ZSBjYW4gdXNlIHRoZW0gaW4gaXBfb3V0cHV0
KCkgd2l0aG91dAorCQkgKiByZXF1cmluZyBhIHJlZmVyZW5jZSB0byB0aGUgcGNiLgorCQkg
Ki8KKwkJaWYgKGlucC0+aW5wX29wdGlvbnMgIT0gTlVMTCkgeworCQkJb3B0aW9ucyA9IG1f
ZHVwKGlucC0+aW5wX29wdGlvbnMsIE1fRE9OVFdBSVQpOworCQkJaWYgKG9wdGlvbnMgPT0g
TlVMTCkKKwkJCQllcnJvciA9IEVOT0JVRlM7CiAJCX0KKwkJSU5QX1JVTkxPQ0soaW5wKTsK
KwkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKKwkJCW1fZnJlZW0obSk7CisJCQlyZXR1cm4g
KGVycm9yKTsKKwkJfQorCQlpZihpcC0+aXBfdiA9PSA0KQorCQkgICAgZXJyb3IgPSBpcF9v
dXRwdXQobSwgb3B0aW9ucywgTlVMTCwKKwkJCSgoc28tPnNvX29wdGlvbnMgJiBTT19ET05U
Uk9VVEUpID8KKwkJCUlQX1JPVVRFVE9JRiA6IDApIHwgSVBfQUxMT1dCUk9BRENBU1QgfAor
CQkJSVBfUkFXT1VUUFVULCBOVUxMLCBOVUxMKTsKKyNpZmRlZiBJTkVUNgorCQllbHNlCisJ
CSAgICBlcnJvciA9IGlwNl9vdXRwdXQobSwgTlVMTCwgTlVMTCwgMCwgCisJCQlOVUxMLCBO
VUxMLCBOVUxMKTsKKyNlbmRpZgorCQlpZiAob3B0aW9ucyAhPSBOVUxMKQorCQkJbV9mcmVl
bShvcHRpb25zKTsKIAl9IGVsc2UgeworCQlzdHJ1Y3QgaXAgKmNvbnN0IGlwID0gbXRvZCht
LCBzdHJ1Y3QgaXAgKik7CisKIAkJZHQtPmluZm8gfD0gSVBGV19JU19ESVZFUlQgfCBJUEZX
X0lORk9fSU47CiAJCWlmIChtLT5tX3BrdGhkci5yY3ZpZiA9PSBOVUxMKSB7CiAJCQkvKgpA
QCAtNDc3LDcgKzQ4NiwxMiBAQAogCQltYWNfc29ja2V0X2NyZWF0ZV9tYnVmKHNvLCBtKTsK
ICNlbmRpZgogCQkvKiBTZW5kIHBhY2tldCB0byBpbnB1dCBwcm9jZXNzaW5nIHZpYSBuZXRp
c3IgKi8KLQkJbmV0aXNyX3F1ZXVlX3NyYyhORVRJU1JfSVAsICh1aW50cHRyX3Qpc28sIG0p
OworCQlpZihpcC0+aXBfdiA9PSA0KQorCQkgICAgbmV0aXNyX3F1ZXVlX3NyYyhORVRJU1Jf
SVAsICh1aW50cHRyX3Qpc28sIG0pOworI2lmZGVmIElORVQ2CisJCWVsc2UKKwkJICAgIG5l
dGlzcl9xdWV1ZV9zcmMoTkVUSVNSX0lQVjYsICh1aW50cHRyX3Qpc28sIG0pOworI2VuZGlm
CiAJfQogCiAJcmV0dXJuIGVycm9yOwotLS0gc3lzL25ldGluZXQ2L25kNi5jLm9yaWcJMjAx
MS0wMi0yNSAxNzo0ODo1NC4wMDAwMDAwMDAgKzAzMDAKKysrIHN5cy9uZXRpbmV0Ni9uZDYu
YwkyMDExLTAyLTI1IDE3OjQ5OjUxLjAwMDAwMDAwMCArMDMwMApAQCAtMTkyOCwxMCArMTky
OCw2IEBACiAJCX0KIAkJcmV0dXJuIChlcnJvcik7CiAJfQotCWlmICgoaWZwLT5pZl9mbGFn
cyAmIElGRl9MT09QQkFDSykgIT0gMCkgewotCQlyZXR1cm4gKCgqaWZwLT5pZl9vdXRwdXQp
KG9yaWdpZnAsIG0sIChzdHJ1Y3Qgc29ja2FkZHIgKilkc3QsCi0JCSAgICBOVUxMKSk7Ci0J
fQogCWVycm9yID0gKCppZnAtPmlmX291dHB1dCkoaWZwLCBtLCAoc3RydWN0IHNvY2thZGRy
ICopZHN0LCBOVUxMKTsKIAlyZXR1cm4gKGVycm9yKTsKIAo=
--------------080106090909020900000003--
More information about the freebsd-ipfw
mailing list