From 0404fa55d439aff347815bbfd84f77077588f21d Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 7 Jul 2017 20:33:36 +0000 Subject: [PATCH] Avoid even trying to open a SHM file read/write in WAL mode if we know that the file is read-only. This avoids scare security log messages. FossilOrigin-Name: d9d927814019f6c562eca198aca10f407aae423ea0a9f82c789298b77be8c187 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/os_unix.c | 11 +++++++++-- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index 774e828ef5..1577445867 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Merge\slatest\strunk\schanges\swith\sthis\sbranch. -D 2017-06-27T16:48:08.459 +C Avoid\seven\strying\sto\sopen\sa\sSHM\sfile\sread/write\sin\sWAL\smode\sif\swe\sknow\sthat\nthe\sfile\sis\sread-only.\s\sThis\savoids\sscare\ssecurity\slog\smessages. +D 2017-07-07T20:33:36.184 F Makefile.in 227347646e289e3b016ebb7a391ad6ed4ab56525834d56d47d1a83b8d97d6989 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc fb28c0304f8a14c5ce7d4bde9fea1c903f644b49e78ebd9976ab2a1f0eb8afb5 @@ -393,7 +393,7 @@ F src/os.c c03b50496df5815e8f6d45bae4404b73cadf069b F src/os.h 8e976e59eb4ca1c0fca6d35ee803e38951cb0343 F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85 F src/os_setup.h 0dbaea40a7d36bf311613d31342e0b99e2536586 -F src/os_unix.c 4a58dfdfda7e72aab0e393953890a9b6d40a7ff4 +F src/os_unix.c 4193a7dca757d090f566edb733e012af939b5f8cbf4da6d574121ff55dcc67c7 F src/os_win.c 85b19486054c8cd5c4117dea882d983ea065d16e F src/os_win.h 7b073010f1451abe501be30d12f6bc599824944a F src/pager.c 6140d3ccfba4ce89d5a9f113d32bd0554bd4ab8c476bf5cf6651f9060f6bfb1d @@ -1589,7 +1589,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 53b14a388838439087f92282bdaa3f706e9e197a7ed93f8c73e8844cffca8126 87b381663398f029f52cb5598aadd069b03034b6f833ce80ba762b406075a44e -R 6e130e59f6087f79b0c5f510a3cd1fb5 -U dan -Z 3658eeaa042232e633ca1fa776f1869a +P 2b0954060fe10d6de6d479287dd88890f1bef6cc1beca11bc6cdb79f72e2377b +R ee7bac678e139337809f17f1857c6b7a +U drh +Z b85dcfa1091a029b631421bc18f43c11 diff --git a/manifest.uuid b/manifest.uuid index a4f755b1db..9c2d4b8f97 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2b0954060fe10d6de6d479287dd88890f1bef6cc1beca11bc6cdb79f72e2377b \ No newline at end of file +d9d927814019f6c562eca198aca10f407aae423ea0a9f82c789298b77be8c187 \ No newline at end of file diff --git a/src/os_unix.c b/src/os_unix.c index 7468136ee7..f51804f1e0 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -5057,7 +5057,14 @@ static int unixOpenSharedMemory(unixFile *pDbFd){ if( pInode->bProcessLock==0 ){ int openFlags = O_RDWR | O_CREAT; int fd; /* File descriptor for *-shm file */ - if( sqlite3_uri_boolean(pDbFd->zPath, "readonly_shm", 0) ){ + if( sqlite3_uri_boolean(pDbFd->zPath, "readonly_shm", 0) +#ifdef __APPLE__ + /* On MacOS and iOS, avoid even trying to open a read-only SHM file + ** for writing, because doing so generates scary log messages */ + || (osAccess(zShmFilename, R_OK|W_OK)!=0 + && (errno==EPERM || errno==EACCES)) +#endif + ){ openFlags = O_RDONLY; pShmNode->isReadonly = 1; } @@ -5071,7 +5078,7 @@ static int unixOpenSharedMemory(unixFile *pDbFd){ ** may be also be used by a read/write database connection. */ #if defined(SQLITE_ENABLE_PERSIST_WAL)&&(SQLITE_ENABLE_LOCKING_STYLE \ || defined(__APPLE__)) - if( fd<0 && errno!=EISDIR && pShmNode->isReadonly==0 + if( fd<0 && (errno==EPERM || errno==EACCES) && pShmNode->isReadonly==0 && (pDbFd->openFlags & O_RDWR)!=O_RDWR ){ fd = robust_open(zShmFilename, O_RDONLY, (sStat.st_mode&0777)); -- 2.47.3