Re: Panic during samba mount

看板DFBSD_bugs作者時間15年前 (2010/07/10 17:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
On 10 July 2010 08:33, Nicolas Thery <nthery@gmail.com> wrote: > I reproduced the bug and I'm giving it a look. > Cheers, > Nicolas > > On 2 July 2010 19:27, Tero Jaasko > <tero.jaasko.no.spam.please@mail.suomi.net> wrote: >> >> Hello, >> I am getting a "Fatal trap 12: page fault while in kernel mode" -panic on >> a samba mount command, e.g. >> "mount_smbfs -I 192.168.0.195 //guest@192.168.0.195/share /mnt/share/". [...] >> There seems to be a problem in prison_replace_wildcards() at >> sys/kern/kern_jail.c:, as the given "td->td_ucred" is NULL. The attached >> kgdb.txt contains my attempt at debugging the situation. >> >> The panic is 100% reproducible on my system and I have a few kernel dumps >> from the situation, if somebody needs tehm. I have attached a band-aid kind >> of patch, which seems to work, at least with it the samba works as expected, >> but perhaps it is not a correct solution. td is a samba kernel thread created in smb_iod_create() by calling kthread_create_compat() which according to its comment is used only for samba. kthread_create_compat() forks process 0 so the resulting kernel thread is a bit different from other kernel threads: td->td_ucred == NULL but td->td_proc != NULL (it points to the forked process). This explains why the td_proc == NULL check at the beginning of prison_replace_wildcard(), which is presumably there for detecting kernel threads, fails. prison_remote_ip() already checks if td_ucred != NULL before dereferencing it so your patch looks good and a committed it. In the longer term, changing samba to create a lwkt is probably the way to go. Thanks for reporting this issue and fixing it.
文章代碼(AID): #1CE3uMip (DFBSD_bugs)
文章代碼(AID): #1CE3uMip (DFBSD_bugs)