Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 15 Nov 2013 13:31:26 -0700
From:      Alan Somers <asomers@freebsd.org>
To:        freebsd-dtrace@freebsd.org
Subject:   Please review: fix panics on kldload/kldunload fasttrap
Message-ID:  <CAOtMX2irjVOnTjv%2B_HpeRKLvwGpLGMjfWRw_d8vXbSdiFy4MrQ@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--047d7bf19852253f9a04eb3d15ee
Content-Type: text/plain; charset=ISO-8859-1

I've found a few problems with fasttrap that can cause panics on
kldload and kldunload.  Can someone please review this patch?  I've
also attached an ATF test case for it.  The test case loads and
unloads the fasttrap module 500 times while several sh processes are
forking, execing, and exiting at about 600 times/second/cpu.

* kproc_create(fasttrap_pid_cleanup_cb, ...) gets called before
fasttrap_provs.fth_table gets allocated.  This can lead to a panic on
module load, because fasttrap_pid_cleanup_cb references
fasttrap_provs.fth_table.  My patch moves kproc_create down after the
point that fasttrap_provs.fth_table gets allocated, and modifies the
error handling accordingly.

* dtrace_fasttrap_{fork,exec,exit} weren't getting NULLed until after
fasttrap_provs.fth_table got freed.  That caused panics on module
unload because fasttrap_exec_exit calls fasttrap_provider_retire,
which references fasttrap_provs.fth_table.  My patch NULLs those
function pointers earlier.

* There isn't any code to destroy the
fasttrap_{tpoints,provs,procs}.fth_table mutexes on module unload,
leading to a resource leak when WITNESS is enabled.  My patch destroys
those mutexes during fasttrap_unload().

-Alan

--047d7bf19852253f9a04eb3d15ee
Content-Type: text/plain; charset=US-ASCII; name="fasttrap_unload.diff"
Content-Disposition: attachment; filename="fasttrap_unload.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ho1vsow00

SW5kZXg6IHN5cy9jZGRsL2NvbnRyaWIvb3BlbnNvbGFyaXMvdXRzL2NvbW1vbi9kdHJhY2UvZmFz
dHRyYXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvY2RkbC9jb250cmliL29wZW5zb2xhcmlzL3V0cy9j
b21tb24vZHRyYWNlL2Zhc3R0cmFwLmMJKHJldmlzaW9uIDI1NzgwMykKKysrIHN5cy9jZGRsL2Nv
bnRyaWIvb3BlbnNvbGFyaXMvdXRzL2NvbW1vbi9kdHJhY2UvZmFzdHRyYXAuYwkod29ya2luZyBj
b3B5KQpAQCAtMjI4NCwxMyArMjI4NCw2IEBACiAJbXV0ZXhfaW5pdCgmZmFzdHRyYXBfY291bnRf
bXR4LCAiZmFzdHRyYXAgY291bnQgbXR4IiwgTVVURVhfREVGQVVMVCwKIAkgICAgTlVMTCk7CiAK
LQlyZXQgPSBrcHJvY19jcmVhdGUoZmFzdHRyYXBfcGlkX2NsZWFudXBfY2IsIE5VTEwsCi0JICAg
ICZmYXN0dHJhcF9jbGVhbnVwX3Byb2MsIDAsIDAsICJmdGNsZWFudXAiKTsKLQlpZiAocmV0ICE9
IDApIHsKLQkJZGVzdHJveV9kZXYoZmFzdHRyYXBfY2Rldik7Ci0JCXJldHVybiAocmV0KTsKLQl9
Ci0KICNpZiBkZWZpbmVkKHN1bikKIAlmYXN0dHJhcF9tYXggPSBkZGlfZ2V0cHJvcChERElfREVW
X1RfQU5ZLCBkZXZpLCBERElfUFJPUF9ET05UUEFTUywKIAkgICAgImZhc3R0cmFwLW1heC1wcm9i
ZXMiLCBGQVNUVFJBUF9NQVhfREVGQVVMVCk7CkBAIC0yMzQ0LDYgKzIzMzcsMjQgQEAKIAkJICAg
ICJwcm92aWRlcnMgYnVja2V0IG10eCIsIE1VVEVYX0RFRkFVTFQsIE5VTEwpOwogI2VuZGlmCiAK
KwlyZXQgPSBrcHJvY19jcmVhdGUoZmFzdHRyYXBfcGlkX2NsZWFudXBfY2IsIE5VTEwsCisJICAg
ICZmYXN0dHJhcF9jbGVhbnVwX3Byb2MsIDAsIDAsICJmdGNsZWFudXAiKTsKKwlpZiAocmV0ICE9
IDApIHsKKwkJZGVzdHJveV9kZXYoZmFzdHRyYXBfY2Rldik7CisjaWYgIWRlZmluZWQoc3VuKQor
CQlmb3IgKGkgPSAwOyBpIDwgZmFzdHRyYXBfcHJvdnMuZnRoX25lbnQ7IGkrKykKKwkJCW11dGV4
X2Rlc3Ryb3koJmZhc3R0cmFwX3Byb3ZzLmZ0aF90YWJsZVtpXS5mdGJfbXR4KTsKKwkJZm9yIChp
ID0gMDsgaSA8IGZhc3R0cmFwX3Rwb2ludHMuZnRoX25lbnQ7IGkrKykKKwkJCW11dGV4X2Rlc3Ry
b3koJmZhc3R0cmFwX3Rwb2ludHMuZnRoX3RhYmxlW2ldLmZ0Yl9tdHgpOworI2VuZGlmCisJCWtt
ZW1fZnJlZShmYXN0dHJhcF9wcm92cy5mdGhfdGFibGUsIGZhc3R0cmFwX3Byb3ZzLmZ0aF9uZW50
ICoKKwkJICAgIHNpemVvZiAoZmFzdHRyYXBfYnVja2V0X3QpKTsKKwkJbXR4X2Rlc3Ryb3koJmZh
c3R0cmFwX2NsZWFudXBfbXR4KTsKKwkJbXV0ZXhfZGVzdHJveSgmZmFzdHRyYXBfY291bnRfbXR4
KTsKKwkJcmV0dXJuIChyZXQpOworCX0KKworCiAJLyoKIAkgKiAuLi4gYW5kIHRoZSBwcm9jcyBo
YXNoIHRhYmxlLgogCSAqLwpAQCAtMjQzNiw2ICsyNDQ3LDIwIEBACiAJCXJldHVybiAoLTEpOwog
CX0KIAorCS8qCisJICogU3RvcCBuZXcgcHJvY2Vzc2VzIGZyb20gZW50ZXJpbmcgdGhlc2UgaG9v
a3Mgbm93LCBiZWZvcmUgdGhlCisJICogZmFzdHRyYXBfY2xlYW51cCB0aHJlYWQgcnVucy4gIFRo
YXQgd2F5IGFsbCBwcm9jZXNzZXMgd2lsbCBob3BlZnVsbHkKKwkgKiBiZSBvdXQgb2YgdGhlc2Ug
aG9va3MgYmVmb3JlIHdlIGZyZWUgZmFzdHRyYXBfcHJvdnMuZnRoX3RhYmxlCisJICovCisJQVNT
RVJUKGR0cmFjZV9mYXN0dHJhcF9mb3JrID09ICZmYXN0dHJhcF9mb3JrKTsKKwlkdHJhY2VfZmFz
dHRyYXBfZm9yayA9IE5VTEw7CisKKwlBU1NFUlQoZHRyYWNlX2Zhc3R0cmFwX2V4ZWMgPT0gJmZh
c3R0cmFwX2V4ZWNfZXhpdCk7CisJZHRyYWNlX2Zhc3R0cmFwX2V4ZWMgPSBOVUxMOworCisJQVNT
RVJUKGR0cmFjZV9mYXN0dHJhcF9leGl0ID09ICZmYXN0dHJhcF9leGVjX2V4aXQpOworCWR0cmFj
ZV9mYXN0dHJhcF9leGl0ID0gTlVMTDsKKwogCW10eF9sb2NrKCZmYXN0dHJhcF9jbGVhbnVwX210
eCk7CiAJZmFzdHRyYXBfY2xlYW51cF9kcmFpbiA9IDE7CiAJLyogV2FpdCBmb3IgdGhlIGNsZWFu
dXAgdGhyZWFkIHRvIGZpbmlzaCB1cCBhbmQgc2lnbmFsIHVzLiAqLwpAQCAtMjQ1MSw2ICsyNDc2
LDE0IEBACiAJbXV0ZXhfZXhpdCgmZmFzdHRyYXBfY291bnRfbXR4KTsKICNlbmRpZgogCisjaWYg
IWRlZmluZWQoc3VuKQorCWZvciAoaSA9IDA7IGkgPCBmYXN0dHJhcF90cG9pbnRzLmZ0aF9uZW50
OyBpKyspCisJCW11dGV4X2Rlc3Ryb3koJmZhc3R0cmFwX3Rwb2ludHMuZnRoX3RhYmxlW2ldLmZ0
Yl9tdHgpOworCWZvciAoaSA9IDA7IGkgPCBmYXN0dHJhcF9wcm92cy5mdGhfbmVudDsgaSsrKQor
CQltdXRleF9kZXN0cm95KCZmYXN0dHJhcF9wcm92cy5mdGhfdGFibGVbaV0uZnRiX210eCk7CisJ
Zm9yIChpID0gMDsgaSA8IGZhc3R0cmFwX3Byb2NzLmZ0aF9uZW50OyBpKyspCisJCW11dGV4X2Rl
c3Ryb3koJmZhc3R0cmFwX3Byb2NzLmZ0aF90YWJsZVtpXS5mdGJfbXR4KTsKKyNlbmRpZgogCWtt
ZW1fZnJlZShmYXN0dHJhcF90cG9pbnRzLmZ0aF90YWJsZSwKIAkgICAgZmFzdHRyYXBfdHBvaW50
cy5mdGhfbmVudCAqIHNpemVvZiAoZmFzdHRyYXBfYnVja2V0X3QpKTsKIAlmYXN0dHJhcF90cG9p
bnRzLmZ0aF9uZW50ID0gMDsKQEAgLTI0NjMsMjIgKzI0OTYsNiBAQAogCSAgICBmYXN0dHJhcF9w
cm9jcy5mdGhfbmVudCAqIHNpemVvZiAoZmFzdHRyYXBfYnVja2V0X3QpKTsKIAlmYXN0dHJhcF9w
cm9jcy5mdGhfbmVudCA9IDA7CiAKLQkvKgotCSAqIFdlIGtub3cgdGhlcmUgYXJlIG5vIHRyYWNl
cG9pbnRzIGluIGFueSBwcm9jZXNzIGFueXdoZXJlIGluCi0JICogdGhlIHN5c3RlbSBzbyB0aGVy
ZSBpcyBubyBwcm9jZXNzIHdoaWNoIGhhcyBpdHMgcF9kdHJhY2VfY291bnQKLQkgKiBncmVhdGVy
IHRoYW4gemVybywgdGhlcmVmb3JlIHdlIGtub3cgdGhhdCBubyB0aHJlYWQgY2FuIGFjdGl2ZWx5
Ci0JICogYmUgZXhlY3V0aW5nIGNvZGUgaW4gZmFzdHRyYXBfZm9yaygpLiBTaW1pbGFybHkgZm9y
IHBfZHRyYWNlX3Byb2JlcwotCSAqIGFuZCBmYXN0dHJhcF9leGVjKCkgYW5kIGZhc3R0cmFwX2V4
aXQoKS4KLQkgKi8KLQlBU1NFUlQoZHRyYWNlX2Zhc3R0cmFwX2ZvcmsgPT0gJmZhc3R0cmFwX2Zv
cmspOwotCWR0cmFjZV9mYXN0dHJhcF9mb3JrID0gTlVMTDsKLQotCUFTU0VSVChkdHJhY2VfZmFz
dHRyYXBfZXhlYyA9PSAmZmFzdHRyYXBfZXhlY19leGl0KTsKLQlkdHJhY2VfZmFzdHRyYXBfZXhl
YyA9IE5VTEw7Ci0KLQlBU1NFUlQoZHRyYWNlX2Zhc3R0cmFwX2V4aXQgPT0gJmZhc3R0cmFwX2V4
ZWNfZXhpdCk7Ci0JZHRyYWNlX2Zhc3R0cmFwX2V4aXQgPSBOVUxMOwotCiAjaWYgIWRlZmluZWQo
c3VuKQogCWRlc3Ryb3lfZGV2KGZhc3R0cmFwX2NkZXYpOwogCW11dGV4X2Rlc3Ryb3koJmZhc3R0
cmFwX2NvdW50X210eCk7Cg==
--047d7bf19852253f9a04eb3d15ee--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAOtMX2irjVOnTjv%2B_HpeRKLvwGpLGMjfWRw_d8vXbSdiFy4MrQ>