Date: Sat, 15 Feb 2003 15:36:39 +1100 From: Tim Robbins <tjr@FreeBSD.org> To: FreeBSD-gnats-submit@FreeBSD.org Subject: kern/48291: mmap()'d regions of smbfs files behave incorrectly after close() Message-ID: <20030215153639.A53449@dilbert.robbins.dropbear.id.au>
next in thread | raw e-mail | index | archive | help
>Number: 48291 >Category: kern >Synopsis: mmap()'d regions of smbfs files behave incorrectly after close() >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Feb 14 20:40:10 PST 2003 >Closed-Date: >Last-Modified: >Originator: Tim Robbins >Release: FreeBSD 4.7-RELEASE-p4 i386 >Organization: The FreeBSD Project >Environment: System: FreeBSD 4.7 and 5.0 are both affected >Description: If a file on a smbfs mount is opened, part of it mapped in to memory with mmap(), then the descriptor closed, reads and writes to/from the mapped region will fail and cause a segmentation fault. This behaviour is incorrect according to SUSv3: (System Interfaces volume, Issue 6, page 773) 25284 The mmap( ) function shall add an extra reference to the file associated with the file descriptor 25285 fildes which is not removed by a subsequent close( ) on that file descriptor. This reference shall be 25286 removed when there are no more mappings to the file. .. and breaks applications, such as gcc (cpp0) and thttpd. >How-To-Repeat: Try to compile GNU bash 2.05b on a smbfs mount, or try to serve files off a smbfs share with thttpd. >Fix: The smbfs_close() vnode op is closing the file on the server, which causes smbfs_getpages()/smbfs_putpages() to try to perform operations with an invalid file handle. There are two possible solutions: (a) Don't close the file handle on the server in smbfs_close(); let smbfs_inactive() close it instead. (b) Reopen the file in smbfs_getpages() and smbfs_putpages(), write to it, then close it. This solution has a much higher overhead but it seems to be what Linux smbfs does. >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030215153639.A53449>