Module Name: src Committed By: he Date: Wed Mar 3 08:20:39 UTC 2010
Modified Files: src/sys/compat/common: vfs_syscalls_30.c src/sys/compat/ibcs2: ibcs2_misc.c src/sys/compat/irix: irix_dirent.c src/sys/compat/linux/common: linux_file64.c linux_misc.c src/sys/compat/linux32/common: linux32_dirent.c src/sys/compat/osf1: osf1_file.c src/sys/compat/sunos: sunos_misc.c src/sys/compat/sunos32: sunos32_misc.c src/sys/compat/svr4: svr4_misc.c src/sys/compat/svr4_32: svr4_32_misc.c Log Message: When implementing "read directory", when there are too many empty entries in a row, and we need to try to read the next block, and have passed a non-NULL cookie pointer to VOP_READDIR, ensure that we free the cookie buffer before re-doing VOP_READDIR, so that we don't leak memory. This fix is similar to nfs_serv.c revisions 1.115 + 1.124. This should fix the long-standing problem observed by e.g. using Linux- emulated programs to take backup of servers, which is one of the problems which were reported in PR#42661. Thanks to pooka@ for the hints for traversing the VOP* layer. To generate a diff of this commit: cvs rdiff -u -r1.30 -r1.31 src/sys/compat/common/vfs_syscalls_30.c cvs rdiff -u -r1.109 -r1.110 src/sys/compat/ibcs2/ibcs2_misc.c cvs rdiff -u -r1.23 -r1.24 src/sys/compat/irix/irix_dirent.c cvs rdiff -u -r1.49 -r1.50 src/sys/compat/linux/common/linux_file64.c cvs rdiff -u -r1.213 -r1.214 src/sys/compat/linux/common/linux_misc.c cvs rdiff -u -r1.9 -r1.10 src/sys/compat/linux32/common/linux32_dirent.c cvs rdiff -u -r1.37 -r1.38 src/sys/compat/osf1/osf1_file.c cvs rdiff -u -r1.165 -r1.166 src/sys/compat/sunos/sunos_misc.c cvs rdiff -u -r1.68 -r1.69 src/sys/compat/sunos32/sunos32_misc.c cvs rdiff -u -r1.148 -r1.149 src/sys/compat/svr4/svr4_misc.c cvs rdiff -u -r1.67 -r1.68 src/sys/compat/svr4_32/svr4_32_misc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.