From: Wanlong G. <gao...@cn...> - 2011-11-14 01:26:34
|
Hi Cyril: When you have time, I wanna know what do you think about this. Thanks -Wanlong Gao > Since commit http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=65cfc6722361570bfe255698d9cd4dccaf47570d > which added O_PATH support to the *at() calls, the error return for readlink/readlinkat > for the empty pathname has switched from ENOENT to EINVAL. And this patch merged to linux v2.6.39, > So LTP commit http://ltp.git.sourceforge.net/git/gitweb.cgi?p=ltp/ltp.git;a=commitdiff;h=0cc75148b95e2ed8ecb311f20d91f449461d8860 > fix this with the kernel version v2.6.39 compared. > > But recently, commit http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=1fa1e7f615f4d3ae436fa319af6e4eebdd4026a8 > which ensure we return ENOENT for the empty pathname for normal lookups. > > Now, the patch whitch switch the return value back again is already queued for > 3.0 and 3.1 stable release. > > So, if the return value is EINVAL for empty pathname, it may be a kernel bug, so we > needn't to check the kernel version but return the "kernel bug" INFO to LTP the users. > > Signed-off-by: Wanlong Gao <gao...@cn...> > --- > testcases/kernel/syscalls/readlink/readlink03.c | 10 +++++----- > 1 files changed, 5 insertions(+), 5 deletions(-) > > diff --git a/testcases/kernel/syscalls/readlink/readlink03.c b/testcases/kernel/syscalls/readlink/readlink03.c > index 370bf7d..298d863 100644 > --- a/testcases/kernel/syscalls/readlink/readlink03.c > +++ b/testcases/kernel/syscalls/readlink/readlink03.c > @@ -173,11 +173,6 @@ int main(int ac, char **av) > buf_size = sizeof(buffer); > } > > - if (strncmp(test_desc, "Symlink Pathname is empty", 25) == 0) { > - if ((tst_kvercmp(2, 6, 39)) >= 0) > - Test_cases[i].exp_errno = EINVAL; > - } > - > /* > * Call readlink(2) to test different test conditions. > * verify that it fails with -1 return value and sets > @@ -204,6 +199,11 @@ int main(int ac, char **av) > "errno=%d, expected errno=%d", > test_desc, TEST_ERRNO, > Test_cases[i].exp_errno); > + if ((strncmp(test_desc, "Symlink Pathname is empty", 25) == 0) && > + TEST_ERRNO == EINVAL) { > + printf("It may be a Kernel Bug, see the patch:\n" > + "http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=1fa1e7f615f4d3ae436fa319af6e4eebdd4026a8\n"); > + } > } > } > } |