Date: Tue, 20 May 2008 07:50:03 GMT From: Jaakko Heinonen <jh@saunalahti.fi> To: freebsd-bugs@FreeBSD.org Subject: Re: bin/122925: sftp(1) duplicates filename when get listing directory on CDROM Message-ID: <200805200750.m4K7o3mD046207@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/122925; it has been noted by GNATS. From: Jaakko Heinonen <jh@saunalahti.fi> To: Bruce Cran <bruce@cran.org.uk> Cc: bug-followup@FreeBSD.org, stast@bsdportal.ru Subject: Re: bin/122925: sftp(1) duplicates filename when get listing directory on CDROM Date: Tue, 20 May 2008 10:48:33 +0300 On 2008-05-18, Bruce Cran wrote: > This is occurring because sftp-server expects readdir(3) to return NULL > for a given DIR* twice in a row after all the files have been retrieved. > It seems that under certain conditions that isn't true. Thanks for the test case. The problem seems to lie in cd9660_readdir() (src/sys/fs/cd9660/cd9660_vnops.c). The problem is that if we have reached end of file (directory) and enter again to cd9660_readdir() the idp->uio_off variable is not initialized correctly. In the end of the function the file offset is set to idp->uio_off. So this basically means that the file offset changes to a random value. This causes effects such readdir(3) starting again at some position or g_vfs_done() errors when data is attempted to read from bogus offset. I believe that this patch fixes the problem: Index: cd9660_vnops.c =================================================================== RCS file: /home/ncvs/src/sys/fs/cd9660/cd9660_vnops.c,v retrieving revision 1.113 diff -p -u -r1.113 cd9660_vnops.c --- cd9660_vnops.c 15 Feb 2007 22:08:34 -0000 1.113 +++ cd9660_vnops.c 20 May 2008 06:45:20 -0000 @@ -495,6 +495,7 @@ cd9660_readdir(ap) } idp->eofflag = 1; idp->curroff = uio->uio_offset; + idp->uio_off = uio->uio_offset; if ((entryoffsetinblock = idp->curroff & bmask) && (error = cd9660_blkatoff(vdp, (off_t)idp->curroff, NULL, &bp))) { Could you please test the patch? -- Jaakko
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200805200750.m4K7o3mD046207>