Module Name: src Committed By: pooka Date: Mon Aug 16 10:47:16 UTC 2010
Modified Files: src/tests/fs/vfs: t_vfsops.c Log Message: Add a test case which tries to fhopen() a file handle filled with random garbage. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/tests/fs/vfs/t_vfsops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/fs/vfs/t_vfsops.c diff -u src/tests/fs/vfs/t_vfsops.c:1.6 src/tests/fs/vfs/t_vfsops.c:1.7 --- src/tests/fs/vfs/t_vfsops.c:1.6 Thu Aug 12 09:42:53 2010 +++ src/tests/fs/vfs/t_vfsops.c Mon Aug 16 10:47:16 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: t_vfsops.c,v 1.6 2010/08/12 09:42:53 pooka Exp $ */ +/* $NetBSD: t_vfsops.c,v 1.7 2010/08/16 10:47:16 pooka Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -165,11 +165,49 @@ } #undef FNAME +/* + * This test only checks the file system doesn't crash. We *might* + * try a valid file handle. + */ +static void +tfhinval(const atf_tc_t *tc, const char *path) +{ + size_t fhsize; + void *fhp; + unsigned long seed; + int fd; + + if (FSTYPE_TMPFS(tc)) + atf_tc_skip("file handles broken (PR kern/43605)"); + + srandom(seed = time(NULL)); + printf("RNG seed %lu\n", seed); + + RL(rump_sys_chdir(path)); + fhsize = 0; + if (rump_sys_getfh(".", NULL, &fhsize) == -1) { + if (errno == EOPNOTSUPP) { + atf_tc_skip("file handles not supported"); + } else if (errno != E2BIG) { + atf_tc_fail_errno("getfh size"); + } + } + + fhp = malloc(fhsize); + tests_makegarbage(fhp, fhsize); + fd = rump_sys_fhopen(fhp, fhsize, O_RDWR); + if (fd != -1) + rump_sys_close(fd); + + RL(rump_sys_chdir("/")); +} + ATF_TC_FSAPPLY(tmount, "mount/unmount"); ATF_TC_FSAPPLY(tstatvfs, "statvfs"); ATF_TC_FSAPPLY(tsync, "sync"); ATF_TC_FSAPPLY(tfilehandle, "file handles"); ATF_TC_FSAPPLY(tfhremove, "fhtovp for removed file"); +ATF_TC_FSAPPLY(tfhinval, "fhopen invalid filehandle"); ATF_TP_ADD_TCS(tp) { @@ -179,6 +217,7 @@ ATF_TP_FSAPPLY(tsync); ATF_TP_FSAPPLY(tfilehandle); ATF_TP_FSAPPLY(tfhremove); + ATF_TP_FSAPPLY(tfhinval); return atf_no_error(); }