[llvm-branch-commits] [compiler-rt-branch] r303146 - Merging rr302639:
Renato Golin via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon May 15 23:57:03 PDT 2017
Author: rengolin
Date: Tue May 16 01:57:03 2017
New Revision: 303146
URL: http://llvm.org/viewvc/llvm-project?rev=303146&view=rev
Log:
Merging rr302639:
------------------------------------------------------------------------
r302639 | azanella | 2017-05-10 13:18:25 +0100 (Wed, 10 May 2017) | 11 lines
[msan] Fix getmntent{_r} for empty /etc/fstab
Some configuration (for instance default docker ubuntu images) uses
a default empty and invalid /etc/fstab configuration file. It makes
any call to getmntent return NULL and it leads to failures on
Msan-aarch64{-with-call}-Test/MemorySanitizer.getmntent{_r}.
This patch fixes it by creating a temporary file with some valid
entries (although not valid for the system) to use along with
setmntent/getmntent.
------------------------------------------------------------------------
Modified:
compiler-rt/branches/release_40/ (props changed)
compiler-rt/branches/release_40/lib/msan/tests/msan_test.cc
Propchange: compiler-rt/branches/release_40/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue May 16 01:57:03 2017
@@ -1 +1 @@
-/compiler-rt/trunk:292257,292517,292729,293120,293536,294425,294806,294886
+/compiler-rt/trunk:292257,292517,292729,293120,293536,294425,294806,294886,302639
Modified: compiler-rt/branches/release_40/lib/msan/tests/msan_test.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/branches/release_40/lib/msan/tests/msan_test.cc?rev=303146&r1=303145&r2=303146&view=diff
==============================================================================
--- compiler-rt/branches/release_40/lib/msan/tests/msan_test.cc (original)
+++ compiler-rt/branches/release_40/lib/msan/tests/msan_test.cc Tue May 16 01:57:03 2017
@@ -2124,10 +2124,51 @@ TEST(MemorySanitizer, localtime_r) {
EXPECT_NE(0U, strlen(time.tm_zone));
}
+#if !defined(__FreeBSD__)
+/* Creates a temporary file with contents similar to /etc/fstab to be used
+ with getmntent{_r}. */
+class TempFstabFile {
+ public:
+ TempFstabFile() : fd (-1) { }
+ ~TempFstabFile() {
+ if (fd >= 0)
+ close (fd);
+ }
+
+ bool Create(void) {
+ snprintf(tmpfile, sizeof(tmpfile), "/tmp/msan.getmntent.tmp.XXXXXX");
+
+ fd = mkstemp(tmpfile);
+ if (fd == -1)
+ return false;
+
+ const char entry[] = "/dev/root / ext4 errors=remount-ro 0 1";
+ size_t entrylen = sizeof(entry);
+
+ size_t bytesWritten = write(fd, entry, entrylen);
+ if (entrylen != bytesWritten)
+ return false;
+
+ return true;
+ }
+
+ const char* FileName(void) {
+ return tmpfile;
+ }
+
+ private:
+ char tmpfile[128];
+ int fd;
+};
+#endif
+
// There's no getmntent() on FreeBSD.
#if !defined(__FreeBSD__)
TEST(MemorySanitizer, getmntent) {
- FILE *fp = setmntent("/etc/fstab", "r");
+ TempFstabFile fstabtmp;
+ ASSERT_TRUE(fstabtmp.Create());
+ FILE *fp = setmntent(fstabtmp.FileName(), "r");
+
struct mntent *mnt = getmntent(fp);
ASSERT_TRUE(mnt != NULL);
ASSERT_NE(0U, strlen(mnt->mnt_fsname));
@@ -2143,7 +2184,10 @@ TEST(MemorySanitizer, getmntent) {
// There's no getmntent_r() on FreeBSD.
#if !defined(__FreeBSD__)
TEST(MemorySanitizer, getmntent_r) {
- FILE *fp = setmntent("/etc/fstab", "r");
+ TempFstabFile fstabtmp;
+ ASSERT_TRUE(fstabtmp.Create());
+ FILE *fp = setmntent(fstabtmp.FileName(), "r");
+
struct mntent mntbuf;
char buf[1000];
struct mntent *mnt = getmntent_r(fp, &mntbuf, buf, sizeof(buf));
More information about the llvm-branch-commits
mailing list