The Samba-Bugzilla – Attachment 4640 Details for
Bug 6651
smbd SIGSEGV when breaking oplocks
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Hopefully last part of the fix...
0002-Hopefully-last-part-of-the-fix-for-bug-6651-smbd-S.patch (text/plain), 2.25 KB, created by
Jeremy Allison
on 2009-09-03 09:59:52 UTC
(
hide
)
Description:
Hopefully last part of the fix...
Filename:
MIME Type:
Creator:
Jeremy Allison
Created:
2009-09-03 09:59:52 UTC
Size:
2.25 KB
patch
obsolete
>From bdc7bdb0d3e02d04477906dbda8995bc5789ce22 Mon Sep 17 00:00:00 2001 >From: Jeremy Allison <jra@samba.org> >Date: Thu, 3 Sep 2009 07:40:48 -0700 >Subject: [PATCH] Hopefully last part of the fix for bug 6651 - smbd SIGSEGV when breaking oplocks. > This one is subtle. There is a race condition where a signal can be > queued for oplock break, and then the file can be closed by the client > before the signal can be processed. Currently if this occurs we panic > (we can't match an incoming signal fd with a fsp pointer). Simply log > the error (at debug level 10 right now, might be too much) and then > return without processing the break request. It looks like there is > another race condition with this fix, but here's why it won't happen. > If the signal was pending (caused by a kernel oplock break from a > local file open), and the client closed the file and then re-opened > another file which happened to use the same file descriptor as the > file just closed, then theoretically the oplock break requests could > be processed on the wrong fd. Here's why this should be very rare.. > Processing a pending signal always take precedence over an incoming > network request, so as long as the client close request is non-chained > then the break signal should always be harmlessly processed *before* > the open can be called. If the open is chained onto the close, and > the fd on the new open is the same as the old closed fd, then it's > possible this race will occur. However, all that will happen is that > we'll lose the oplock on this file. A shame, but not a fatal event. > Jeremy. > >--- > source3/smbd/oplock_linux.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > >diff --git a/source3/smbd/oplock_linux.c b/source3/smbd/oplock_linux.c >index 535e809..c60c745 100644 >--- a/source3/smbd/oplock_linux.c >+++ b/source3/smbd/oplock_linux.c >@@ -99,8 +99,8 @@ static void linux_oplock_signal_handler(struct tevent_context *ev_ctx, > > fsp = file_find_fd(fd); > if (fsp == NULL) { >- DEBUG(0,("linux_oplock_signal_handler: failed to find fsp for file fd=%d\n", fd )); >- smb_panic("linux_oplock_signal_handler\n"); >+ DEBUG(0,("linux_oplock_signal_handler: failed to find fsp for file fd=%d (file was closed ?)\n", fd )); >+ return; > } > break_kernel_oplock(smbd_messaging_context(), fsp); > } >-- >1.6.0.4 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 6651
:
4580
|
4585
|
4586
|
4595
|
4639
|
4640
|
4647